Por que não deveria / var / www ter chmod 777

62

Ao desenvolver uma página em um host local, às vezes recebo um erro de "Permissão negada", que posso resolver executando chmod -R 777 /var/www . No entanto, as pessoas estão me dizendo que esta é uma má ideia por razões de segurança.

Por que o /var/www não deveria ter um chmod de 777?

    
por Luis Alvarado 05.01.2011 / 02:03

2 respostas

74

O 777 é uma má permissão em geral e mostrarei o porquê.

Apesar de parecer em um cassino ou em Las Vegas, o 777 não significa jackpot para você. Em vez disso, o jackpot para quem deseja modificar seus arquivos. 777 (e seu primo feio 666) permitem permissões de leitura e gravação (e, no caso de 777, Execute) para outro . Você pode aprender mais sobre como as permissões de arquivo funcionam , mas resumindo, existem três grupos de permissões: proprietário, grupo e outro . Ao definir a permissão para 6 ou 7 ( rw- ou rwx ) para outro você dá a qualquer usuário a capacidade de editar e manipular esses arquivos e pastas. Normalmente, como você pode imaginar, isso é ruim para a segurança.

Aqui está o meu exemplo:

[email protected]:~/Projects/AskUbuntu/20105$ cd ..
[email protected]:~/Projects/AskUbuntu$ chmod 0777 20105
[email protected]:~/Projects/AskUbuntu$ cd 20105/
[email protected]:~/Projects/AskUbuntu/20105$ ls -lah
total 8.0K
drwxrwxrwx 2 marco marco 4.0K 2011-01-04 20:32 .
drwxr-xr-x 3 marco marco 4.0K 2011-01-04 20:32 ..
[email protected]:~/Projects/AskUbuntu/20105$ touch test
[email protected]:~/Projects/AskUbuntu/20105$ chmod 0666 test 

Até agora eu criei uma pasta e fiz um arquivo com permissões "ruins" (777 e 666). Agora vou mudar para outro usuário e tentar manipular esses arquivos.

[email protected]:~/Projects/AskUbuntu/20105$ sudo su - malicious
[email protected]:~$ cd /home/marco/Projects/AskUbuntu/20105
[email protected]:/home/marco/Projects/AskUbuntu/20105$ ls
test
[email protected]:/home/marco/Projects/AskUbuntu/20105$ ls -lah
total 8.0K
drwxrwxrwx 2 marco marco 4.0K 2011-01-04 20:33 .
drwxr-xr-x 3 marco marco 4.0K 2011-01-04 20:32 ..
-rw-rw-rw- 1 marco marco    0 2011-01-04 20:33 test
[email protected]:/home/marco/Projects/AskUbuntu/20105$ touch bad
[email protected]:/home/marco/Projects/AskUbuntu/20105$ echo "OVERWRITE" > test 
[email protected]:/home/marco/Projects/AskUbuntu/20105$ cat test 
OVERWRITE

Como esse usuário "malicioso", consegui colocar arquivos no diretório e injetar texto em arquivos já existentes. Considerando abaixo, em um diretório com 755 e arquivos com 644, consigo ver dentro de arquivos e diretórios mas não consigo editar os arquivos nem criar novos:

[email protected]:/home/marco/Projects/AskUbuntu/20105$ cd /home/marco/Projects
[email protected]:/home/marco/Projects$ touch hey
touch: cannot touch 'hey': Permission denied

Para as permissões do Apache, você vai querer ficar com 0755 e 0644 (AKA umask 022 ) para pastas e arquivos, respectivamente. Isso permite que você, como proprietário dos arquivos, os edite e manipule, enquanto fornece ao Apache os níveis mínimos de acesso necessários para operar.

    
por Marco Ceppi 05.01.2011 / 02:39
13

Essencialmente, ter permissões do 777 não fará com que você seja hackeado por conta própria, mas se alguém conseguir entrar em qualquer lugar, ele poderá ser usado para escalar permissões e obter controle total sobre o seu computador. A pior parte é que suas permissões estão usando "7" - isso significa ler, escrever, e executar permissões.

Digamos que um hacker queira assumir o controle do seu computador. Ele pode se conectar ao seu computador usando um navegador da Web, conectando-se ao link . Se você tem alguma página disponível que permita que ele envie imagens, ele pode renomear um executável para finalizar com ".jpg" e carregá-lo no seu servidor. Agora ele navega para o arquivo em seu navegador e o executa, porque o linux não se importa com a extensão, apenas vê que é um arquivo executável. Isso pode não lhe dar muito, mas porque funcionou, ele sabe que funcionava como o usuário do apache. Ele então carrega uma versão modificada que irá editar os arquivos de configuração do apache, concedendo-lhe ainda mais acesso - digamos que o apache mostrará o conteúdo de / etc / passwd. Ele pode então usar essa informação para ver o que os usuários existem no sistema. Ele pode então se conectar usando o ssh e tentar senhas comuns para se conectar como aqueles usuários - se isso não funcionar, ele vai usar um ataque total de força bruta. Se ele entrar como usuário com acesso ao sudo, todo o sistema será dele.

Agora, você pode dizer que isso não é provável, ou que não é como um verdadeiro hacker funcionaria. Isso é verdade, mas o ponto é que, ao definir arquivos como chmod 777, você abriu uma falha de segurança que um hacker pode usar da maneira que achar melhor.

Se você, em vez disso, seguir o Princípio do menor privilégio , esse problema não ocorrerá e seu sistema será muito mais difícil de hackear. Mesmo que seja mais difícil fazer as coisas corretamente, você ainda deve fazer todos os esforços para fazê-lo.

    
por ImaginaryRobots 29.10.2012 / 18:39