Como funcionam as permissões no Linux?
Cada arquivo e diretório no Linux possui três conjuntos de permissões:
- Dono (u — user): o usuário proprietário do arquivo
- Grupo (g — group): o grupo associado ao arquivo
- Outros (o — others): todos os demais usuários do sistema
Cada conjunto pode ter três tipos de permissão: r (read/leitura), w (write/escrita) e x (execute/execução).
Lendo as permissões com ls -l
Ao executar ls -l, o resultado mostra as permissões na primeira coluna:
-rwxr-xr-- 1 joao devs 4096 mai 25 script.sh
-rw-r--r-- 1 joao devs 1234 mai 24 config.txt
drwxrwxr-x 2 joao devs 4096 mai 23 projeto/
Interpretando -rwxr-xr--:
- — tipo: arquivo (d seria diretório)
rwx — dono pode ler, escrever e executar
r-x — grupo pode ler e executar (não escrever)
r-- — outros só podem ler
Alterando permissões com chmod
Notação octal
Cada permissão tem um valor numérico: r=4, w=2, x=1. Some para cada grupo:
7 = rwx (4+2+1)
6 = rw- (4+2)
5 = r-x (4+1)
4 = r-- (4)
0 = --- (sem permissão)
# chmod [dono][grupo][outros]
chmod 755 script.sh # rwxr-xr-x (web server padrão)
chmod 644 config.txt # rw-r--r-- (arquivo de config)
chmod 600 .ssh/id_rsa # rw------- (chave privada SSH)
chmod 777 pasta/ # ⚠️ evite em produção — todos podem tudo
Notação simbólica
chmod +x script.sh # adiciona execução para todos
chmod g-w arquivo.txt # remove escrita do grupo
chmod o+r arquivo.txt # outros podem ler
chmod u=rwx,g=rx,o= arq # define explicitamente cada grupo
Alterando dono com chown
# Mudar dono
sudo chown joao arquivo.txt
# Mudar dono e grupo
sudo chown joao:devs pasta/
# Recursivo (toda a árvore)
sudo chown -R www-data:www-data /var/www/html
# Mudar apenas o grupo
sudo chgrp devs projeto/
Permissões recomendadas para servidores web
# Arquivos de configuração (somente dono lê/escreve)
chmod 600 .env
chmod 600 config.php
# Arquivos públicos do site
chmod 644 index.html
chmod 644 style.css
# Diretórios do site
chmod 755 /var/www/html/
chmod 755 /var/www/html/assets/
# Scripts executáveis
chmod 755 deploy.sh
# Logs (somente o serviço escreve)
chmod 640 /var/log/app.log
Tabela rápida: 7=rwx | 6=rw- | 5=r-x | 4=r-- | 0=--- | Exemplo: chmod 750 = dono tudo, grupo lê/executa, outros nada.
Dica de segurança: Nunca use chmod 777 em produção. Qualquer usuário do sistema consegue modificar o arquivo. Para web servers, o padrão seguro é 755 para diretórios e 644 para arquivos.