Usuários, Grupos e Permissões

Lição 5/19 | Tempo de Estudo: 30 Min

👥 MÓDULO 5 - USUÁRIOS, GRUPOS E PERMISSÕES

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 é:

username:x:UID:GID:comentario:home_directory:shell

Exemplo:

root:x:0:0:root:/root:/bin/bash
vader:x:1000:1000:Darth Vader:/home/vader:/bin/bash
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
sshd:x:105:65534::/run/sshd:/usr/sbin/nologin

O x no campo de senha indica que o hash real está em /etc/shadow.

/etc/shadow - Hashes das senhas dos usuários. Legível APENAS pelo root. Este é um dos arquivos mais sensíveis do sistema:

username:hash:lastchange:min:max:warn:inactive:expire:reserved

Exemplo:

vader:$6$rounds=5000$salt$hashmuylargo...:19500:0:99999:7:::

O formato do hash indica o algoritmo: $6$ = SHA-512 (padrão no Debian 13), $5$ = SHA-256, $2b$ = bcrypt.

/etc/group
Lista de grupos do sistema:

groupname:x:GID:membros

Exemplo:

sudo:x:27:vader
rebeldes:x:1001:vader, leia, han
docker:x:998:vader

⚙️ 5.2 Gerenciamento de Usuários

# Criar usuário
sudo useradd -m -s /bin/bash -c "Leia Organa" leia
# -m → Cria home directory (/home/leia)
# -s → Define o shell de login
# -c → Comentário (nome completo)

# 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

# Deletar usuário
sudo userdel leia # Remove usuário (mantém home)
sudo userdel -r leia # Remove usuário E home directory

# 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)

👥 5.3 Gerenciamento de Grupos

# Criar grupo
sudo groupadd rebeldes
sudo groupadd -g 2000 jedi

# 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ãoSignificado
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ãoSignificado
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:

PermissãoValorBinário
r (read)4100
w (write)2010
x (execute)1001
- (nenhum)0000

Exemplos de cálculo:

  • rwx = 4+2+1 = 7
  • r-x = 4+0+1 = 5
  • r-- = 4+0+0 = 4
  • rw- = 4+2+0 = 6
  • --- = 0+0+0 = 0

CHMOD - ALTERANDO PERMISSÕES

# Modo octal
chmod 755 script.sh # rwxr-xr-x (scripts executáveis)
chmod 644 config.txt # rw-r--r-- (arquivos de configuração)
chmod 600 /etc/shadow # rw------- (só root lê - senhas!)
chmod 700 ~/.ssh # rwx------ (diretório SSH)
chmod 400 ~/.ssh/id_ed25519 # r-------- (chave privada: somente leitura)
chmod 777 nada.txt # rwxrwxrwx (NUNCA USE! Inseguro!)

# 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

OctalSimbólicoUso comum
755rwxr-xr-xScripts, binários, diretórios públicos
644rw-r--r--Arquivos de configuração, documentos
600rw-------Arquivos sensíveis (/etc/shadow, chaves)
700rwx------Diretórios privados (~/.ssh/)
400r--------Chaves privadas SSH
1777rwxrwxrwt/tmp (sticky bit)
4755rwsr-xr-xBiná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.

Para editar:

sudo visudo

# Executar como root
sudo apt update
sudo systemctl restart ssh

# 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