Como dar permissão total a uma pasta no Linux: o que o chmod 777 faz, por que ele é perigoso e como liberar o acesso do jeito certo com chown, grupos e ACL.
Resposta rápida
O comando que dá permissão total a uma pasta, para todos os usuários, é:
sudo chmod 777 /caminho/da/pasta
Com -R ele vale também para tudo o que está dentro. Só que quase nunca é isso que você quer: o 777 libera a pasta para qualquer usuário e qualquer programa do sistema. Na maioria dos casos, o problema real é que a pasta pertence a outro usuário, e a solução é trocar o dono:
sudo chown -R $USER:$USER /caminho/da/pasta
Pronto: a pasta passa a ser sua, com acesso total para você e sem abrir para o resto do sistema.
Como ler as permissões
ls -ld /var/www/meusite
drwxr-xr-x 5 joao www-data 4096 out 6 10:00 /var/www/meusite
Depois do d (de diretório) vêm três grupos de três letras: o que o dono (joao) pode, o que o grupo (www-data) pode e o que os outros podem. Em pastas, r é listar, w é criar e apagar arquivos e x é entrar na pasta. Cada letra vale um número (r = 4, w = 2, x = 1), e a soma forma o código:
| Código | Letras | Uso típico |
|---|---|---|
755 | rwxr-xr-x | Pastas em geral e pastas de sites |
644 | rw-r--r-- | Arquivos em geral e arquivos de sites |
775 / 664 | rwxrwxr-x / rw-rw-r-- | Pasta e arquivos em que o grupo também escreve |
700 / 600 | rwx------ / rw------- | Privado: chaves, senhas, ~/.ssh |
777 | rwxrwxrwx | Todo mundo faz tudo (evite) |
Por que o chmod 777 é perigoso
- Qualquer processo pode gravar ali. Se um site da máquina for invadido, o invasor consegue plantar ou alterar arquivos em todas as pastas 777, inclusive de outros sites e usuários.
- Em servidor web, vira porta de entrada. Pasta pública com 777 é onde robôs tentam deixar scripts maliciosos. Em muitas hospedagens cPanel, arquivos PHP com permissão de escrita para todos são recusados e o site devolve erro 500.
- O
chmod -R 777em pastas do sistema quebra o Linux. Osudopara de funcionar (perde o bit especial de que depende) e o SSH recusa chaves de pastas.sshabertas demais.
O jeito certo, por situação
Uma pasta que você precisa editar
Troque o dono para o seu usuário com o chown mostrado acima. Se a pasta for de um serviço (por exemplo, do banco de dados), não mexa no dono: use sudo para editar o arquivo necessário.
Pasta de site no Apache ou no Nginx
O dono é o seu usuário e o grupo é o do servidor web (www-data no Ubuntu e no Debian; apache ou nginx no AlmaLinux e no Rocky). Pastas 755 e arquivos 644:
sudo chown -R joao:www-data /var/www/meusite
sudo find /var/www/meusite -type d -exec chmod 755 {} +
sudo find /var/www/meusite -type f -exec chmod 644 {} +
Só a pasta onde o site precisa gravar (uploads, cache) recebe escrita para o grupo:
sudo chmod -R g+w /var/www/meusite/uploads
Pasta compartilhada por vários usuários
Crie um grupo, coloque os usuários nele e dê a pasta ao grupo. O 2 no início do 2775 (setgid) faz os arquivos novos herdarem o grupo da pasta:
sudo groupadd equipe
sudo usermod -aG equipe joao
sudo usermod -aG equipe maria
sudo chgrp -R equipe /srv/compartilhado
sudo chmod 2775 /srv/compartilhado
Cada usuário precisa sair e entrar de novo para o grupo valer. Dependendo da configuração, os arquivos novos ainda podem nascer sem escrita para o grupo. Uma ACL padrão resolve isso:
sudo setfacl -R -m g:equipe:rwX /srv/compartilhado
sudo setfacl -R -d -m g:equipe:rwX /srv/compartilhado
O X maiúsculo dá permissão de entrada só às pastas, sem tornar arquivos comuns executáveis. Confira com getfacl /srv/compartilhado; no ls -l, um + no fim das permissões indica ACL. Se o comando não existir, instale o pacote acl.
Liberar uma pasta para um único usuário extra
sudo setfacl -m u:maria:rwx /srv/projeto
Pasta de troca onde todos gravam
Use 1777, como no /tmp: todos criam arquivos, mas cada um só apaga os próprios.
sudo chmod 1777 /srv/troca
Como desfazer um chmod 777
Encontre o que ficou aberto para todos e devolva o padrão (troque o caminho pelo seu):
sudo find /var/www/meusite -perm -0002 -not -type l
sudo find /var/www/meusite -type d -exec chmod 755 {} +
sudo find /var/www/meusite -type f -exec chmod 644 {} +
chmod -R 777 foi aplicado em /, /etc ou /usr, não há comando simples que restaure tudo. Faça backup dos dados e planeje reinstalar o sistema, ou fale com o suporte do seu servidor.Problemas comuns
chmod: changing permissions: Operation not permitted
Só o dono do arquivo ou o root podem mudar permissões. Use sudo.
Permission denied mesmo com o arquivo liberado
Falta permissão de entrada (x) em alguma pasta do caminho. O comando namei -l /caminho/completo/arquivo mostra as permissões de cada pasta até o arquivo.
O chmod não muda nada num pendrive ou HD externo
Discos em NTFS ou FAT não guardam permissões do Linux; elas são definidas na montagem. Remonte o disco com as opções uid e gid do seu usuário, ou copie os arquivos para uma partição Linux.
Site com erro 403 ou 500 depois de mexer nas permissões
Volte ao padrão 755 para pastas e 644 para arquivos. Veja também erro 403 Forbidden e erro 500.