Pular para o conteúdo
0xrcosRyan Camargo — home
Todos os posts
linux~6min de leituraRyan Camargo

Permissões de Arquivo no Linux, Sem Mágica

Um passeio fundamentado por rwx, notação octal, chmod, chown, umask e os bits especiais — explicado como eu gostaria que tivessem me explicado.

Ler em:ENES

Nota: Este é um conteúdo de exemplo criado para demonstrar o blog. Substitua pelo seu próprio texto.

Permissões de arquivo é um daqueles tópicos de Linux que é apresentado uma vez, mal, e nunca mais revisado. Você aprende chmod 755, copia e cola isso para sempre e, em algum momento, percebe que não faz ideia do que o 4 em chmod 4755 faz. Este post é a explicação que eu gostaria de ter tido no meu primeiro ano.

A Saída do ls -l, Decodificada

Comece pela fonte da verdade. ls -l imprime os metadados que o sistema de arquivos guarda para cada entrada:

$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 59944 Feb  7  2025 /usr/bin/passwd

Lendo da esquerda para a direita:

  • - — tipo do arquivo (- arquivo comum, d diretório, l link simbólico, c/b dispositivo de caractere/bloco, p pipe, s socket).
  • rws — permissões do dono (o s aqui é um bit especial, voltamos a ele adiante).
  • r-x — permissões do grupo.
  • r-x — permissões dos outros (todo o restante).
  • 1 — contador de hard links.
  • root root — dono e grupo.
  • 59944 — tamanho em bytes.
  • Data e nome.

Os nove caracteres de permissão se dividem em três tripletos: dono / grupo / outros. Dentro de cada tripleto, as posições são fixas: r (leitura), w (escrita), x (execução). Um traço significa "não definido".

Simbólico vs. Octal

Há duas formas de falar sobre permissões: simbólica (rwxr-xr-x) e octal (755). Elas descrevem a mesma coisa; octal é só mais compacta.

Cada tripleto mapeia de forma limpa para três bits:

Simbólico Binário Octal Significado
--- 000 0 sem acesso
--x 001 1 só execução
-w- 010 2 só escrita
-wx 011 3 escrita + execução
r-- 100 4 só leitura
r-x 101 5 leitura + execução
rw- 110 6 leitura + escrita
rwx 111 7 leitura + escrita + execução

Assim, 755 é rwxr-xr-x: o dono pode tudo, grupo e outros podem ler e executar, mas não escrever. 644 é rw-r--r--, o padrão para a maioria dos arquivos comuns. 600 é rw-------, comum para chaves privadas.

chmod: Modo Simbólico e Absoluto

chmod aceita qualquer uma das formas. O modo simbólico é mais amigável quando você quer mudar só um bit:

# Adiciona permissão de execução para o dono.
chmod u+x script.sh

# Remove escrita para "outros".
chmod o-w notas.txt

# Define leitura e escrita para dono e grupo, nada para outros.
chmod ug=rw,o= compartilhado.log

O modo octal define os três tripletos de uma vez — o que você não mencionar é limpo:

# Restringe uma chave privada.
chmod 600 ~/.ssh/id_ed25519

# Um diretório que o time pode ler e percorrer, mas não escrever.
chmod 755 /srv/public

Um erro comum: em um diretório, r permite listar as entradas; x permite percorrer o diretório e acessar uma entrada nomeada. Remover x de um diretório costuma quebrar mais coisas do que se espera.

chown e chgrp

chown muda o dono (e, opcionalmente, o grupo). chgrp muda só o grupo; na prática usa-se chown para os dois porque ele aceita a forma dono:grupo.

# Muda só o dono.
sudo chown ryan app.log

# Muda dono e grupo.
sudo chown ryan:devs app.log

# Recursivo, com mudança explícita de grupo.
sudo chown -R ryan:devs /srv/app

Use -R com cuidado. chown recursivo numa árvore que contém links simbólicos pode produzir resultados surpreendentes; adicione -h para atuar sobre os próprios links em vez de seus destinos.

umask e as Permissões Padrão

Quando um arquivo novo é criado, o kernel aplica um modo padrão e, em seguida, o umask do shell remove bits dele. O modo padrão de criação costuma ser 0666 para arquivos e 0777 para diretórios.

$ umask
022

Um umask 022 significa: não remover nada do dono; remover escrita do grupo; remover escrita dos outros. Então:

  • Arquivo novo: 0666 & ~022 = 0644 → rw-r--r--
  • Diretório novo: 0777 & ~022 = 0755 → rwxr-xr-x

Para tornar novos arquivos graváveis pelo grupo por padrão, defina umask 002 (comum em servidores compartilhados, onde várias pessoas escrevem na mesma árvore).

Os Bits Especiais: setuid, setgid e Sticky

Três bits adicionais ficam à frente dos nove que você já conhece. São fáceis de perder porque aparecem nas posições de execução do dono, do grupo e dos outros, substituindo o x por s ou t.

setuid (4xxx)

Quando definido em um executável, o processo roda com o UID efetivo do dono do arquivo, em vez do usuário que o invocou. O exemplo canônico é o passwd:

$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 59944 Feb  7  2025 /usr/bin/passwd

Aquele s no tripleto do dono é o setuid. É como um usuário comum consegue editar o /etc/shadow (que só o root pode ler) sem ser root. setuid é poderoso e perigoso — todo binário setuid-root privilegiado é uma escalação de privilégio esperando para acontecer se tiver um bug. Audite-os:

$ find /usr -perm -4000 -type f -exec ls -l {} \;

setgid (2xxx)

Em um executável, setgid faz o mesmo, mas para o grupo. Em um diretório, setgid tem um significado diferente e muito útil: qualquer arquivo criado dentro daquele diretório herda o grupo do diretório, em vez do grupo do usuário criador. É o mecanismo padrão para diretórios de projeto compartilhados.

sudo mkdir /srv/team
sudo chgrp devs /srv/team
sudo chmod 2775 /srv/team   # setgid em um diretório

Bit Sticky (1xxx)

O bit sticky em um diretório diz que só o dono de um arquivo (ou o dono do diretório, ou o root) pode renomear ou apagar aquele arquivo. /tmp é o exemplo clássico:

$ ls -ld /tmp
drwxrwxrwt 25 root root 4096 Mar 22 09:12 /tmp

Aquele t ao final é o bit sticky. Sem ele, qualquer usuário poderia apagar arquivos de qualquer outro em /tmp — o que seria uma bagunça.

Definindo os Bits Especiais

Combine-os com o restante do modo octal. O primeiro dígito é o byte dos bits especiais:

# setuid + rwxr-xr-x → 4755
sudo chmod 4755 /opt/app/bin/privileged-helper

# setgid em um diretório, com rwxrwsr-x → 2775
sudo chmod 2775 /srv/team

# Bit sticky em /tmp (já definido por padrão) → 1777
sudo chmod 1777 /tmp

O modo simbólico é discutivelmente mais claro:

chmod u+s helper        # setuid
chmod g+s /srv/team     # setgid
chmod +t /tmp           # sticky

Um Modelo Mental Rápido

  • rwx são três bits por tripleto, três tripletos por arquivo.
  • Octal empacota cada tripleto em um dígito; o quarto dígito à esquerda (se presente) carrega os bits especiais.
  • Em diretórios, r permite listar, x permite percorrer, w permite criar/apagar/renomear.
  • Os bits especiais (setuid, setgid, sticky) modificam como o arquivo é executado ou como arquivos são criados dentro de um diretório.

Onde Ler Mais

A referência canônica é man 2 chmod e man 1 chmod. A página de manual do chmod no Linux é incomumente completa, e a seção File permissions da documentação do kernel explica os casos de borda (capacidades, ACLs, o que acontece em cadeias de symlinks) que este post deliberadamente omite. Se você trabalha com ACLs (getfacl / setfacl), o modelo se estende de forma limpa — mas isso é assunto para outro post.

Nesta página