Gerenciando permissões de arquivos no Linux sem dor de cabeça
Gerenciar permissões de arquivos no Linux é uma habilidade essencial para qualquer administrador de sistemas ou desenvolvedor que trabalhe com ambientes Unix-like. Quando bem compreendido, esse processo se torna intuitivo e livre de dores de cabeça. Neste artigo, exploraremos desde os fundamentos até técnicas avançadas, com exemplos práticos que você pode aplicar imediatamente.
1. Fundamentos das permissões Linux
O modelo de permissões do Linux é baseado em três categorias: usuário (u), grupo (g) e outros (o). Cada arquivo ou diretório possui um proprietário e um grupo associado, e as permissões definem o que cada categoria pode fazer.
Os três bits fundamentais são:
- r (leitura) — permissão para ler o conteúdo do arquivo
- w (escrita) — permissão para modificar o arquivo
- x (execução) — permissão para executar o arquivo como um programa
Para visualizar as permissões, use o comando ls -l:
$ ls -l script.sh
-rwxr-xr-- 1 joao desenvolvedores 2048 mar 15 10:30 script.sh
Interpretando a saída:
- Primeiro caractere: tipo (- para arquivo, d para diretório)
- Próximos 9 caracteres: permissões (3 para usuário, 3 para grupo, 3 para outros)
- rwx (usuário): leitura, escrita e execução
- r-x (grupo): leitura e execução
- r-- (outros): apenas leitura
2. Modificando permissões com chmod
O comando chmod é a ferramenta principal para alterar permissões. Você pode usar notação simbólica ou notação octal.
Notação simbólica
$ chmod u+x script.sh # Adiciona execução para o usuário
$ chmod g-w script.sh # Remove escrita do grupo
$ chmod o=r script.sh # Define apenas leitura para outros
$ chmod u+rwx,g+rx,o+r script.sh # Combina várias permissões
Notação octal
A notação octal usa números de 0 a 7 para representar combinações de permissões:
- r=4, w=2, x=1
- Exemplo:
rwx= 4+2+1 = 7;r-x= 4+0+1 = 5;r--= 4+0+0 = 4
$ chmod 755 script.sh # rwxr-xr-x (usuário: tudo, grupo/outros: leitura e execução)
$ chmod 644 config.txt # rw-r--r-- (usuário: leitura/escrita, grupo/outros: leitura)
$ chmod 700 pasta_secreta # rwx------ (apenas o proprietário tem acesso)
Para diretórios, a permissão de execução (x) é necessária para acessar o conteúdo:
$ chmod 755 /home/joao/projeto # Permite que outros acessem o diretório
$ chmod 750 /home/joao/privado # Restringe acesso apenas ao grupo
3. Gerenciando proprietários com chown e chgrp
Alterando proprietário e grupo
$ chown maria:administradores relatorio.pdf # Altera proprietário e grupo
$ chown maria: relatorio.pdf # Altera apenas o proprietário
$ chown :administradores relatorio.pdf # Altera apenas o grupo
Usando chgrp para alterar apenas o grupo
$ chgrp desenvolvedores projeto/ # Altera grupo do diretório
$ chgrp -R desenvolvedores projeto/ # Recursivo (cuidado!)
Cuidado com recursividade: Use -R apenas quando tiver certeza do que está fazendo. Uma alteração incorreta pode quebrar permissões em todo um diretório.
$ chown -R maria:maria /home/maria/backup # Seguro: apenas dentro do home
$ chown -R root:root /etc/nginx # Perigoso: pode afetar serviços
4. Permissões especiais: SUID, SGID e sticky bit
SUID (setuid) — 4000
Permite que um arquivo seja executado com os privilégios do proprietário:
$ chmod u+s /usr/bin/programa
$ chmod 4755 /usr/bin/programa # rwsr-xr-x
Exemplo real: o comando passwd possui SUID para permitir que usuários alterem suas próprias senhas.
SGID (setgid) — 2000
Em diretórios, faz com que novos arquivos herdem o grupo do diretório:
$ chmod g+s /projetos/compartilhado
$ chmod 2755 /projetos/compartilhado # rwxr-sr-x
Sticky bit — 1000
Protege arquivos em diretórios compartilhados: apenas o proprietário pode deletar seus próprios arquivos:
$ chmod +t /tmp
$ chmod 1777 /tmp # rwxrwxrwt
5. Umask: definindo permissões padrão para novos arquivos
O umask define quais permissões serão removidas automaticamente ao criar novos arquivos. O valor padrão é 022, que resulta em:
- Arquivos: 666 - 022 = 644 (rw-r--r--)
- Diretórios: 777 - 022 = 755 (rwxr-xr-x)
$ umask 022 # Permissões padrão seguras
$ umask 077 # Restritivo: apenas o proprietário tem acesso
$ umask 002 # Permissivo: grupo pode escrever (útil para times)
Para configurar globalmente, edite /etc/profile ou ~/.bashrc:
# Adicione ao ~/.bashrc
umask 027
6. ACLs: permissões avançadas sem complexidade
As ACLs (Access Control Lists) permitem definir permissões específicas para múltiplos usuários e grupos além do modelo tradicional.
Visualizando ACLs
$ getfacl relatorio.txt
# file: relatorio.txt
# owner: joao
# group: desenvolvedores
user::rw-
user:maria:rw-
group::r--
mask::rw-
other::r--
Configurando ACLs
$ setfacl -m u:maria:rw relatorio.txt # Maria tem leitura/escrita
$ setfacl -m g:estagiarios:rx projeto/ # Grupo estagiarios tem leitura/execução
$ setfacl -x u:maria relatorio.txt # Remove ACL de Maria
Herança com ACLs padrão
Para que novos arquivos herdem permissões:
$ setfacl -d -m u:maria:rw pasta_compartilhada/
$ setfacl -d -m g:equipe:rx pasta_compartilhada/
7. Troubleshooting comum e boas práticas
Depurando permissões
$ namei -l /var/www/html/index.html # Mostra permissões de toda a hierarquia
$ stat index.html # Informações detalhadas do arquivo
$ find /home -perm 777 -type f # Encontra arquivos com permissões abertas
Erros frequentes
"Permission denied" em scripts: Verifique se o script tem permissão de execução (chmod +x script.sh). Para diretórios, certifique-se de que o caminho completo é acessível.
Problemas com diretórios web: Arquivos em /var/www/html geralmente precisam de permissão 644 e diretórios 755, com proprietário www-data ou similar.
Checklist de segurança
- Princípio do menor privilégio: Conceda apenas as permissões necessárias
- Auditoria regular: Use
find / -perm -o+w -type f 2>/dev/nullpara encontrar arquivos com escrita global - Evite 777: Raramente é necessário; prefira ACLs ou grupos
- Proteja arquivos sensíveis:
chmod 600para chaves SSH,chmod 700para diretórios de configuração - Documente permissões especiais: SUID/SGID podem ser riscos de segurança
# Exemplo de auditoria
$ find /usr -perm -4000 -type f 2>/dev/null # Lista todos os SUID
$ find /etc -type f -exec ls -la {} \; # Verifica permissões de config
Dominar permissões no Linux é um processo contínuo, mas com esses conceitos e exemplos práticos, você estará preparado para gerenciar qualquer cenário sem dor de cabeça. Lembre-se: permissões bem configuradas são a base de um sistema seguro e funcional.
Referências
- Linux man page: chmod — Documentação oficial do comando chmod com exemplos detalhados de notação simbólica e octal
- Linux man page: chown — Referência completa para alteração de proprietários e grupos de arquivos
- Linux man page: acl — Documentação oficial sobre Access Control Lists no Linux
- Linux man page: umask — Explicação detalhada do comando umask e seu funcionamento no sistema
- Linux man page: stat — Documentação do comando stat para inspeção detalhada de permissões e metadados
- Linux man page: namei — Guia oficial para depuração de caminhos e permissões com namei
- Linux man page: find — Documentação completa do comando find para auditoria de permissões
- Linux man page: setfacl — Referência oficial para configuração de ACLs com setfacl