O sistema de permissões do Linux é uma das suas maiores forças em segurança. Todo arquivo, diretório e processo tem um dono, um grupo e um conjunto de permissões que determinam quem pode fazer o quê.
Entender esse sistema é fundamental tanto para administrar quanto para explorar (no contexto de pentest) um sistema Linux.
👤 5.1 O Modelo de Usuários
No Linux, existem três tipos de contas:
root (UID 0) O superusuário. O root pode fazer absolutamente tudo no sistema: ler qualquer arquivo, matar qualquer processo, modificar qualquer configuração. É o "deus do sistema". Por segurança, nunca se deve fazer login diretamente como root use sudo para executar comandos específicos com privilégio elevado.
Usuários de sistema (UID 1-999) Contas criadas para serviços e daemons. Exemplos: www-data (Apache/Nginx), sshd (SSH), nobody, mysql, postgres. Essas contas normalmente não fazem login interativo existem apenas para isolar permissões de serviços.
Usuários comuns (UID 1000+) Pessoas reais. São criados com home directory em /home/usuario e um shell para login interativo.
ARQUIVOS CRÍTICOS DE AUTENTICAÇÃO
/etc/passwd Lista de TODOS os usuários do sistema. É legível por todos (qualquer usuário pode ler). O formato é:
# Criar com grupo extra
sudo useradd -m -s /bin/bash -G sudo,docker leia
# -G → Grupos secundários (sudo permite usar sudo, docker permite usar docker)
# Criar com UID e GID específico
sudo useradd -m -s /bin/bash -u 1500 -g 1001 analista
# Definir ou alterar senha
sudo passwd leia
# O sistema pedirá a nova senha (digitada duas vezes, não aparece na tela)
# Modificar usuário existente
sudo usermod -aG sudo leia
# ADICIONA ao grupo sudo (-a = append!)
sudo usermod -s /bin/zsh leia
# Muda o shell
sudo usermod -L leia
sudo usermod -U leia
# Lock bloqueia a conta
# Unlock desbloqueia
sudo usermod -d /home/novohome leia # Muda o home directory
sudo usermod -l novonome antigo # Renomeia o usuário
# CUIDADO: sem o a, o usermod SUBSTITUI todos os grupos!
sudo usermod -G sudo,docker leia # Remove dos outros grupos!
sudo usermod -aG sudo,docker leia # Adiciona sem remover
# Informações do usuário
id # Seu UID, GID e grupos
id leia # UID, GID e grupos de outro usuário
whoami # Seu username
who # Quem está logado no sistema
w # Quem está logado e fazendo o quê
last # Histórico de logins
lastlog # Último login de cada usuário
finger leia # Informações detalhadas (se instalado)
# Adicionar usuário ao grupo
sudo usermod -aG rebeldes vader
sudo gpasswd -a vader rebeldes # Via gpasswd (alternativa)
# Remover usuário do grupo
sudo gpasswd -d vader rebeldes
# Listar membros de um grupo
getent group rebeldes
grep "rebeldes" /etc/group # Alternativa
# Ver meus grupos
groups
groups vader # Grupos de outro usuário
# Deletar grupo
sudo groupdel rebeldes # Só funciona se nenhum usuário tem como grupo primário
# Alterar grupo primário
sudo usermod -g rebeldes vader # -g (minúsculo) = grupo primário
🔐 5.4 Permissões rwx
Cada arquivo e diretório no Linux tem três conjuntos de permissões: para o dono (user/owner), para o grupo (group) e para outros (others). Cada conjunto pode ter três permissões: r (read), w (write) e x (execute).
O diagrama abaixo mostra como as permissões funcionam em detalhes, incluindo os valores octais e as permissões especiais:
SIGNIFICADO DAS PERMISSÕES
Para ARQUIVOS:
Permissão
Significado
r (read)
Pode ler o conteúdo do arquivo
w (write)
Pode modificar o conteúdo do arquivo
x (execute)
Pode executar o arquivo como programa
Para DIRETÓRIOS:
Permissão
Significado
r (read)
Pode listar o conteúdo do diretório (ls)
w (write)
Pode criar e remover arquivos dentro do diretório
x (execute)
Pode entrar no diretório (cd) e acessar seus arquivos
VALORES OCTAIS
Cada permissão tem um valor numérico. A combinação dos valores dá o número octal:
# Modo simbólico
chmod u+x script.sh # Adiciona execução para o dono (u=user)
chmod g-w arquivo.txt # Remove escrita do grupo (g=group)
chmod o-rwx segredo.txt # Remove tudo de outros (o=others)
chmod a+r arquivo.txt # Adiciona leitura para todos (a=all)
chmod u+rwx,g+rx,o+r arquivo.txt # Múltiplas mudanças
chmod +x script.sh # Adiciona execução para todos
# Recursivo
chmod -R 755 diretorio/ # Aplica recursivamente (CUIDADO!)
chmod -R u+rX diretorio/ # X = execute apenas para diretórios
CHOWN E CHGRP - ALTERANDO DONO E GRUPO
# chown alterar dono
sudo chown vader arquivo.txt # Muda apenas o dono
sudo chown vader:rebeldes arquivo.txt # Muda dono E grupo
sudo chown :rebeldes arquivo.txt # Muda apenas o grupo
sudo chown -R vader:vader /home/vader # Recursivo
# chgrp alterar apenas grupo
sudo chgrp rebeldes projeto/
sudo chgrp -R rebeldes projeto/ # Recursivo
PERMISSÕES COMUNS NO DIA A DIA
Octal
Simbólico
Uso comum
755
rwxr-xr-x
Scripts, binários, diretórios públicos
644
rw-r--r--
Arquivos de configuração, documentos
600
rw-------
Arquivos sensíveis (/etc/shadow, chaves)
700
rwx------
Diretórios privados (~/.ssh/)
400
r--------
Chaves privadas SSH
1777
rwxrwxrwt
/tmp (sticky bit)
4755
rwsr-xr-x
Binários com SUID
🛡️ 5.5 Permissões Especiais
As permissões especiais são fundamentais para entender segurança no Linux:
SUID (SET USER ID) BIT 4
Quando um arquivo tem SUID, ele é executado com as permissões do dono do arquivo, não do usuário que o executa.
chmod u+s programa # Ou chmod 4755 programa
ls -l /usr/bin/passwd
# -rwsr-xr-x 1 root root 63736
# ^--- 's' indica SUID
O /usr/bin/passwd tem SUID por isso um usuário comum consegue alterar sua própria senha (que está em /etc/shadow, legível apenas pelo root). O programa roda temporariamente com permissões de root.
🔴 RISCO DE SEGURANÇA: Binários com SUID são o vetor número 1 de privilege escalation em pentests. Se um binário com SUID tiver uma vulnerabilidade ou permitir execução de comandos, o atacante consegue acesso root.
SGID (SET GROUP ID) - BIT 2
chmod g+s diretorio/ # Ou chmod 2755 diretório
Em arquivos: Executa com permissões do grupo do arquivo. Em diretórios: Arquivos criados dentro herdam o grupo do diretório (não o grupo primário do usuário que criou). Muito útil para compartilhamento.
STICKY BIT - BIT 1
chmod +t diretorio/ # Ou chmod 1777 diretório
ls -ld /tmp
# drwxrwxrwt 15 root root
# ^--- o 't' indica sticky bit
Com sticky bit, apenas o dono do arquivo pode deletá-lo, mesmo que outros tenham permissão de escrita no diretório. É essencial no /tmp - sem ele, qualquer usuário poderia deletar arquivos de outros.
ENCONTRANDO BINÁRIOS SUID - ESSENCIAL EM PENTEST
# Encontrar TODOS os binários SUID no sistema
find / -perm -4000 -type f 2>/dev/null
# Encontrar SGID
find / -perm -2000 -type f 2>/dev/null
# Encontrar ambos
find / -perm /6000 -type f 2>/dev/null
# Salvar em relatório
find / -perm -4000 -type f 2>/dev/null > ~/suid-audit.txt
⚙️ 5.6 sudo e sudoers - Configuração avançada
No Módulo 2 você aprendeu o que é o sudo, porque ele existe e como usá-lo na prática. Agora vamos aprofundar na configuração do arquivo sudoers onde se define quem pode fazer o quê.
O arquivo /etc/sudoers controla todas as permissões do sudo no sistema. Nunca edite este arquivo diretamente - sempre use o comando visudo, que valida a sintaxe antes de salvar. Um erro de sintaxe no sudoers pode travar o sudo para todos os usuários.
# Executar como outro usuário
sudo -u www-data whoami
sudo -u postgres psql
# Abrir shell root
sudo -i # Shell de login como root
sudo -s # Shell simples como root
sudo su # Alternativa clássica
# Verificar suas permissões sudo
sudo -l
# Esta saída é OURO em pentest mostra o que o usuário pode executar
# Editar sudoers (SEMPRE use visudo, nunca edite diretamente!)
sudo visudo
Formato do arquivo sudoers:
# usuário hosts=(run_as_user:run_as_group) comandos
vader ALL=(ALL:ALL) ALL # Pode fazer tudo
%rebeldes ALL=(ALL) NOPASSWD: ALL # Grupo pode tudo sem senha
leia ALL=(ALL) /usr/bin/systemctl # Apenas systemctl
r2d2 ALL=(root) NOPASSWD: /usr/bin/rsync # Apenas rsync, sem senha
🛡️ Para Security: Configurações erradas de sudoers são vetores clássicos de privilege escalation. O comando sudo -l é um dos primeiros que se roda em um pentest para ver o que o usuário comprometido pode fazer.
🎯 Lab 4 - Gestão de Usuários e Permissões
1. Crie 3 usuários: luke, boba, yoda (todos com home e bash) 2. Crie 2 grupos: alianca, imperio 3. Adicione: luke ao alianca, boba ao imperio, yoda aos dois grupos 4. Crie a seguinte estrutura com as permissões indicadas:
/opt/cyberforge/
-shared/ → 770, grupo alianca, SGID ativado
-classified/ → 700, dono yoda
-evidence/ → 1777, sticky bit (como /tmp)
5. Teste: faça login como luke (su - luke) e tente: - Criar arquivo em shared/ (deve funcionar) - Acessar classified/ (deve negar) - Criar e deletar arquivo em evidence/
6. Encontre TODOS os binários com SUID no sistema e salve em relatório:
find / -perm -4000 -type f 2>/dev/null > ~/cyberforge/reports/suid-report.txt