Lendo permissões com ls -l

O comando ls -l exibe as permissões no formato -rwxr-xr--. Os 10 caracteres se dividem assim:

ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 68208 mar 14 10:30 /usr/bin/passwd

Posição 1: tipo (- arquivo, d diretório, l link). Posições 2-4: dono (user). Posições 5-7: grupo (group). Posições 8-10: outros (others). Cada trio pode conter r (leitura=4), w (escrita=2), x (execução=1).

chmod: modo octal

No modo octal, cada trio rwx vira um número de 0 a 7:

# rwxr-xr-- = 754
sudo chmod 754 script.sh

# rw-r--r-- = 644 (padrão para arquivos)
chmod 644 config.yaml

# rwxr-xr-x = 755 (padrão para diretórios e scripts)
chmod 755 deploy.sh

chmod: modo simbólico

O modo simbólico usa letras para especificar quem (u, g, o, a) e a operação (+, -, =):

# Adicionar execução para o dono
chmod u+x script.sh

# Remover escrita para grupo e outros
chmod go-w arquivo.txt

# Definir permissão exata para todos
chmod a=r somente-leitura.txt

chown e chgrp

# Mudar dono
sudo chown ana arquivo.txt

# Mudar dono e grupo de uma vez
sudo chown ana:devops arquivo.txt

# Mudar apenas o grupo
sudo chgrp devops arquivo.txt

# Recursivo em diretório
sudo chown -R ana:devops /opt/app/

Permissões especiais: SUID, SGID e Sticky Bit

Além do rwx, existem três bits especiais representados por um dígito extra antes do trio octal:

# SUID (4): executa com permissão do dono do arquivo
sudo chmod 4755 /usr/local/bin/backup
# Aparece como 's' no lugar do 'x' do dono: -rwsr-xr-x

# SGID (2): em arquivos, executa com o grupo do arquivo
#           em diretórios, novos arquivos herdam o grupo
sudo chmod 2775 /opt/projeto/
# Aparece como 's' no grupo: drwxrwsr-x

# Sticky bit (1): em diretórios, só o dono pode apagar seus arquivos
sudo chmod 1777 /tmp/compartilhado/
# Aparece como 't' nos outros: drwxrwxrwt
Dica: O /tmp usa sticky bit por padrão. Sem ele, qualquer usuário poderia apagar arquivos de outros no mesmo diretório. Sempre aplique sticky bit em diretórios compartilhados.

umask: permissão padrão

O umask define quais permissões são removidas ao criar novos arquivos e diretórios. O padrão é 0022.

umask
0022

Com umask 0022: arquivos são criados com 644 (666 - 022), diretórios com 755 (777 - 022).

# Definir umask mais restritivo
umask 0077

# Agora arquivos serão 600 e diretórios 700
touch teste.txt && ls -l teste.txt
-rw------- 1 joao joao 0 mar 27 10:00 teste.txt
Dica: Para tornar o umask permanente, adicione-o ao ~/.bashrc ou ~/.profile. Para o sistema inteiro, edite /etc/login.defs (variável UMASK).