Como corrigir as permissões e o dono dos arquivos de uma conta cPanel pelo SSH: 755 para pastas, 644 para arquivos, public_html em 750 e nada de 777.
Permissão ou dono errado nos arquivos é causa clássica de erro 500, erro 403 e de WordPress que não consegue enviar imagens. Acontece muito depois de restaurar um backup como root, de enviar arquivos por SFTP com o usuário root ou de alguém aplicar 777 "para funcionar". Em servidores cPanel atuais o PHP roda com o usuário da conta (PHP-FPM, CGI com suEXEC ou LSAPI), e o padrão correto é simples.
O padrão correto de permissões no cPanel
| Item | Permissão | Dono |
|---|---|---|
| Pastas dentro do site | 755 | usuario:usuario |
| Arquivos dentro do site | 644 | usuario:usuario |
Scripts CGI e Perl (.cgi, .pl) | 755 | usuario:usuario |
A própria pasta public_html | 750 | usuario:nobody |
Arquivos com senhas (ex.: wp-config.php) | 640 ou 600 (opcional, mais restrito) | usuario:usuario |
777. Com PHP rodando como o usuário da conta ele não é necessário, deixa qualquer processo do servidor escrever nos seus arquivos e muitos servidores recusam executar PHP em arquivo ou pasta gravável por todos, devolvendo erro 500. Entenda o motivo em permissões de pasta: por que não usar 777.Antes de começar
- Acesso SSH como
root. Se você é cliente de hospedagem compartilhada, sem root, corrija pelo Gerenciador de Arquivos do cPanel (botão Permissões) ou peça ao suporte. - O nome de usuário da conta cPanel (no exemplo,
usuario). - Um backup recente da conta. Comando em massa errado também se espalha em massa.
Como corrigir as permissões de uma conta cPanel pelo SSH
- Defina o usuário em uma variável para não errar a digitação nos comandos seguintes:
U=usuario - Corrija o dono dos arquivos do site.
A segunda linha devolve a pastachown -R $U:$U /home/$U/public_html chown $U:nobody /home/$U/public_htmlpublic_htmlao gruponobody, que é o que permite ao servidor web entrar nela. - Corrija as permissões de pastas e arquivos.
A última linha vem por último de propósito: o primeirofind /home/$U/public_html -type d -exec chmod 755 {} + find /home/$U/public_html -type f -exec chmod 644 {} + find /home/$U/public_html -type f \( -name '*.cgi' -o -name '*.pl' \) -exec chmod 755 {} + chmod 750 /home/$U/public_htmlfindtambém passa pela própriapublic_htmle a deixaria em755. - Repita para domínios com pasta fora do public_html. Domínios adicionais podem ter a raiz em outro lugar. Liste as raízes da conta:
Para cada pasta que não estiver dentro degrep ": $U==" /etc/userdatadomains | awk -F'==' '{print $5}' | sort -upublic_html, rode ochown -Re os doisfindtrocando o caminho (essas pastas ficam em755, donousuario:usuario). - Teste o site. Abra as páginas principais e tente enviar uma imagem pelo painel do CMS.
E o script fixperms?
O fixperms é um script de terceiros, publicado no GitHub, que aplica exatamente esse padrão (public_html 750 com grupo nobody, pastas 755, arquivos 644, CGI 755) para uma conta (-a usuario) ou para todas (-all). Ele não faz parte do cPanel. Se for usar, leia o código antes, rode primeiro em uma conta de teste e tenha backup, porque ele altera milhares de arquivos de uma vez.
Problemas comuns
Erro 500 logo depois de enviar arquivos
Arquivos ou pastas com 777 ou 775, ou arquivos que ficaram com dono root depois de um upload como root. Aplique os passos acima. Mais causas em erro 500: causas e como resolver.
Erro 403 Forbidden no site inteiro
A pasta public_html perdeu o grupo nobody ou ficou sem permissão de execução. Rode de novo o passo 2 e o chmod 750. Veja também erro 403 Forbidden.
O WordPress não consegue enviar imagens nem atualizar plugins
Arquivos com dono diferente do usuário da conta. Corrija o dono com o chown -R do passo 2.