Skip to content

chmod 777

chmod 777 define rwxrwxrwx: o dono, o grupo e qualquer outra conta da máquina podem ler, alterar e executar o arquivo, ou listar, criar e apagar itens dentro do diretório.

Matriz de permissões

Quais bits de permissão cada classe tem
QuemLeitura (4)Escrita (2)Execução (1)Dígito
Dono (u)SimSimSim7
Grupo (g)SimSimSim7
Outros (o)SimSimSim7

Execução muda de sentido conforme o tipo. Num arquivo, deixa o kernel rodá-lo como programa. Num diretório, é a permissão de busca: entrar (cd) e alcançar os arquivos de dentro pelo nome. Leitura num diretório só lista os nomes.

O que cada classe pode fazer com um arquivo e com um diretório
QuemNum arquivoNum diretório
Dono (u)Ler, alterar e executarListar, entrar, criar, apagar e renomear itens
Grupo (g)Ler, alterar e executarListar, entrar, criar, apagar e renomear itens
Outros (o)Ler, alterar e executarListar, entrar, criar, apagar e renomear itens

Dados

Representações deste modo
Octal777 (0777)
Simbólicorwxrwxrwx
ls -l, arquivo-rwxrwxrwx
ls -l, diretóriodrwxrwxrwx
Comando simbólico equivalentechmod a=rwx
umask padrão que gera esse modoumask 000 para diretórios novos
Como o Git registra um arquivo assim100755 (executável)
Bits especiaisNenhum

Quando usar

  • Diretórios descartáveis numa máquina de um único usuário ou dentro de um contêiner temporário, onde não existe outra conta para abusar do acesso.
  • Por um minuto, para confirmar que um erro é mesmo de permissão. Depois volte para o modo mais restrito que funcione.

Quando não usar

  • Raiz de sites e pastas de upload. Qualquer processo do servidor, inclusive um script comprometido de outro site na mesma hospedagem, pode criar ou reescrever seus arquivos. O guia de segurança do WordPress diz que nenhum diretório deve ser 777, nem o de uploads.
  • Diretórios compartilhados sem o sticky bit: qualquer usuário apaga ou renomeia arquivos dos outros. Use 1777 (o modo do /tmp) ou um grupo compartilhado com 2775.
  • Qualquer coisa dentro de ~/.ssh. O ssh ignora chaves privadas acessíveis por outros, e o sshd com StrictModes (padrão) recusa o login se a home, o ~/.ssh ou o authorized_keys tiver escrita para outros.

Por que o 777 faz o erro sumir, e a correção de verdade

Quando uma aplicação web não consegue gravar numa pasta, o 777 parece resolver porque dá escrita para a classe outros, que inclui a conta do servidor web ou do PHP-FPM (www-data no Debian e Ubuntu, nginx ou apache no Fedora e RHEL). Só que dá a mesma escrita para todas as outras contas da máquina.

Dê o acesso só para essa conta: torne-a dona da pasta, ou coloque ela e o seu usuário de deploy num grupo comum e use 775 nos diretórios e 664 nos arquivos.

ps -o user= -C nginx,php-fpm,apache2,httpd | sort -u   # com qual usuário o servidor roda
sudo chown -R www-data:www-data /var/www/site/uploads
sudo chmod 755 /var/www/site/uploads

Comandos

Aplicar em um arquivo ou diretório
chmod 777 shared
chmod a=rwx shared   # mesmo resultado
Conferir o resultado
stat -c '%a %A %n' shared     # Linux (stat do GNU): 777 drwxrwxrwx
stat -f '%Lp %Sp %N' shared   # macOS e BSD

Aplicando numa árvore inteira

Não rode chmod -R 777. Isso deixa todo arquivo da árvore gravável e executável por qualquer conta. Se já aconteceu, restaure uma base sensata com os dois comandos find abaixo e devolva a execução só aos scripts que precisam.

Voltar uma árvore para a base 755 / 644
find . -type d -exec chmod 755 {} +
find . -type f -exec chmod 644 {} +

Git e o bit de execução

O Git guarda um único dado de permissão por arquivo: 100755 se o bit de execução do dono estiver ligado, 100644 caso contrário. Um arquivo com este modo entra no commit como 100755; os bits de grupo e outros nunca chegam ao repositório. No Windows, ou com core.fileMode false, ligue o bit com git update-index --chmod=+x.

Perguntas frequentes

chmod 777 é seguro?
Só onde nenhuma conta ou processo não confiável alcança o caminho. Num servidor com vários usuários ou num servidor web, qualquer conta pode alterar ou substituir os arquivos, então a invasão de qualquer outro serviço vira a invasão do seu.
O que o chmod 777 faz em um diretório?
Qualquer um pode listar, entrar e criar, apagar ou renomear qualquer arquivo dentro dele, inclusive de outros usuários, porque apagar depende da escrita no diretório, não no arquivo. Com o sticky bit (chmod 1777) só o dono de cada arquivo pode apagá-lo.
Como desfazer um chmod -R 777?
Corrija diretórios e arquivos separadamente: find . -type d -exec chmod 755 {} + e find . -type f -exec chmod 644 {} +. Depois devolva a execução só aos scripts que precisam, com chmod +x.
chmod 777 é igual a chmod a+rwx?
Os nove bits de permissão ficam iguais. A diferença é que o 777 numérico também zera setuid, setgid e sticky em arquivos comuns, enquanto o a+rwx mantém esses bits especiais como estavam.

Revisado em por Arielton Oberek.