Empêcher la bombe à fourche à l'intérieur du conteneur docker

8

Je suis actuellement aux prises avec un nombre limité de processus pour l'utilisateur que j'ai appelé sandbox.

J'ai configuré la limite de processus à l'intérieur /etc/security/limits.confcomme ceci:

sandbox            hard    nproc            100

Mais si je veux me connecter au conteneur en tant sandboxqu'utilisateur, ssh renvoie:

shell request failed on channel 0

Je me suis donc connecté en tant que rootet j'ai vérifié le nombre de processus en cours d'exécution par sandboxutilisateur, mais c'est moins de 5.

Alors, qu'est-ce qui pourrait m'empêcher de me connecter via ssh?
Sans définir de limites, la connexion ssh pour l' sandboxutilisateur fonctionne bien.

Ou existe-t-il un autre moyen d'empêcher l'attaque à la fourche?

eXPi
la source

Réponses:

2

toute erreur lors de la connexion à un sshd est enregistrée dans /var/log/auth.log (dans le système d'exploitation basé sur Debian ou la sécurité dans les systèmes basés sur Redhat)

Si ce n'est pas, mis LogLevel VERBOSEdans /etc/ssh/sshd_configet reload sshd. Cela vous montrera pourquoi sshd refuse votre connexion ensuite.

Cela dit, revenons à votre limiteur de bombe à fourche: les machines à docker sont basées sur LXC, un système de conteneur pour Linux. LXC utilise CGROUPS pour gérer les limites de ressources pour chaque conteneur.

dans / sys / fs / cgroups, vous pouvez configurer n'importe quelle limite pour un LXC en cours d'exécution, et dans / Var / lib / lxc / vmname / config, vous pouvez configurer les limites qui seront appliquées à boottime.

La limitation du nombre de processus dans un groupe de contrôle est effectuée par le sous-système de compteur de tâches (ajouté dans le noyau Linux en 2011 http://lkml.iu.edu//hypermail/linux/kernel/1109.0/01455.html )

Avec un noyau Linux assez récent, la limitation du nombre de processus autorisés pour un cgroup se fait donc en ajoutant ce type de ligne dans le fichier de configuration de votre lxc:

lxc.cgroup.tasks.limit = 1024 

pour un maximum de 1024 processus

(Avertissement: informations non vérifiées sur une vraie machine, à confirmer)

Benjamin Sonntag
la source
1
Merci. Pour la correction, les derniers conteneurs Docker ne sont pas basés sur LXC, LXC est disponible en tant que pilote. Le pilote natif des conteneurs Docker est basé directement sur les espaces de noms du noyau. Mais j'aime vraiment l'idée avec cgroups, je ne savais pas qu'il était possible de limiter le nombre de processus. Je vais certainement l'essayer.
eXPi
2
À ce jour, le sous-système de compteur de tâches n'a toujours pas atterri dans le noyau officiel.
Fabian Jakobs