Iniciante Fundamental Progresso 0%

Permissões no Linux

Sistema rwx, notação octal e bits especiais, controle de acesso que todo profissional precisa dominar.

01. Conceito

O sistema rwx: leitura, escrita, execução

Explicação

Cada arquivo e diretório no Linux tem três tipos de permissão:

  • r (read = 4) — leitura
  • w (write = 2) — escrita
  • x (execute = 1) — execução

O comportamento muda dependendo se é um arquivo ou diretório:

Para arquivos: r = pode ler o conteúdo; w = pode modificar ou truncar; x = pode executar como programa.

Para diretórios: r = pode listar os arquivos com ls; w = pode criar, renomear e deletar arquivos dentro; x = pode entrar com cd e acessar arquivos se souber o nome.

Atenção: sem x em um diretório, você não consegue entrar nele mesmo tendo r. E com x mas sem r, você pode entrar e acessar arquivos cujos nomes já conhece, mas não pode listar.

Exemplo Concreto
# Lendo permissões com ls -la
ls -la /etc/passwd
-rw-r--r-- 1 root root 2847 Mai 20 10:00 /etc/passwd

# Decompondo a string de permissões:
# - rw- r-- r--
# ↑ ↑   ↑   ↑
# | |   |   └── others: r-- (só leitura)
# | |   └─────── group:  r-- (só leitura)
# | └─────────── user:   rw- (leitura e escrita)
# └───────────── tipo: - (arquivo regular)
#                      d (diretório)
#                      l (symlink)
#                      c (char device)
#                      b (block device)

# O arquivo pertence ao usuário root, grupo root
# 1 = número de hard links
# 2847 = tamanho em bytes
💡 Analogia — Crachás de acesso corporativo

Permissões são como chaves e crachás em um prédio corporativo. O dono do arquivo é o funcionário que tem a chave do escritório — acesso total ao próprio espaço. O grupo é o departamento — membros têm acesso ao espaço compartilhado da equipe. Outros são visitantes externos — permissões mínimas, controladas.

O root é o segurança-geral: entra em qualquer lugar independentemente das chaves.

02. Identidade

Usuário, Grupo e Outros

Explicação

Cada arquivo tem exatamente três classes de permissões, aplicadas em ordem:

  • user (u) — o dono do arquivo (UID). Verificado primeiro.
  • group (g) — o grupo dono (GID). Verificado se o usuário não for o dono.
  • others (o) — todos os demais. Aplicado se não for dono nem membro do grupo.

O kernel verifica as classes em ordem e para na primeira que corresponder. Se você for o dono do arquivo, apenas as permissões de user se aplicam — mesmo que as permissões de grupo sejam mais permissivas.

O usuário root (UID=0) ignora quase todas as restrições de permissão — exceto o bit de execute em arquivos sem nenhum x.

Exemplo Concreto
# Ver dono e grupo de um arquivo
ls -la projeto/
# drwxrwxr-x 2 joao devs 4096 Mai 20 ... projeto/
#              ↑    ↑
#              |    └── grupo: devs
#              └──────── dono: joao

# Ver grupos do usuário atual
id
# uid=1000(joao) gid=1000(joao) groups=1000(joao),27(sudo),1001(devs)

# Ver grupos de outro usuário
groups maria

# Arquivos criados por joao com grupo devs
# Membros do grupo devs têm as permissões de "group"
# Usuários fora de devs e que não são joao têm "others"
Erros comuns

"Se meu grupo tem mais acesso, o kernel usa o grupo" — errado. Se você for o dono, o kernel aplica as permissões de user e ignora as de group. Um arquivo ---rwx--- (dono sem acesso, grupo com tudo) significa que o dono não consegue acessar seu próprio arquivo — o grupo pode, mas não o dono.

"Root precisa de x para executar" — root ignora bits r e w, mas para executar um arquivo, ao menos uma das classes precisa ter x definido.

03. Notação

Representação Octal

Explicação

As permissões rwx podem ser representadas como números octais, onde cada permissão tem um valor:

  • r = 4
  • w = 2
  • x = 1
  • nenhuma = 0

Você soma os valores para cada classe (user, group, others) e obtém três dígitos octais:

  • 7 = rwx (4+2+1) — tudo
  • 6 = rw- (4+2+0) — leitura e escrita
  • 5 = r-x (4+0+1) — leitura e execução
  • 4 = r-- (4+0+0) — só leitura
  • 0 = --- (0+0+0) — nada

Combinações mais comuns: 755 (rwxr-xr-x) para executáveis e diretórios públicos, 644 (rw-r--r--) para arquivos de texto, 700 (rwx------) para diretórios privados, 600 (rw-------) para arquivos privados (chaves SSH).

Exemplo Concreto
# Decodificando permissões octais:

