Capítulo 9.2 - Configuração do sudo
Objetivos de Aprendizagem
Ao final deste capítulo, você será capaz de:
- Entender o sudo e seu papel
- Configurar o sudo de forma segura
- Criar aliases e grupos
- Restringir comandos permitidos
- Registrar as ações do sudo
- Compreender boas práticas
O que é sudo?
sudo (Super User DO) permite executar comandos com privilégios de outro usuário (geralmente root).
Vantagens:
- Não é necessário conta root
- Registro das ações
- Controle granular
- Mais seguro que su
Arquivo /etc/sudoers
Editar com Segurança
# NUNCA edite diretamente!
# Use visudo (verifica a sintaxe)
sudo visudo
# Ou edite com verificação
sudo visudo -f /etc/sudoers
visudo:
- Verifica a sintaxe antes de salvar
- Evita erros de configuração
- Trava o arquivo durante a edição
Formato Básico
# /etc/sudoers
# Formato: usuário host=(runas) comandos
# Exemplo simples
user1 ALL=(ALL:ALL) ALL
# Com NOPASSWD
user1 ALL=(ALL:ALL) NOPASSWD: ALL
# Comandos específicos
user1 ALL=(ALL:ALL) /usr/bin/systemctl, /usr/bin/docker
Sintaxe Detalhada
Usuários
# Usuário específico
user1 ALL=(ALL:ALL) ALL
# Grupo (prefixo %)
%developers ALL=(ALL:ALL) ALL
# Alias de usuários
User_Alias ADMINS = user1, user2, user3
ADMINS ALL=(ALL:ALL) ALL
Hosts
# Todos os hosts
user1 ALL=(ALL:ALL) ALL
# Host específico
user1 server1=(ALL:ALL) ALL
# Alias de hosts
Host_Alias SERVERS = server1, server2, server3
user1 SERVERS=(ALL:ALL) ALL
Runas (Executar como)
# Como root
user1 ALL=(ALL:ALL) ALL
# Como usuário específico
user1 ALL=(www-data:ALL) ALL
# Como qualquer usuário
user1 ALL=(ALL:ALL) ALL
# Alias runas
Runas_Alias WEBSERVERS = www-data, nginx
user1 ALL=(WEBSERVERS:ALL) ALL
Comandos
# Todos os comandos
user1 ALL=(ALL:ALL) ALL
# Comandos específicos
user1 ALL=(ALL:ALL) /usr/bin/systemctl, /usr/bin/docker
# Diretório (todos comandos dentro)
user1 ALL=(ALL:ALL) /usr/local/bin/
# Com ou sem senha
user1 ALL=(ALL:ALL) NOPASSWD: /usr/bin/systemctl
user1 ALL=(ALL:ALL) PASSWD: /usr/bin/docker
Alias
User_Alias
# Agrupar usuários
User_Alias ADMINS = user1, user2
User_Alias DEVELOPERS = dev1, dev2, dev3
User_Alias DEVOPS = ops1, ops2
# Utilização
ADMINS ALL=(ALL:ALL) ALL
DEVELOPERS ALL=(ALL:ALL) /usr/bin/git, /usr/bin/docker
Host_Alias
# Agrupar hosts
Host_Alias SERVERS = server1, server2, 192.168.1.0/24
Host_Alias WORKSTATIONS = ws1, ws2
# Utilização
user1 SERVERS=(ALL:ALL) ALL
Cmnd_Alias
# Agrupar comandos
Cmnd_Alias NETWORKING = /sbin/ifconfig, /sbin/route, /sbin/ip
Cmnd_Alias SERVICES = /usr/bin/systemctl start, /usr/bin/systemctl stop
Cmnd_Alias SOFTWARE = /usr/bin/apt, /usr/bin/yum
# Utilização
user1 ALL=(ALL:ALL) NETWORKING, SERVICES
Runas_Alias
# Agrupar usuários runas
Runas_Alias WEBSERVERS = www-data, nginx
Runas_Alias DATABASES = mysql, postgres
# Utilização
user1 ALL=(WEBSERVERS:ALL) /usr/bin/systemctl
Exemplos Práticos
Administrador Completo
# Acesso completo
User_Alias ADMINS = admin1, admin2
ADMINS ALL=(ALL:ALL) ALL
Desenvolvedor Limitado
# Apenas comandos de desenvolvimento
User_Alias DEVS = dev1, dev2
DEVS ALL=(ALL:ALL) /usr/bin/git, /usr/bin/docker, /usr/bin/npm
Webmaster
# Apenas gestão web
user1 ALL=(www-data:ALL) /usr/bin/systemctl restart apache2, \
/usr/bin/systemctl reload nginx
Operador de Sistema
# Comandos de sistema sem senha
User_Alias OPS = ops1, ops2
Cmnd_Alias SYSTEM = /usr/bin/systemctl, /usr/bin/journalctl
OPS ALL=(ALL:ALL) NOPASSWD: SYSTEM
Registro (Logs)
Configuração
# /etc/sudoers
# Registrar todos os comandos
Defaults logfile=/var/log/sudo.log
Defaults log_input, log_output
# Ou com syslog
Defaults syslog=auth
Visualizar os Logs
# Logs do sistema
sudo grep sudo /var/log/auth.log # Ubuntu/Debian
sudo grep sudo /var/log/secure # Red Hat/CentOS
# Arquivo personalizado
sudo tail -f /var/log/sudo.log
# Ver comandos de um usuário
sudo grep "user1" /var/log/auth.log | grep sudo
Boas Práticas
Segurança
# 1. Restringir comandos
user1 ALL=(ALL:ALL) /usr/bin/systemctl, /usr/bin/docker
# 2. Evitar NOPASSWD salvo quando necessário
user1 ALL=(ALL:ALL) NOPASSWD: /usr/bin/systemctl status
# 3. Usar aliases
User_Alias ADMINS = user1, user2
ADMINS ALL=(ALL:ALL) ALL
# 4. Registrar logs
Defaults logfile=/var/log/sudo.log
# 5. Timeout apropriado
Defaults timestamp_timeout=15 # 15 minutos
Manutenção
# Verificar configuração
sudo visudo -c
# Testar permissões
sudo -l # Ver permissões atuais
# Ver histórico
sudo grep sudo /var/log/auth.log
Arquivos Incluídos
/etc/sudoers.d/
# Criar arquivo separado
sudo visudo -f /etc/sudoers.d/user1
# Conteúdo
user1 ALL=(ALL:ALL) /usr/bin/systemctl
# Vantagens:
# - Organização
# - Fácil de gerenciar
# - Sem conflito com sudoers principal
Nota: Arquivos em /etc/sudoers.d/ são incluídos automaticamente.
Resumo
Neste capítulo, você aprendeu:
sudo: Execução de comandos com privilégios elevados
visudo: Editor seguro com verificação de sintaxe
Sintaxe: usuário host=(runas) comandos
Alias: User_Alias, Host_Alias, Cmnd_Alias, Runas_Alias
Registro: Logs das ações do sudo
Prática: Restringir comandos, usar aliases, registrar logs
Próximos Passos
Capítulo 9.3: Firewall (iptables, firewalld, ufw)
Capítulo 9.4: Auditoria e Monitoramento de Segurança
Capítulo criado em: Dezembro 2024