chmod 777: O Comando Proibido

Diego Hernandes
hernandev
Published in
3 min readJun 8, 2016

Olá, só de ler o título desse artigo sua reação deverá ser uma das duas:

  • Reação 1: Realmente!
  • Reação 2: Até hoje tem gente que não sabe isso?

Se a sua reação não foi uma das duas, continue lendo…

“roda o comando chmod 777 pasta_x!”

Você já deve ter visto isso em alguma comunidade, algum novato com problemas de permissões e alguém prontamente responde isso.

Bom, se você é um dos que já responderam isso, procure essa pessoa que te pediu ajuda e indique esse artigo, agora mesmo, para reparar o estrago de segurança que você causou.

“Nossa esse cara tá exagerando nesse artigo”

Estou? se a pessoa que você mandou rodar esse comando usa uma hospedagem compartilhada (sim, tem gente que usa até hoje), você não ensinou a essa pessoa como resolver os problemas de permissão, mas sim como expor, com permissões de execução, alteração e remoção os arquivos da aplicação dessa pessoa! Simples assim.

Então qual a forma correta de se resolver?

A solução é diferente para diversos casos, mas vamos listar os mais comuns e as soluções mais típicas.

1 - Hospedagem Compartilhada

Na hospedagem compartilhada não há muito o que se fazer, se você tem acesso SSH, você pode rodar o comando

> chown -R meu_usuario:meu_grupo pasta_do_meu_app

Isso fará com que as permissões incorretas de propriedade voltem ao normal.

se não resolver, você pode aplicar as permissões 0755 para pastas, e 0644 para arquivos com os comandos:

> find /Caminho/Do/Meu/App -type d -exec chmod 0755 {} \;
> find /Caminho/Do/Mey/App -type f -exec chmod 0644 {} \;

Permissões mais elevadas que isso são inseguras, na verdade essas já são em ambiente mal configurado, mas não vamos entrar no mérito da qualidade do seu web hosting.

Se isso não resolver, “chame o técnico”, avise ao seu provedor que as permissões estão corretas mas que algo não está configurado corretamente, se não te ouvirem, mude de provedor.

2 - VPS ou Dedicado ou Container ou Whatever

Consideraremos para todos os efeitos os dois principais servidores web, Apache e Nginx.

> Apache:

Se a você usa o usuário “charlinho” pra subir o seu app charlinho.com, a forma sensata de configurar o Apache para não ter problemas de permissão é alterar o usuário em que o Apache roda para charlinho, o que pode ser feito no ubuntu, editando o arquivo /etc/apache2/envvars

Alterando as seguintes variáveis:

export APACHE_RUN_USER=charlinho
export APACHE_RUN_GROUP=charlinho

> DICA EXTRA DE SEGURANÇA: o usuário charlinho não deve ter permissões de root, se precisar que ele reinicie o servidor web após o deploy, por exemplo, restrinja a configuração do sudoers para esse commando específico.

> Nginx

No nginx é ainda mais simples, só alterar a variável user no arquivo /etc/nginx/nginx/conf

user charlinho;

> PHP-FPM, ou outro backend

Se você programa em PHP, você também deve alterar o pool para o usuário correto, ou criar um novo, as variáveis são:

user = charlinho
group = charlinho

> Para que o nginx possa de fato se conectar com as alterações que você fez:

listen.owner = charlinho
listen.group = charlinho

Considerações finais.

Segurança na WEB é coisa séria, esse artigo só trata essas informações de forma extremamente superficial e você deveria entender muito bem como funcionam as permissões e como administrar os serviços.
Se não sabe, não tenha vergonha, vá as ruas, eu digo, as comunidades e peça ajuda, pesquise no google, stackoverflow, whatever.

Momento Jabá

Esse artigo foi idealizado durante uma longa e acalorada discussão no slack da comunidade Laravel Brasil: http://slack.laravel.com.br

Se quiser aprender mais sobre infraestrutura, o universo e tudo mais, dê uma passada no https://codecasts.com.br

P.S. Charlinho?

Uma homenagem ao personagem Charlinho do Hermes & Renato — “Charlinho: o menino que queria estudar”

/whoami

Oi, eu sou o Diego Hernandes, sou Co-Fundador do CODECASTS e CTO da Kino Contabilidade Online.
Se você gostou desse artigo, talvez queira me acompanhar em outras redes sociais, como Facebook, Github e Twitter.

--

--