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

67

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

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

Luis Alvarado
fonte
Gostaria de recomendar esta discussão em @ serverfault.com. Ele faz um ótimo trabalho ao fornecer um exemplo de configuração para apache2 e permissões. serverfault.com/q/6895/57036 PS: Não posso comentar, por isso tenho que adicioná-lo como resposta.
MystaMax

Respostas:

81

777 é uma permissão ruim em geral e eu mostrarei o porquê.

Apesar de parecer em um cassino ou em Las Vegas, o 777 não significa jackpot para você. Em vez disso, jackpot para quem deseja modificar seus arquivos. 777 (e seu feio primo 666) permitem permissões de Leitura e Gravação (e, no caso de 777, Executar) para outros . Você pode aprender mais sobre como as permissões de arquivo funcionam , mas, em suma, existem três grupos de permissões: proprietário, grupo e outros . Ao definir a permissão para 6 ou 7 ( rw-ou rwx) para outro, você oferece 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:

marco@desktop:~/Projects/AskUbuntu/20105$ cd ..
marco@desktop:~/Projects/AskUbuntu$ chmod 0777 20105
marco@desktop:~/Projects/AskUbuntu$ cd 20105/
marco@desktop:~/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 ..
marco@desktop:~/Projects/AskUbuntu/20105$ touch test
marco@desktop:~/Projects/AskUbuntu/20105$ chmod 0666 test 

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

marco@desktop:~/Projects/AskUbuntu/20105$ sudo su - malicious
malicious@desktop:~$ cd /home/marco/Projects/AskUbuntu/20105
malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ ls
test
malicious@desktop:/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
malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ touch bad
malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ echo "OVERWRITE" > test 
malicious@desktop:/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 que, abaixo, em um diretório com 755 e arquivos com 644, posso ver arquivos e diretórios internos, mas não consigo editar os arquivos nem criar novos:

malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ cd /home/marco/Projects
malicious@desktop:/home/marco/Projects$ touch hey
touch: cannot touch `hey': Permission denied

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

Marco Ceppi
fonte
13
Sinto muito pelo idioma, mas esta é uma resposta excelente. Obrigado Marco.
Luis Alvarado
E se você criou apenas usuários para as pessoas com permissão para gerenciar a pasta / var / www livremente? Eu uso Máquinas Virtuais dedicadas para cada servidor da Web que eu corro, e me pergunto se ainda é verdade que você deve ter tanto cuidado.
UrkoM
11
@ UrkoM Você nunca pode ter muito cuidado. Se você deseja que as pessoas acessem os mesmos arquivos, pode aumentar as permissões do grupo para 6/7 (0664/0775) e adicionar cada usuário a esse grupo. Embora essa configuração (e a que descrevi na minha resposta) não atenda a todos os critérios, eu diria que 90% das vezes 0755/0644 são as permissões que você deseja usar. Se você só tem sistemas "um usuário", em seguida, o risco de ter outra com permissões de escrita não é como muito um risco.
Marco Ceppi
4
@UrkoM A outra coisa a considerar é que existem muitos "usuários" que não representam pessoas reais, mas existem para que certos serviços possam ser executados com habilidades reduzidas (principalmente por razões de segurança, mas também para reduzir os danos que podem ocorrer). de um bug de estabilidade). Ver o conteúdo do /etc/passwde você verá os usuários como mail, news, e nobody. Mesmo que seja bom que todos os usuários humanos reais do seu sistema possam modificar o conteúdo /var/www, isso não significa que você deseja que todos os processos sejam executados, pois esses usuários "artificiais" poderão fazê-lo.
Eliah Kagan 16/08/2012
1) Como a resposta mais simples possível. Não explica como o Apache ou o Nginx podem manipular pastas ou arquivos. Apache ou Nginx são servidores, para que os aplicativos, eles não são o seu usuário "malicioso", que não pode digitar ls -lah, touch badou quaisquer outros comandos. Como eles podem manipular pastas e arquivos? 2) Herança. Você não cobriu nenhuma herança entre pastas e arquivos dentro delas. Há pelo menos 2-3 passo antes de um arquivo: /var, /var/www, /var/www/project. Quais permissões de usuário / grupo devem /varter? Quais permissões de usuário / grupo devem /var/wwwter? E assim por diante. Como eles cooperam?
Verde
15

Essencialmente, ter permissões do 777 não o fará invadir por conta própria, mas se alguém entrar em qualquer lugar, ele poderá ser usado para escalar permissões e obter controle completo sobre o seu computador. A pior parte é que suas permissões estão usando "7" - isso significa ler, gravar 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 a http://seucomputador.exemplo.com:80/. Se você tiver alguma página disponível que permita o upload de imagens, ele poderá renomear um executável para terminar com ".jpg" e enviá-lo ao seu servidor. Agora ele navega para esse 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 agradar muito, mas, como funcionou, ele sabe que funcionou como usuário apache. Ele então carrega uma versão modificada que edita os arquivos de configuração do apache, concedendo a ele ainda mais acesso - digamos que o apache produza o conteúdo de / etc / passwd. Ele pode usar essas informações para ver quais usuários existem no sistema. Ele pode se conectar usando ssh e tentar senhas comuns para fazer login como esses usuários - se isso não funcionar, ele passará a usar um ataque de força bruta. Se ele entrar como usuário com acesso sudo,

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

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

Robôs Imaginários
fonte
+1 para "aderir" e "escalar". Descreve bem o conceito.
Kari Kääriäinen 26/03
3
Você pode explicar como um arquivo disfarçado de jpg pode ser executado em um servidor?
Anurag Peshne