Entender Permissões de Ficheiros Unix com Calculadora Chmod
As permissões de ficheiros Unix controlam quem pode ler, escrever e executar ficheiros e diretórios. Cada ficheiro e diretório num sistema Linux ou Unix tem um conjunto de bits de permissão que determinam o acesso para três categorias: o proprietário do ficheiro, o grupo e todos os outros. Compreender estas permissões é essencial para administração de sistemas, desenvolvimento web, DevOps e qualquer trabalho em servidores Linux.
Os Três Triplos de Permissão
As permissões estão organizadas em três grupos de três bits cada:
Proprietário Grupo Outros
rwx rwx rwx
Cada triplo contém três permissões:
- r — Leitura (4)
- w — Escrita (2)
- x — Execução (1)
Os valores entre parênteses são os pesos octais. Para calcular o modo octal, some os pesos das permissões ativadas para cada triplo.
rwx = 4 + 2 + 1 = 7
rw- = 4 + 2 + 0 = 6
r-x = 4 + 0 + 1 = 5
r-- = 4 + 0 + 0 = 4
-wx = 0 + 2 + 1 = 3
-w- = 0 + 2 + 0 = 2
--x = 0 + 0 + 1 = 1
--- = 0 + 0 + 0 = 0
Modos Chmod Comuns
| Octal | Simbólico | Proprietário | Grupo | Outros | Uso Comum |
|---|---|---|---|---|---|
| 777 | rwxrwxrwx | rwx | rwx | rwx | Acesso total (inseguro, evitar) |
| 755 | rwxr-xr-x | rwx | r-x | r-x | Diretórios, scripts executáveis |
| 750 | rwxr-x--- | rwx | r-x | --- | Diretórios de equipa |
| 700 | rwx------ | rwx | --- | --- | Executáveis privados |
| 644 | rw-r--r-- | rw- | r-- | r-- | Ficheiros normais, assets web |
| 640 | rw-r----- | rw- | r--- | --- | Ficheiros legíveis pela equipa |
| 600 | rw------- | rw- | --- | --- | Ficheiros privados (chaves SSH) |
| 400 | r-------- | r-- | --- | --- | Configuração só de leitura |
Permissões de Ficheiro vs Diretório
O bit de execução comporta-se de forma diferente para ficheiros e diretórios.
| Permissão | Num Ficheiro | Num Diretório |
|---|---|---|
| r | Ler conteúdo do ficheiro | Listar conteúdo do diretório (ls) |
| w | Modificar conteúdo do ficheiro | Criar, renomear, apagar ficheiros dentro |
| x | Executar ficheiro como programa | Entrar no diretório (cd), aceder a ficheiros dentro |
Esta distinção é crítica. Um diretório precisa de r e x para ser legível — r sozinho permite ver os nomes dos ficheiros, mas sem x não pode aceder a nenhum ficheiro dentro dele.
# Diretório com r mas sem x — pode listar mas não pode aceder
$ ls -la /exemplo
# (mostra nomes de ficheiros mas não pode fazer cd nem ler ficheiros)
# Diretório com r-x — acesso total de leitura
$ ls -la /exemplo
$ cat /exemplo/ficheiro.txt
Referência do Comando Chmod
Notação Octal
chmod 755 script.sh # rwxr-xr-x
chmod 644 index.html # rw-r--r--
chmod 600 id_rsa # rw------- (chave privada SSH)
chmod 700 ~/.ssh # rwx------ (diretório SSH)
chmod -R 755 public/ # Recursivo (aplicar a todos os ficheiros e subdiretórios)
Notação Simbólica
chmod u+x script.sh # Adicionar execução para proprietário
chmod g+w ficheiro.txt # Adicionar escrita para grupo
chmod o-r ficheiro.txt # Remover leitura para outros
chmod a+rx script.sh # Adicionar leitura+execução para todos (ugo)
chmod u=rwx,g=rx,o= # Definir permissões exatas: rwxr-x---
chmod -R u=rwX,go=rX public/ # Recursivo, X = executar apenas para diretórios
O X maiúsculo no modo simbólico é especial: adiciona permissão de execução apenas se o destino for um diretório ou já tiver permissão de execução para algum utilizador. Isto é extremamente útil para operações recursivas.
# Definir todos os diretórios para 755 e todos os ficheiros para 644 recursivamente
find /caminho -type f -exec chmod 644 {} \;
find /caminho -type d -exec chmod 755 {} \;
# Ou usar o atalho X
chmod -R u=rwX,go=rX /caminho
Bits de Permissão Especiais
Além dos bits rwx básicos, o Unix suporta três permissões especiais.
Setuid (SUID) — u+s (4000)
Quando definido num executável, o processo é executado com os privilégios do proprietário do ficheiro, não do utilizador que o iniciou. Isto permite que utilizadores comuns executem comandos que requerem permissões elevadas.
chmod u+s /usr/bin/passwd
# -rwsr-xr-x (o s substitui x no triplo do proprietário)
Setgid (SGID) — g+s (2000)
Num ficheiro, o processo é executado com o grupo do ficheiro. Num diretório, novos ficheiros criados dentro herdam o grupo do diretório em vez do grupo primário do criador.
chmod g+s /diretorio/partilhado
# drwxrwsr-x (o s substitui x no triplo do grupo)
Sticky Bit — +t (1000)
Usado principalmente em /tmp — apenas o proprietário do ficheiro (ou root) pode apagar ou renomear ficheiros dentro do diretório, mesmo que outros tenham permissão de escrita.
chmod +t /tmp
# drwxrwxrwt (o t substitui x no triplo de outros)
Umask: Permissões Padrão
Umask define quais bits de permissão são removidos quando um novo ficheiro ou diretório é criado. É o inverso das permissões padrão desejadas.
umask 022 # Padrão para a maioria dos sistemas
# Ficheiros: 666 - 022 = 644 (rw-r--r--)
# Diretórios: 777 - 022 = 755 (rwxr-xr-x)
umask 002 # Padrão para diretórios partilhados
# Ficheiros: 666 - 002 = 664 (rw-rw-r--)
# Diretórios: 777 - 002 = 775 (rwxrwxr-x)
umask 077 # Restritivo (privado)
# Ficheiros: 666 - 077 = 600 (rw-------)
# Diretórios: 777 - 077 = 700 (rwx------)
Melhores Práticas de Segurança
- Ficheiros de configuração com segredos: 600 (
chmod 600 .env) - Chaves privadas SSH: 600 (
chmod 600 ~/.ssh/id_rsa) - Diretório SSH: 700 (
chmod 700 ~/.ssh) - Diretórios web: 755 (
chmod 755 /var/www/html) - Ficheiros web: 644 (
chmod 644 /var/www/html/index.html) - Diretórios de upload: 755, não 777
- Scripts executáveis: 755 (
chmod 755 deploy.sh) - Nunca use 777 em produção — permite que qualquer utilizador modifique ficheiros
Armadilhas Comuns
Armadilha 1: Confundir permissões de diretório e ficheiro
# ❌ Errado — dar execução a todos os ficheiros recursivamente
chmod -R 755 /caminho
# ✅ Correto — separar permissões de ficheiro e diretório
find /caminho -type f -exec chmod 644 {} \;
find /caminho -type d -exec chmod 755 {} \;
Armadilha 2: Usar 777 para uploads web
# ❌ Errado — qualquer utilizador pode escrever
chmod 777 uploads/
# ✅ Correto — proprietário pode escrever, outros só leitura+execução
chmod 755 uploads/
# Tornar o utilizador do servidor web o proprietário
chown www-data:www-data uploads/
Armadilha 3: Ignorar permissões de grupo para projetos de equipa
# Definir o sticky group bit para que novos ficheiros herdem o grupo
chmod g+s /projeto/partilhado
chmod 775 /projeto/partilhado
Ferramenta Online
A ferramenta CHMOD Calculator no Help2Code fornece um alternador interativo de bits de permissão com saída octal e simbólica instantânea. Alterne leitura, escrita e execução para proprietário, grupo e outros, e veja o comando chmod resultante imediatamente. Predefinições rápidas para modos comuns como 755, 644, 600 e 700 facilitam encontrar o conjunto de permissões certo sem memorizar valores octais.
Conclusão
As permissões de ficheiros Unix são um sistema simples mas poderoso construído em três triplos de bits de leitura, escrita e execução. A notação octal torna as permissões compactas e programáveis, enquanto a notação simbólica fornece controlo refinado. Compreender permissões — incluindo umask, SUID, SGID e o sticky bit — é essencial para administração segura de servidores. Use a ferramenta CHMOD Calculator para experimentar combinações de permissões interativamente.