Permissões Linux a fundo: Chmod octal, a matemática da umask e o perigo real de SUID/SGID
Se você administra servidores Linux ou sobe aplicações em containers, com certeza já esbarrou no clássico problema de permissão negada (Permission denied) ou viu alguém cometer o erro clássico de rodar chmod -R 777 para "fazer funcionar logo".
Neste guia prático, vamos dissecar como o modelo de permissões POSIX funciona na prática, como resolver permissões de servidores web do jeito certo e o funcionamento dos bits especiais que caem direto em certificações (LPIC-1, RHCSA) e testes de segurança.
1. A Estrutura Básica: Os 3 Grupos e a Tabela Octal
Cada arquivo ou diretório no Linux possui 3 níveis de acesso:
- User (u): O usuário proprietário do arquivo.
- Group (g): O grupo ao qual o arquivo pertence.
- Others (o): Qualquer outro usuário autenticado no sistema.
E cada nível combina três operações fundamentais representadas por valores binários somados:
| Permissão | Letra | Valor Binário | Valor Octal | Significado em Arquivos | Significado em Diretórios |
|---|---|---|---|---|---|
| Read | r | 4 (100) | 4 | Pode ler o conteúdo | Pode listar os arquivos (ls) |
| Write | w | 2 (010) | 2 | Pode modificar/salvar | Pode criar/apagar arquivos na pasta |
| Execute | x | 1 (001) | 1 | Pode executar como binário/script | Pode entrar na pasta (cd) |
A soma define o número de cada grupo:
7(4+2+1) =rwx(Leitura, Escrita e Execução)6(4+2+0) =rw-(Leitura e Escrita)5(4+0+1) =r-x(Leitura e Execução)4(4+0+0) =r--(Apenas Leitura)0(0+0+0) =---(Nenhum acesso)
2. A Regra de Ouro para Servidores Web (Nginx / Apache / WordPress)
O maior erro de iniciantes é dar chmod -R 777 ou chmod -R 755.
- Se você der
755em arquivos, eles ganham bit de execução sem necessidade (risco de execução de scripts maliciosos injetados). - Se você der
644em pastas, ninguém consegue entrar nelas (cd), quebrando o servidor web na hora (erro HTTP 403 Forbidden).
O padrão da indústria separa pastas (755) de arquivos (644). O comando correto e eficiente usando find (com + para executar em lote sem sobrecarregar o processador) é:
# Define o proprietário do servidor web (ex: www-data ou nginx)
sudo chown -R www-data:www-data /var/www/meu-app
# Pastas recebem 755 (rwxr-xr-x) -> Pode entrar e listar
sudo find /var/www/meu-app -type d -exec chmod 755 {} +
# Arquivos recebem 644 (rw-r--r--) -> Pode ler, mas não executar
sudo find /var/www/meu-app -type f -exec chmod 644 {} +
# Arquivos sensíveis de configuração (ex: .env, wp-config.php)
# Devem ser ainda mais restritivos: apenas o dono lê (600 ou 640)
chmod 600 /var/www/meu-app/.env
3. Permissões Especiais: O 4º Dígito Octal
Além das permissões convencionais, existem 3 bits especiais que antecedem o octal tradicional (ex: 4755, 2775, 1777):
🔸 SUID — Set User ID (4000 / u+s)
Faz o executável rodar temporariamente com os privilégios do proprietário do arquivo, e não de quem o chamou.
- Exemplo clássico:
/usr/bin/passwd. Um usuário comum precisa alterar sua senha no/etc/shadow(que pertence aoroot). O bináriopasswdtem bit SUID ativo (-rwsr-xr-x), permitindo que a escrita ocorra sob a identidade do root durante a execução. - Como aplicar:
chmod u+s /caminho/binarioouchmod 4755 /caminho/binario.
⚠️ Auditoria de Segurança: Para encontrar binários com SUID no seu servidor (porta de entrada para Privilege Escalation se mal configurados):
find / -perm -4000 -type f -exec ls -la {} + 2>/dev/null
🔸 SGID — Set Group ID (2000 / g+s)
- Em executáveis: Roda com privilégios do grupo do arquivo.
- Em diretórios (Muito útil em times): Qualquer novo arquivo ou pasta criado dentro desse diretório herdará automaticamente o grupo da pasta-mãe, em vez do grupo primário do usuário que o criou.
- Como aplicar:
# Pasta de deploy compartilhada entre o time 'devs'
sudo chown -R deploy:devs /var/shared-project
sudo chmod 2775 /var/shared-project
🔸 Sticky Bit (1000 / +t / o+t)
Em diretórios onde todos têm permissão de escrita (como /tmp), qualquer usuário poderia apagar arquivos de outros. O Sticky Bit impede isso: apenas o dono do arquivo ou o root pode apagar ou renomear o arquivo.
- Como aplicar:
chmod +t /tmpouchmod 1777 /tmp. - Representação visual no
ls -l:drwxrwxrwt.
4. Como a umask Realmente Funciona (A Matemática Binária)
Muita gente aprende que umask é "apenas subtrair da permissão máxima". Na maioria dos casos simples dá o mesmo resultado, mas matematicamente ela funciona através de um operador lógico bitwise NOT + AND:
- A base para Diretórios é
777(rwxrwxrwx). - A base para Arquivos é
666(rw-rw-rw-) — o Linux nunca dá permissão de execuçãoxpor padrão na criação de arquivos por motivos de segurança.
Se a sua umask for 022 (padrão em quase todas as distros):
- Para uma pasta nova:
777 - 022 = 755(rwxr-xr-x). - Para um arquivo novo:
666 - 022 = 644(rw-r--r--).
Se a sua umask for 027 (mais restritiva, muito usada em servidores de alta segurança):
- Pastas novas nascem com
750(Outros usuários não entram nem leem). - Arquivos novos nascem com
640(Outros usuários não leem).
Para ver a umask atual no seu terminal:
umask # Retorna octal, ex: 0022
umask -S # Retorna formato simbólico: u=rwx,g=rx,o=rx
Qual configuração de permissões vocês costumam padronizar nos ambientes de produção de vocês?
Artigo completo e simulador visual de permissões: tecmestre.com.br/calculadora-chmod/