REFERÊNCIA RÁPIDA DE CHMOD
Permissões de arquivo, modos numérico & simbólico, bits especiais, umask
Modo Numérico
Dígitos de Permissão Octal
| 4 | Leitura (r) |
| 2 | Escrita (w) |
| 1 | Execução (x) |
| 0 | Sem permissão |
Formato de Três Dígitos
chmod 755 file # rwxr-xr-x
chmod 644 file # rw-r--r--
chmod 700 file # rwx------
chmod 600 file # rw-------
Cálculo de Dígito
| 7 (4+2+1) | rwx — leitura, escrita, execução |
| 6 (4+2) | rw- — leitura, escrita |
| 5 (4+1) | r-x — leitura, execução |
| 4 | r-- — somente leitura |
| 3 (2+1) | -wx — escrita, execução |
| 2 | -w- — somente escrita |
| 1 | --x — somente execução |
| 0 | --- — sem permissões |
Modo Simbólico
Sintaxe: [ugoa][+-=][rwxXst]
| u | Usuário (dono) |
| g | Grupo |
| o | Outros |
| a | Todos (u + g + o) |
| + | Adicionar permissão |
| - | Remover permissão |
| = | Definir permissão exata |
Exemplos Simbólicos
chmod u+x file # owner: add execute
chmod g-w file # group: remove write
chmod o=r file # others: set read only
chmod a+r file # all: add read
chmod u+x,g-w,o= file # combined operations
Permissões Comuns
Predefinições de Permissão de Arquivo
| 644 rw-r--r-- | Arquivo padrão — dono rw, outros leitura |
| 755 rwxr-xr-x | Script / binário — dono rwx, outros rx |
| 600 rw------- | Arquivo privado — somente dono |
| 400 r-------- | Somente leitura privado (chaves SSH) |
| 666 rw-rw-rw- | Arquivo gravável por todos (evitar) |
| 777 rwxrwxrwx | Acesso total para todos (evitar) |
Referência Rápida
chmod 644 *.html # web files: owner rw, world r
chmod 755 *.sh # scripts: owner rwx, world rx
chmod 600 ~/.ssh/id_* # SSH keys: owner only
chmod 400 secret.pem # certificate: read-only
Permissões de Diretório
O que as Permissões Significam em Diretórios
| r (4) | Listar conteúdo do diretório (ls) |
| w (2) | Criar / deletar arquivos no diretório |
| x (1) | Acessar (entrar com cd) o diretório |
| rx (5) | Listar + acessar (típico para leitura) |
| rwx (7) | Controle total |
Permissões Comuns de Diretório
chmod 755 dir/ # standard: owner rwx, others rx
chmod 700 dir/ # private: owner only
chmod 750 dir/ # group access: owner rwx, group rx
chmod 1777 /tmp # sticky bit: only owner can delete
Bits Especiais
Setuid, Setgid, Sticky
| Setuid (4xxx) | Executar como dono do arquivo (ex.: passwd) |
| Setgid (2xxx) | Executar como grupo do arquivo / herdar grupo do dir |
| Sticky (1xxx) | Só dono pode deletar arquivos (ex.: /tmp) |
Definir Bits Especiais
chmod 4755 program # setuid: -rwsr-xr-x
chmod 2755 dir/ # setgid: drwxr-sr-x
chmod 1755 dir/ # sticky: drwxr-xr-t
chmod u+s program # symbolic setuid
chmod g+s dir/ # symbolic setgid
chmod +t dir/ # symbolic sticky bit
Recursivo
Alterações Recursivas de Permissão
chmod -R 755 dir/ # set all to 755 recursively
chmod -R u+rwX dir/ # owner rw, +x on dirs only
chmod -R go-w dir/ # remove group/other write
Arquivos vs Diretórios com find
# set directories to 755, files to 644
find /path -type d -exec chmod 755 {} +
find /path -type f -exec chmod 644 {} +
X maiúsculo — Execução Condicional
| x (minúsculo) | Adicionar execução a todos arquivos e dirs |
| X (maiúsculo) | Adicionar execução apenas a dirs e arquivos já executáveis |
umask
Como o umask Funciona
| umask | Exibir umask atual |
| umask 022 | Arquivos: 644, Dirs: 755 |
| umask 077 | Arquivos: 600, Dirs: 700 |
| umask 002 | Arquivos: 664, Dirs: 775 |
Cálculo de umask
# default permission minus umask = effective
# Files: 666 - 022 = 644 (rw-r--r--)
# Dirs: 777 - 022 = 755 (rwxr-xr-x)
umask # display current umask
umask 022 # typical default
umask -S # show in symbolic notation
Padrões Comuns
Casos de Uso do Dia a Dia
| Web root | chmod -R 755 /var/www/html |
| Arquivo de config | chmod 600 app.conf |
| Diretório SSH | chmod 700 ~/.ssh |
| SSH authorized_keys | chmod 600 ~/.ssh/authorized_keys |
| Diretório compartilhado | chmod 2775 /shared (setgid) |
| Arquivos de log | chmod 640 /var/log/app.log |
| Scripts cron | chmod 755 /etc/cron.daily/myjob |
| Diretório temporário | chmod 1777 /tmp (sticky) |
Visualizar Permissões
ls -l file.txt # show permissions
ls -ld dir/ # show directory permissions
stat -c '%A %a %n' * # symbolic + numeric + name
getfacl file.txt # show ACLs (if in use)