Se você definir globalmente
alias ':(){ :|:& };:'='echo fork bomb averted'
essa seria uma estratégia de segurança eficaz para evitar a execução da bomba Bash fork ou ainda haveria uma maneira de executá-la?
Suponho que a pergunta seja: existe uma maneira de executar um comando quando ele é alias a outra coisa?
Os
dois, não,três,... Entre os principais obstáculos para isso estão:Não é um nome válido para um alias. Manual online do Bash :
(
,)
,&
e|
whitespace estão disponíveis no Bash 4.4.Essa string em particular não é a única maneira de escrever uma bomba fork no shell, apenas famosa porque parece obscura. Por exemplo, não há necessidade de chamar a função
:
em vez de algo realmente composto de letras.Se você pudesse definir o alias, o usuário poderia desdefinir o alias, contorná-lo escapando o nome do alias na linha de comando ou desabilitar os aliases completamente, possivelmente executando a função em um script (o Bash não expande os aliases em shells não interativos) .
Mesmo que o shell seja restrito o suficiente para parar todas as versões de uma fork bomb, um sistema de uso geral terá outros utilitários programáveis que podem recorrer e bifurcar subprocessos. Tem Perl ou um compilador C? Bastante fácil. Mesmo awk provavelmente poderia fazê-lo. Mesmo se você não os tiver instalados, também precisará impedir que o usuário traga binários compilados de fora do sistema ou execute o
/bin/sh
que provavelmente precisa ser um shell totalmente operacional para que o resto do sistema funcione.Basta usar
ulimit -u
(ieRLIMIT_NPROC
) ou equivalente para restringir o número de processos que um usuário pode iniciar. Na maioria dos sistemas Linux, épam_limits
possível definir o limite de contagem de processos antes que qualquer comando escolhido pelo usuário seja iniciado.Algo assim
/etc/security/limits.conf
colocaria um limite rígido de 50 processos para todos os usuários:(Stephen Kitt já mencionou o ponto 1, Jeff Schaller mencionou 2 e 3.)
Não. Existem muitas maneiras de escrever uma fork-bomb.
O escritor malvado da fork-bomb tentará novamente com um nome de função diferente. Ou outras alterações até que sua bomba de garfo tenha sucesso.
O escritor de fork-bomb inadvertido não produzirá a fork-bomb canônica em primeiro lugar.
Na verdade, é muito fácil se tornar um escritor inadvertido de fork-bomb. Por exemplo, você pode usar recursive
make
com um external, uncheckedcd
, combinando-o com a-j
opção e subdiretórios inexistentes - um exemplo real que encontrei uma vez.Você não pode se proteger contra todas as possibilidades, e certamente não contra um invasor determinado. Tudo o que você conseguirá é aumentar a complexidade do seu sistema.
Você não pode alias uma bomba de fork, porque não é um nome de alias válido :
Alguns shells não verificam nomes de alias quando são declarados, mas ao interpretar comandos e ignoram o nome inválido. Um fork bomb sempre incluirá
&
, que não pode ser incluído em um nome de alias válido, portanto, proteger-se dessa maneira não é possível.Duas vezes, não.
Essa não é a única maneira de escrever uma fork-bomb.
Há também várias maneiras de executar "um comando" quando há um alias:
Exemplo: