chmod¶
Definition¶
chmod (change mode) é o comando usado para alterar os bits de permissão de arquivos e diretórios no Linux/Unix. Ele controla quem pode ler (r), escrever (w) e executar/atravessar (x) um inode: dono (u), grupo (g) e outros (o).
Em baixo nível, chmod grava um novo valor no campo st_mode do inode (metadado do filesystem), mudando os bits de permissão e, opcionalmente, bits especiais como setuid, setgid e sticky bit.
Why it exists¶
Sem um mecanismo simples para alterar permissões:
- qualquer usuário poderia modificar arquivos sensíveis;
- scripts e binários não teriam controle de execução;
- diretórios compartilhados ficariam inseguros;
- operações administrativas exigiriam mudanças complexas no sistema de arquivos.
chmod existe para oferecer um controle rápido, previsível e auditável de acesso em sistemas multiusuário.
How it works¶
1) Modelo de permissões em bits¶
Cada arquivo/diretório possui 9 bits principais de permissão, em 3 trincas:
u(user/owner)g(group)o(others)
Cada trinca tem 3 bits:
r= 4 (100em binário)w= 2 (010em binário)x= 1 (001em binário)
A soma forma o modo octal por classe:
7=4+2+1=rwx6=4+2=rw-5=4+1=r-x4=r--0=---
Exemplo chmod 754 arquivo.txt:
- dono:
7(rwx) - grupo:
5(r-x) - outros:
4(r--)
Representação binária das 3 classes:
7->1115->1014->100- resultado concatenado:
111101100
2) Notação simbólica vs octal¶
Você pode alterar permissões de duas formas.
Notação simbólica:
chmod u+x script.sh # adiciona execução ao dono
chmod g-w arquivo.txt # remove escrita do grupo
chmod o=r arquivo.txt # define outros apenas como leitura
chmod a+r docs.md # adiciona leitura para todos
Notação octal:
chmod 644 arquivo.txt
chmod 755 script.sh
chmod 640 .env
Regra prática:
- simbólica: boa para ajustes incrementais;
- octal: boa para definir estado exato e reproduzível.
3) Bits especiais¶
Além dos 9 bits padrão, há 3 bits especiais (primeiro dígito octal).
setuid(4xxx): executável roda com UID do dono do arquivo.setgid(2xxx):- em executável, roda com GID do grupo;
- em diretório, novos arquivos herdam o grupo do diretório.
sticky bit(1xxx): em diretório compartilhado, só dono do arquivo (ou root) pode apagar/renomear.
Exemplos:
chmod 4755 binario
chmod 2775 /projeto-compartilhado
chmod 1777 /tmp
4) Arquivo vs diretório (diferença crítica)¶
Em arquivo:
r: ler conteúdo;w: modificar conteúdo;x: executar.
Em diretório:
r: listar nomes dos arquivos;w: criar/remover/renomear entradas;x: atravessar diretório (entrar comcde acessar itens por nome).
Sem x em diretório, mesmo com r, você tende a não conseguir acessar os arquivos internos por caminho normal.
5) Relação com umask¶
chmod altera permissões após criação. Já umask define permissões iniciais padrão no momento da criação.
Fluxo comum:
- processo cria arquivo/diretório com base default;
umaskremove bits;- se necessário,
chmodajusta para o valor final esperado.
When to use¶
Use chmod quando precisar:
- permitir execução de script (
chmod +x); - restringir arquivo sensível (
chmod 600em chaves privadas); - padronizar permissões de aplicação/deploy;
- corrigir permissões quebradas após cópia/restore;
- preparar diretórios colaborativos com
setgid.
Critérios práticos:
- prefira menor privilégio possível;
- evite
777em quase todos os cenários; - para segredo (
.env, chaves):600ou640; - para script executável:
750ou755, conforme necessidade de leitura/execução para outros usuários.
Examples¶
Exemplo 1: tornar script executável sem abrir escrita indevida¶
ls -l backup.sh
# -rw-r--r-- 1 dev dev 1200 mar 24 10:00 backup.sh
chmod u+x backup.sh
ls -l backup.sh
# -rwxr--r-- 1 dev dev 1200 mar 24 10:01 backup.sh
Uso real: script operacional local que só o dono deve editar.
Exemplo 2: proteger chave privada SSH¶
chmod 600 ~/.ssh/id_ed25519
ls -l ~/.ssh/id_ed25519
# -rw------- 1 dev dev ... id_ed25519
Uso real: evita erro de segurança do OpenSSH por permissões muito abertas.
Exemplo 3: diretório compartilhado de time com herança de grupo¶
sudo chgrp -R devops /srv/devops
sudo chmod 2775 /srv/devops
Uso real: todos no grupo devops colaboram e arquivos novos permanecem no mesmo grupo automaticamente.
Exemplo 4: liberar leitura para todos, mantendo escrita restrita¶
chmod 644 relatorio.txt
# dono: rw-, grupo: r--, outros: r--
Uso real: arquivos de configuração e documentação lidos por vários usuários, mas alterados apenas pelo dono.
Exemplo 5: ajuste recursivo com cuidado¶
# diretórios: 755
find app -type d -exec chmod 755 {} \;
# arquivos: 644
find app -type f -exec chmod 644 {} \;
Uso real: correção em massa após extração de artefato com permissões inconsistentes.
Visual Representation¶
flowchart TD
A[Permissão octal 754] --> B[u=7 -> rwx]
A --> C[g=5 -> r-x]
A --> D[o=4 -> r--]
B --> E[4+2+1]
C --> F[4+0+1]
D --> G[4+0+0]
E --> H[Bits: 111]
F --> I[Bits: 101]
G --> J[Bits: 100]
H --> K[Modo final: 111101100]
I --> K
J --> K