Dominando as Permissões de Arquivos do Linux com o Comando 'chmod'
Aprenda chmod com modos simbólicos e numéricos, padrões seguros, alterações recursivas e bits de permissão especiais.
Dominando as Permissões de Arquivos no Linux com o Comando 'chmod'
As permissões de arquivos no Linux determinam quem pode ler, alterar ou executar um arquivo. Quando um script não executa, um servidor web não consegue ler um arquivo ou uma chave privada é rejeitada por estar muito permissiva, o chmod geralmente faz parte da solução.
O comando chmod altera os bits de permissão. Você pode usar modos simbólicos legíveis como u+x ou modos numéricos compactos como 755.
Leitura de Strings de Permissão
Execute ls -l para ver o tipo e as permissões de um arquivo:
ls -l deploy.sh
Exemplo de saída:
-rwxr-xr-- 1 app deploy 1200 May 23 10:00 deploy.sh
O primeiro caractere é o tipo de arquivo. Um arquivo regular começa com -, um diretório começa com d e um link simbólico começa com l.
Os próximos nove caracteres são três grupos de permissão:
- Usuário: o proprietário do arquivo.
- Grupo: membros do grupo do arquivo.
- Outros: todos os demais.
Cada grupo pode ter:
r: ler o conteúdo do arquivo ou listar nomes de diretórios.w: modificar um arquivo ou criar/excluir/renomear entradas em um diretório.x: executar um arquivo ou percorrer um diretório.
A permissão de execução em diretórios é importante. Sem x em um diretório, você não pode entrar nele nem acessar arquivos dentro dele pelo nome, mesmo que consiga listar alguns metadados em outro lugar.
Use Modos Simbólicos para Pequenas Alterações
A sintaxe simbólica tem esta aparência:
chmod [quem][operador][permissões] caminho
quem pode ser u para usuário, g para grupo, o para outros ou a para todos. Os operadores são + para adicionar, - para remover e = para definir exatamente.
Tornar um script executável para o proprietário:
chmod u+x deploy.sh
Permitir que o grupo edite um arquivo compartilhado:
chmod g+w shared_document.txt
Remover permissão de escrita do grupo e de outros:
chmod go-w config.yml
Definir outros como somente leitura, substituindo quaisquer permissões existentes para outros:
chmod o=r project_plan.txt
Modos simbólicos são úteis porque alteram apenas os bits que você nomeia.
Use Modos Numéricos para Conjuntos Completos de Permissões
Modos numéricos definem as permissões de usuário, grupo e outros em um único comando. Cada permissão tem um valor:
- Leitura:
4 - Escrita:
2 - Execução:
1
Some os valores para cada grupo:
| Modo | Significado |
|---|---|
7 |
rwx |
6 |
rw- |
5 |
r-x |
4 |
r-- |
0 |
--- |
Definir um arquivo de texto normal como leitura/escrita para o proprietário e somente leitura para todos os outros:
chmod 644 important_file.txt
Definir um diretório normal para que o proprietário possa gerenciá-lo e outros possam entrar e lê-lo:
chmod 755 public_assets
Proteger uma chave privada para que apenas o proprietário possa ler e escrever:
chmod 600 private_key.pem
Evite 777 a menos que esteja em um ambiente de teste temporário e entenda o risco:
chmod 777 scratch
777 permite que qualquer usuário local leia, escreva e execute ou percorra o caminho. Em sistemas compartilhados, isso raramente é aceitável.
Lide com Arquivos e Diretórios de Forma Diferente
Arquivos e diretórios geralmente precisam de modos diferentes. Arquivos costumam usar 644; diretórios costumam usar 755. Se você executar isso cegamente, tornará todos os arquivos executáveis:
chmod -R 755 web_root/
Para um diretório web, um padrão mais seguro é:
find web_root -type d -exec chmod 755 {} +
find web_root -type f -exec chmod 644 {} +
Em seguida, adicione permissão de execução apenas aos scripts que realmente precisam:
chmod 755 web_root/scripts/deploy.sh
Use Bits de Permissão Especiais com Cuidado
Modos numéricos podem incluir um quarto dígito à esquerda para bits especiais:
| Valor | Nome | Efeito comum |
|---|---|---|
4 |
SetUID | Um executável é executado com o ID de usuário efetivo do proprietário do arquivo. |
2 |
SetGID | Um executável é executado com o ID de grupo efetivo do grupo do arquivo; em diretórios, novas entradas herdam o grupo do diretório. |
1 |
Sticky bit | Em diretórios, os usuários podem excluir apenas arquivos que possuem, que o proprietário do diretório possui ou que o root pode excluir. |
Definir o bit SetGID em um diretório de projeto compartilhado para que novos arquivos herdem o grupo do diretório:
chmod 2770 shared_group_files
Definir o sticky bit em um diretório compartilhado gravável:
chmod 1777 /srv/shared-upload
O exemplo clássico é /tmp, que é gravável por todos, mas protegido pelo sticky bit.
Tenha cuidado com SetUID e SetGID em executáveis. Eles podem criar um sério risco de escalonamento de privilégios se o programa for gravável, mal projetado ou aceitar entrada insegura. Muitos sistemas Unix-like também ignoram SetUID em scripts por razões de segurança.
Verifique o Resultado
Após alterar as permissões, verifique-as:
ls -ld web_root web_root/index.html
Use stat quando quiser o modo numérico:
stat -c '%a %n' web_root/index.html
No macOS, o formato do stat é diferente:
stat -f '%Lp %N' web_root/index.html
Conclusão
Use chmod simbólico quando quiser adicionar ou remover uma permissão. Use chmod numérico quando quiser definir o modo completo exatamente. Trate alterações recursivas com cuidado, mantenha arquivos e diretórios separados e verifique com ls -l ou stat antes de prosseguir.