Gerenciando usuários e grupos no Linux com segurança

1. Princípios fundamentais de segurança na administração de usuários

1.1. Conceito de privilégio mínimo (Principle of Least Privilege)

O Princípio do Menor Privilégio determina que cada usuário ou processo deve ter apenas as permissões estritamente necessárias para realizar suas funções. No Linux, isso significa evitar o uso indiscriminado de contas com privilégios elevados e conceder acesso granular a recursos específicos.

1.2. Separação de contas: root, administradores e usuários comuns

A separação clara entre contas é essencial:

  • root: conta administrativa com controle total do sistema, usada apenas para tarefas específicas
  • Administradores: usuários com acesso sudo limitado a comandos específicos
  • Usuários comuns: contas sem privilégios administrativos, com acesso apenas aos próprios arquivos

1.3. Políticas de senhas fortes e expiração com chage

O comando chage permite gerenciar políticas de expiração de senhas:

# Configurar expiração de senha para 90 dias
sudo chage -M 90 usuario

# Forçar troca de senha no próximo login
sudo chage -d 0 usuario

# Verificar informações de expiração
sudo chage -l usuario

2. Criação e remoção segura de usuários no Linux

2.1. Comandos useradd e adduser: boas práticas

Ao criar usuários, siga estas práticas:

# Criar usuário com UID específico, diretório home e shell definido
sudo useradd -u 1500 -m -d /home/joao -s /bin/bash -c "Joao Silva" joao

# Definir senha imediatamente após criação
sudo passwd joao

# Usar adduser (Debian/Ubuntu) que aplica defaults seguros
sudo adduser maria

2.2. Remoção completa com userdel -r e bloqueio temporário

# Remover usuário e seu diretório home completamente
sudo userdel -r joao

# Bloquear conta temporariamente sem remover dados
sudo usermod -L maria

# Desbloquear conta
sudo usermod -U maria

2.3. Gerenciamento de contas inativas

# Verificar último login de todos os usuários
lastlog

# Definir data de expiração para conta
sudo usermod -e 2025-12-31 usuario_inativo

# Identificar contas sem login há mais de 90 dias
lastlog -b 90

3. Gerenciamento de grupos e permissões com segurança

3.1. Criação de grupos primários e secundários

# Criar grupo com GID específico
sudo groupadd -g 2000 desenvolvedores

# Criar grupo sem GID específico
sudo groupadd auditores

3.2. Adição e remoção de usuários em grupos

# Adicionar usuário a grupo secundário
sudo usermod -aG desenvolvedores joao

# Remover usuário de grupo
sudo gpasswd -d joao desenvolvedores

# Verificar grupos de um usuário
groups joao

3.3. Uso de grupos específicos para controle de acesso

Grupos especializados permitem controle granular:

# Adicionar usuário ao grupo sudo (privilégios administrativos)
sudo usermod -aG sudo joao

# Adicionar ao grupo docker (acesso ao Docker)
sudo usermod -aG docker joao

# Adicionar ao grupo www-data (acesso a arquivos web)
sudo usermod -aG www-data joao

4. Controle de acesso a arquivos e diretórios

4.1. Permissões tradicionais (rwx)

# Alterar proprietário e grupo de um arquivo
sudo chown joao:desenvolvedores projeto.txt

# Definir permissões: dono=rw, grupo=r, outros=
chmod 640 projeto.txt

# Aplicar recursivamente em diretório
chmod -R 750 /projetos

4.2. Configuração de umask

# Verificar umask atual
umask

# Definir umask para 027 (arquivos: 640, diretórios: 750)
umask 027

# Configurar permanentemente no /etc/profile
echo "umask 027" >> /etc/profile

4.3. Permissões especiais: SUID, SGID e sticky bit

# SUID - executar com permissões do proprietário
chmod u+s /usr/bin/script

# SGID - herdar grupo do diretório pai
chmod g+s /compartilhado

# Sticky bit - apenas dono pode deletar arquivos
chmod +t /tmp

5. Monitoramento e auditoria de atividades de usuários

5.1. Verificação de logins ativos

# Usuários logados atualmente
who

# Informações detalhadas de usuários ativos
w

# Histórico de logins
last

# Últimos logins de um usuário específico
last joao

5.2. Auditoria com auditd

# Instalar auditd
sudo apt install auditd

# Adicionar regra para monitorar /etc/passwd
sudo auditctl -w /etc/passwd -p wa -k passwd_changes

# Buscar eventos de auditoria
sudo ausearch -k passwd_changes

5.3. Análise de logs de autenticação

# Verificar tentativas de login (Debian/Ubuntu)
sudo tail -f /var/log/auth.log

# Verificar tentativas de login (RHEL/CentOS)
sudo tail -f /var/log/secure

# Buscar falhas de autenticação
sudo grep "Failed password" /var/log/auth.log

6. Proteção contra ataques comuns relacionados a usuários

6.1. Prevenção de brute force SSH

# Instalar fail2ban
sudo apt install fail2ban

# Configurar jail local
sudo nano /etc/fail2ban/jail.local
# Adicionar:
# [sshd]
# enabled = true
# maxretry = 3
# bantime = 3600

# Reiniciar serviço
sudo systemctl restart fail2ban

6.2. Bloqueio de logins root remotos

# Editar configuração SSH
sudo nano /etc/ssh/sshd_config

# Alterar ou adicionar:
# PermitRootLogin no

# Reiniciar serviço SSH
sudo systemctl restart sshd

6.3. Restrição de su e sudo

# Restringir su apenas para grupo wheel
sudo nano /etc/pam.d/su
# Adicionar:
# auth required pam_wheel.so

# Configurar sudoers com privilégios mínimos
sudo visudo
# Adicionar:
# joao ALL=(ALL) /usr/bin/apt, /usr/bin/systemctl

7. Boas práticas de manutenção e automação segura

7.1. Scripts de criação e remoção em lote

#!/bin/bash
# Script para criar múltiplos usuários com validação
ARQUIVO="usuarios.txt"

if [ ! -f "$ARQUIVO" ]; then
    echo "Arquivo $ARQUIVO não encontrado"
    exit 1
fi

while IFS=: read -r usuario grupo shell; do
    if id "$usuario" &>/dev/null; then
        echo "Usuário $usuario já existe"
    else
        sudo useradd -m -s "$shell" -G "$grupo" "$usuario"
        echo "Usuário $usuario criado com sucesso"
    fi
done < "$ARQUIVO"

7.2. Backup de arquivos de configuração

# Backup dos arquivos críticos de usuários e grupos
sudo cp /etc/passwd /backup/passwd.$(date +%Y%m%d)
sudo cp /etc/shadow /backup/shadow.$(date +%Y%m%d)
sudo cp /etc/group /backup/group.$(date +%Y%m%d)
sudo cp /etc/gshadow /backup/gshadow.$(date +%Y%m%d)

# Restauração (apenas em caso de emergência)
sudo cp /backup/passwd.20241201 /etc/passwd

7.3. Script de auditoria periódica

#!/bin/bash
# Auditoria de contas e grupos
echo "=== CONTAS SEM SENHA ==="
sudo awk -F: '($2 == "") {print $1}' /etc/shadow

echo "=== CONTAS COM UID 0 (não root) ==="
sudo awk -F: '($3 == 0 && $1 != "root") {print $1}' /etc/passwd

echo "=== GRUPOS SEM MEMBROS ==="
sudo awk -F: '($4 == "") {print $1}' /etc/group

echo "=== ÚLTIMOS LOGINS ==="
lastlog -t 30

Referências