Verhindern Sie eine Gabelbombe im Docker-Container

8

Ich habe derzeit Probleme mit der Begrenzung der Anzahl der Prozesse für Benutzer, die ich angerufen habe sandbox.

Ich habe die Prozessbegrenzung im Inneren /etc/security/limits.confwie folgt konfiguriert :

sandbox            hard    nproc            100

Wenn ich jedoch als sandboxBenutzer eine Verbindung zum Container herstellen möchte , gibt ssh Folgendes zurück:

shell request failed on channel 0

Also habe ich mich als angemeldet rootund überprüft, wie viele Prozesse vom sandboxBenutzer ausgeführt werden, aber es sind weniger als 5.

Was könnte mich also daran hindern, mich über ssh anzumelden?
Ohne Grenzen zu setzen, sandboxfunktioniert die SSH-Anmeldung für den Benutzer einwandfrei.

Oder gibt es eine andere Möglichkeit, einen Gabelbombenangriff zu verhindern?

eXPi
quelle

Antworten:

2

Jeder Fehler beim Herstellen einer Verbindung zu einem sshd wird in /var/log/auth.log protokolliert (in einem auf Debian basierenden Betriebssystem oder Sicherheit in auf Redhat basierenden Systemen).

Wenn es nicht gesetzt LogLevel VERBOSEin /etc/ssh/sshd_configund reload sshd. Dies zeigt Ihnen, warum sshd als nächstes Ihre Verbindung ablehnt.

Zurück zu Ihrem Gabelbombenbegrenzer: Docker-Maschinen basieren auf LXC, einem Containersystem für Linux. LXC verwendet CGROUPS, um Ressourcenlimits für jeden Container zu verwalten.

In / sys / fs / cgroups können Sie ein beliebiges Limit für einen laufenden LXC festlegen. In / Var / lib / lxc / vmname / config können Sie die Limits festlegen, die zum Boottime erzwungen werden.

Die Begrenzung der Anzahl der Prozesse in einer cgroup erfolgt durch das Taskzähler- Subsystem (2011 im Linux-Kernel hinzugefügt http://lkml.iu.edu//hypermail/linux/kernel/1109.0/01455.html ).

Mit einem ausreichend aktuellen Linux-Kernel können Sie daher die Anzahl der zulässigen Prozesse für eine cgroup begrenzen, indem Sie diese Art von Zeile in die Konfigurationsdatei Ihres lxc einfügen:

lxc.cgroup.tasks.limit = 1024 

für maximal 1024 Prozesse

(Haftungsausschluss: Informationen, die auf einem realen Computer nicht überprüft wurden, müssen noch bestätigt werden)

Benjamin Sonntag
quelle
1
Vielen Dank. Zur Korrektur basieren die neuesten Docker-Container nicht auf LXC, LXC ist als Treiber verfügbar. Der native Treiber für Docker-Container basiert direkt auf Kernel-Namespaces. Aber ich mag Ideen mit Gruppen wirklich. Ich wusste nicht, dass es möglich ist, die Anzahl der Prozesse zu begrenzen. Ich werde es auf jeden Fall versuchen.
eXPi
2
Bis heute ist das Task-Counter-Subsystem noch nicht im offiziellen Kernel gelandet.
Fabian Jakobs