# chmod 755 → rwxr-xr-x
# user:  7 = rwx (4+2+1)
# group: 5 = r-x (4+0+1)
# other: 5 = r-x (4+0+1)

# chmod 644 → rw-r--r--
# user:  6 = rw- (4+2+0)
# group: 4 = r-- (4+0+0)
# other: 4 = r-- (4+0+0)

# chmod 700 → rwx------
# user:  7 = rwx (4+2+1)
# group: 0 = --- (0+0+0)
# other: 0 = --- (0+0+0)

# chmod 600 → rw-------  ← chaves SSH privadas
# user:  6 = rw- (4+2+0)
# group: 0 = ---
# other: 0 = ---

# Verificar: stat mostra octal diretamente
stat -c "%a %n" arquivo.txt
# 644 arquivo.txt
04. Prática

chmod, chown e chgrp na prática

Explicação

chmod — muda as permissões de um arquivo ou diretório. Aceita notação octal ou simbólica.

Notação simbólica usa: classe (u=user, g=group, o=others, a=all), operador (+=adicionar, -=remover, ==definir exatamente) e permissões (r, w, x).

chown — muda o dono e/ou grupo de um arquivo. Requer root ou ser o dono. Use chown usuario:grupo arquivo ou apenas chown usuario arquivo. A flag -R aplica recursivamente.

chgrp — muda apenas o grupo. Equivalente a chown :grupo arquivo.

Exemplo Concreto
# chmod — notação octal
chmod 755 script.sh        # rwxr-xr-x
chmod 644 config.txt       # rw-r--r--
chmod 700 ~/.ssh           # rwx------
chmod 600 ~/.ssh/id_rsa    # rw------- (chave privada SSH)

# chmod — notação simbólica (não afeta outras permissões)
chmod u+x script.sh        # adiciona execute para o dono
chmod g-w arquivo.txt      # remove write do grupo
chmod o= arquivo.txt       # remove TODAS permissões de others
chmod a+r arquivo.txt      # adiciona read para todos (all)
chmod u+x,g+x script.sh    # múltiplas mudanças de uma vez

# chown — mudar dono
chown joao arquivo.txt            # muda só o dono
chown joao:devs arquivo.txt       # muda dono e grupo
chown :devs arquivo.txt           # muda só o grupo
chown -R www-data:www-data /var/www/html  # recursivo

# Ver permissões do /etc/passwd
ls -la /etc/passwd
-rw-r--r-- 1 root root 2847 Mai 20 10:00 /etc/passwd

# Ver permissões de um diretório web típico
ls -la /var/www/html/
# drwxr-xr-x 2 www-data www-data 4096 ... /var/www/html/
Erros comuns

chmod -R 777 /var/www — o erro clássico de iniciante. Dar 777 a tudo significa que qualquer usuário do sistema pode modificar qualquer arquivo do seu site. Em servidores compartilhados, isso é crítico. Use 755 para diretórios, 644 para arquivos, e 750/640 para áreas restritas.

Usar octal quando quer mudança incremental — se você quer apenas adicionar execute sem alterar r e w, use chmod +x, não chmod 755 (que sobrescreve tudo).

05. Avançado

Bits especiais: SUID, SGID e Sticky Bit

Explicação

Além dos 9 bits rwx, existem três bits especiais que modificam o comportamento de execução e acesso:

SUID (Set User ID) — bit 4000

Quando ativo em um executável, o programa roda com as permissões do dono do arquivo, não de quem o executou. Aparece como s no lugar do x do user: -rwsr-xr-x.

Exemplo clássico: /usr/bin/passwd precisa escrever em /etc/shadow (arquivo só de root). Com SUID de root, qualquer usuário pode mudar sua própria senha sem ter acesso root direto.

SGID (Set Group ID) — bit 2000

Em executável: roda com permissões do grupo dono. Aparece como s no x do grupo: -rwxr-sr-x.

Em diretório: arquivos criados herdam o grupo do diretório, não o grupo primário de quem criou. Muito útil para colaboração em equipe.

Sticky Bit — bit 1000

Em diretórios: usuários só podem deletar arquivos que são seus próprios, mesmo que tenham permissão w no diretório. Aparece como t no x de others: drwxrwxrwt.

O /tmp sempre tem sticky bit — qualquer um cria arquivos lá, mas só o dono (ou root) pode deletar o seu.

Exemplo Concreto
# SUID no passwd — qualquer usuário pode mudar sua senha
ls -la /usr/bin/passwd
-rwsr-xr-x 1 root root 68208 Jan 15 ... /usr/bin/passwd
# ↑ 's' no lugar de 'x' do user = SUID ativo

# Sticky bit no /tmp
ls -ld /tmp
drwxrwxrwt 14 root root 4096 Mai 20 11:20 /tmp
#         ↑ 't' no lugar de 'x' de others = sticky bit

