Linuxhard.org

7 anos de Linux no Brasil – Dicas, Artigos e Notícias de Linux e Hardware
  • Início
  • Resulinux
  • KDuXP
  • Baixe Agora
  • Versões em Teste
  • Screenshots
  • Fórum
  • Quem somos?
  • Wiki

: (){ :|:& };: Como vencer o comando da morte?

Luciano Andress Martini | 5 de maio de 2010
Easy AdSense by Unreal

Este simples comando é capaz de derrubar um servidor ou estação linux em poucos segundos: não importa com qual usuário você se logue num ssh ou terminal:
: (){ : | : & };:

Há muito tempo me deparei com este problema nos meus servidores que rodavam ssh e após conseguir soluciona-lo de diversos modos diferentes decidi descreve-los aqui: (não esqueça de fazer estes comandos com o usuário administrador, recomendo que use o comando sudo su ou simplesmente su(dependendo a distribuição) antes de executar os comandos)

1- O primeiro modo e mais simples é digitando
echo 'alias :="echo 1"' >>/etc/profile
Com isso o comando da morte já não irá mais funcionar, entretanto esta não é a solução ideal, apesar de ser o mais simples no caso de você não ter o pam. (Existem formas de encontrar brechas nessa solução, como o usuário criar uma nova alias, então só os outros modos são 100% garantidos)

2- O segundo modo é limitando um grupo de usuários quanto o número de processos (no caso mostro como limitar o grupo estudantes):
echo '@estudantes hard nproc 600' >>/etc/security/limits.conf
(Ou Edite o arquivo /etc/security/limits.conf)
-Não se esqueça de criar um grupo estudantes, em /etc/group e de colocar na frente dele o nome dos usuários em que se aplicara a permissão.

3- O terceiro modo é limitando todos os usuários quanto ao número de processos:
echo '* hard nproc 1000' >>/etc/security/limits.conf

Pronto! Nunca mais os usuários do SSH vão poder fazer essa brincadeira ! =[ Que pena.

Categorias
Linux
Comentários RSS
Comentários RSS
Trackback
Trackback

« Resulinux 2.91 URV disponível em ISO Compre o livro GNU/Linux segunda edição com exclusividade na Magmel »

7 Respostas para “: (){ :|:& };: Como vencer o comando da morte?”

  1. Tomaz Edson disse:
    6 de maio de 2010 às 14:32

    Grande Mestre Luciano,

    O colega poderia descrever o funcinamento desse comando malígno?
    É que tou começando a estudar mais shell script e gostaria de saber esse aí.
    Aproveitando a deixa, rsrsrs, o colega teria alguma apotila free para indicar?

    De já agradeço imensamente.

    Abraços,

    TEMS

  2. tonyfrasouza disse:
    9 de maio de 2010 às 17:34

    Realmente é muito interessante, testei aqui e travou tudo….
    Estuo shell e em alguns livros que tenho conta de muias artimanhas, mas esta daí não me lembro de ter visto em mais de 15 anos de terminal…

  3. xxx disse:
    31 de maio de 2010 às 16:13

    o q esse comando faz?

  4. Fabricio Biazzotto disse:
    26 de junho de 2010 às 22:24

    Funciona assim, primeiro é declarada a função : (dois pontos)
    As funções são declaradas da seguinte forma:

    nome_da_função(){ comandos };

    No caso o nome da função é : (dois pontos)

    Os comandos são:
    : | :&

    ou seja, chama a própria função executando-a simultaneamente com ela própria via | (pipe), o & (e comercial) faz com que estes comandos sejam executados em segundo plano.

    O : (dois pontos) no final do comando da morte chama a função depois de declará-la.

    Resumindo este comando gera uma função que chama ela própria duas vezes, infinitas vezes, gerando um loop.

    Espero que dê para entender o conceito.

  5. Luciano Andress Martini disse:
    27 de junho de 2010 às 1:57

    Valeu Fabricio é bem simples mesmo o funcionamento e eu estava achando estranho pois : é um comando que produz código de sucesso em Shell Script, isto é digitar : e pressionar enter, gera o código de sucesso $? = 0.

    Mas aí foi aplicado de uma forma bem diferente para confundir a mente…
    Sendo assim pode-se declarar uma função com um nome diferente.

  6. Tomaz Edson disse:
    5 de julho de 2010 às 21:35

    É isso aí caro Fabrício, não custa nada poder compartilhar conhecimentos com os simples newbies.
    Valeu mesmo pela explicação, só assim nosso grande Luciano se manifestou também.
    Luciano, vc ainda me deve o complemento da resposta de minha observação acima, esqueceu não, nẽ!?

    Abraços,

    TEMS

  7. tonyfrasouza disse:
    7 de julho de 2010 às 20:17

    Isso é que dá ficar anos usando shell para os trabalhos habituais e esquecer que é preciso realmente conhecê-lo. Isto, se for possível, conhecer de todo. Melhor assim, pois haverá sempre um crescimento de possibilidades. Obrigado as perguntas feitas e a explicação do fabricio.

Deixe uma Resposta

Clique aqui para cancelar a resposta.

Publicidade

Traduzir este Site

  • Categorias

    • Hardware (1)
    • Linux (14)
      • Sistema de Arquivos (1)
    • Mundo Software Livre (53)
    • Programação (4)
    • TI (2)

Arquivos

  • julho 2010
  • maio 2010
  • março 2010
  • fevereiro 2010
  • janeiro 2010
  • dezembro 2009
  • novembro 2009
  • outubro 2009
  • agosto 2009
  • julho 2009
  • maio 2009
  • abril 2009
  • março 2009
  • fevereiro 2009
  • janeiro 2009
  • dezembro 2008
  • novembro 2008
  • outubro 2008
  • setembro 2008
  • julho 2008

Links

  • br-linux
  • Portal Criativa
  • Ubuntu-BR

Parceiros

Administração

  • Registrar-se
  • Login
  • Posts RSS
  • RSS dos comentários
  • WordPress.org
rss Comentários RSS valid xhtml 1.1 design by jide powered by Wordpress get firefox by webmaster