Pular para o conteúdo principal

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