# Ativar SUID em um executável
chmod u+s meu_programa     # notação simbólica
chmod 4755 meu_programa    # notação octal (4xxx)

# Ativar SGID em um diretório compartilhado
chmod g+s /equipe/projetos
# Arquivos criados aqui herdam o grupo de /equipe/projetos

# Ativar sticky bit
chmod +t /diretorio/compartilhado
chmod 1777 /tmp             # rwxrwxrwt em octal = 1777

# Ver SUID/SGID — s maiúsculo = bit especial sem x correspondente
# -rwSr-xr-x → SUID ativo mas sem execute (S maiúsculo = incomum)
# -rwsr-xr-x → SUID ativo com execute (s minúsculo = normal)

# Encontrar todos os arquivos SUID do sistema
find / -perm -4000 -type f 2>/dev/null
Erros comuns

Criar executáveis SUID desnecessariamente — SUID é um vetor de escalada de privilégios. Um binário SUID de root com vulnerabilidade pode comprometer o sistema inteiro. Auditores de segurança verificam todos os binários SUID como parte da análise.

Confundir S maiúsculo com s minúsculoS (maiúsculo) significa que o bit especial está ativo mas o bit x correspondente não está — o que geralmente indica um erro de configuração. s (minúsculo) significa que ambos estão ativos.

O que você precisa guardar
  • SUID (4xxx): executável roda como o dono — cuidado, é privilegiado
  • SGID em dir (2xxx): novos arquivos herdam o grupo do diretório
  • Sticky (1xxx): só o dono pode deletar seu arquivo no diretório
  • s minúsculo = bit especial + execute. S maiúsculo = bit especial sem execute
  • t minúsculo = sticky + execute. T maiúsculo = sticky sem execute
06. Padrão

umask: a máscara de permissões padrão

Explicação

Quando você cria um arquivo ou diretório, o sistema precisa definir suas permissões iniciais. A umask (user file creation mask) define quais permissões serão retiradas das permissões máximas padrão.

Permissões máximas padrão: 666 para arquivos (rw-rw-rw-) e 777 para diretórios (rwxrwxrwx). O kernel não cria arquivos com execute por padrão — daí o 666 em vez de 777 para arquivos.

A umask é subtraída dessas permissões máximas:

  • umask 022 (mais comum): arquivos = 666 - 022 = 644 (rw-r--r--), diretórios = 777 - 022 = 755 (rwxr-xr-x)
  • umask 027: arquivos = 640 (rw-r-----), diretórios = 750 (rwxr-x---)
  • umask 077: arquivos = 600 (rw-------), diretórios = 700 (rwx------) — tudo privado

Ver a umask atual: comando umask. Configurar permanentemente em ~/.bashrc ou /etc/profile.

Exemplo Concreto
# Ver a umask atual
umask
# 0022

# Ver em formato simbólico
umask -S
# u=rwx,g=rx,o=rx

# Como a umask age:
# Permissão máxima para arquivo:    666  (rw-rw-rw-)
# Umask 022:                      - 022  (----w--w-)
# Resultado:                        644  (rw-r--r--)

# Permissão máxima para diretório:  777  (rwxrwxrwx)
# Umask 022:                      - 022  (----w--w-)
# Resultado:                        755  (rwxr-xr-x)

# Testar: criar arquivo e diretório
touch teste.txt && ls -la teste.txt
# -rw-r--r-- 1 joao joao 0 Mai 20 11:30 teste.txt

mkdir testedir && ls -ld testedir
# drwxr-xr-x 2 joao joao 4096 Mai 20 11:30 testedir

# Mudar umask temporariamente na sessão atual
umask 027
touch privado.txt && ls -la privado.txt
# -rw-r----- 1 joao joao 0 Mai 20 11:31 privado.txt

# Configurar permanentemente no .bashrc
echo "umask 022" >> ~/.bashrc
Erros comuns

"umask 022 remove permissão de execução" — a umask age sobre as permissões máximas padrão. Para arquivos, o máximo já é 666 (sem execute), então a umask não afeta execute em arquivos. Para diretórios (max 777), a umask 022 remove apenas w de grupo e outros.

Confundir umask com chmod — umask é uma máscara que define o padrão para arquivos novos. Não altera arquivos existentes. Para arquivos já criados, use chmod.

O que você precisa guardar
  • umask é subtraída das permissões máximas (666 arquivos, 777 dirs)
  • umask 022 → arquivos 644, diretórios 755 (padrão na maioria das distros)
  • umask 027 → arquivos 640, diretórios 750 (mais restritivo, comum em servidores)
  • Configure em ~/.bashrc (usuário) ou /etc/profile (todos os usuários)
  • umask não afeta arquivos já existentes — apenas os criados depois

🃏 Flashcards

📝 Quiz: Módulo 03