Impedir a bomba de forquilha dentro do contêiner de estivador

8

Atualmente, estou tendo dificuldades para limitar o número de processos para o usuário que chamei sandbox.

Eu configurei o limite de processos dentro /etc/security/limits.confdesta forma:

sandbox            hard    nproc            100

Mas se eu quiser conectar-me ao contêiner como sandboxusuário, o ssh retornará:

shell request failed on channel 0

Então, entrei roote verifiquei quantos processos estão sendo executados por sandboxusuário, mas é menor que 5.

Então, o que poderia estar me impedindo de acessar o ssh?
Sem definir limites, o ssh login para o sandboxusuário funciona ok.

Ou existe outra maneira de impedir ataques com bombas de garfo?

eXPi
fonte

Respostas:

2

qualquer erro ao conectar-se a um sshd é registrado em /var/log/auth.log (no sistema operacional baseado em debian ou segurança em sistemas baseados em redhat)

Se não for, coloque LogLevel VERBOSEno /etc/ssh/sshd_confige sshd recarga. Isso mostrará por que o sshd está recusando sua conexão a seguir.

Dito isto, voltando ao seu limitador de fork-bomb: as máquinas docker são baseadas no LXC, um sistema de contêiner para Linux. O LXC está usando o CGROUPS para gerenciar limites de recursos para cada contêiner.

em / sys / fs / cgroups, você pode configurar qualquer limite para um LXC em execução, e em / Var / lib / lxc / vmname / config, você pode configurar os limites que serão impostos em tempo de execução.

A limitação do número de processos em um cgroup é feita pelo subsistema do contador de tarefas (adicionado ao kernel do Linux em 2011 http://lkml.iu.edu//hypermail/linux/kernel/1109.0/01455.html )

Com um kernel Linux bastante recente, a limitação do número de processos permitidos para um cgroup é feita adicionando esse tipo de linha ao arquivo de configuração do seu lxc:

lxc.cgroup.tasks.limit = 1024 

para um máximo de 1024 processos

(aviso: informações não verificadas em uma máquina real, a serem confirmadas)

Benjamin Sonntag
fonte
1
Obrigado. Para correção, os contêineres do Docker mais recentes não são baseados no LXC, o LXC está disponível como driver. O driver nativo dos contêineres do Docker é baseado diretamente nos namespaces do kernel. Mas eu realmente gosto de idéias com cgroups. Eu não sabia que é possível limitar a contagem de processos. Definitivamente vou tentar.
expi
2
Atualmente, o subsistema de contador de tarefas ainda não chegou ao kernel oficial.
Fabian Jakobs