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
- Documentação Oficial do Ubuntu - Gerenciamento de Usuários — Guia completo sobre criação, modificação e remoção segura de usuários no Ubuntu Server
- Red Hat Enterprise Linux - Managing Users and Groups — Documentação oficial da Red Hat sobre administração de usuários e grupos com foco em segurança
- Linux Security - Hardening Linux Servers — Artigo técnico sobre práticas de hardening incluindo gerenciamento seguro de contas e permissões
- DigitalOcean - How to Add and Delete Users on Ubuntu — Tutorial prático com exemplos de comandos para gerenciamento de usuários
- Arch Linux Wiki - Users and Groups — Wiki detalhada sobre conceitos, comandos e boas práticas de gerenciamento de usuários e grupos
- OWASP - Linux Security Checklist — Checklist de segurança Linux da OWASP com recomendações para gerenciamento de contas e acesso
- SUSE - Security Guide: User Management — Guia de segurança da SUSE com foco em gerenciamento de usuários e políticas de acesso