Intermediário Sistema e Host

Hardening Linux — usuários, SSH, firewall, SUID e auditoria

Um servidor Linux recém-instalado já vem com dezenas de vetores de ataque: usuários desnecessários, serviços abertos, bits SUID inseguros e sem auditoria. Hardening é o processo de reduzir essa superfície antes de colocar o servidor em produção.

Gerenciamento de usuários

Remova ou bloqueie contas que não precisam de login interativo:

# Listar contas com shell válido
grep -v '/nologin\|/false' /etc/passwd

# Bloquear conta
sudo usermod -L nome_usuario
sudo usermod -s /usr/sbin/nologin nome_usuario

# Verificar UID 0 (root) não autorizado
awk -F: '($3 == 0) { print $1 }' /etc/passwd

Senhas fortes com expiração:

sudo chage -M 90 -W 14 nome_usuario   # expira em 90 dias, aviso em 14
sudo passwd -l root                    # bloqueia login direto como root

Hardening SSH

Edite /etc/ssh/sshd_config:

PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
AllowUsers deploy ops
MaxAuthTries 3
ClientAliveInterval 300
ClientAliveCountMax 2

Recarregue após alterar:

sudo systemctl reload sshd

Use chaves Ed25519 (mais seguras que RSA 2048):

ssh-keygen -t ed25519 -C "deploy@example.com"

Firewall com nftables / ufw

Política padrão: negar tudo, liberar só o necessário.

# ufw (Ubuntu/Debian)
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verbose

Bits SUID/SGID — risco de escalada

Binários com SUID rodam com privilégio do dono (frequentemente root):

# Encontrar todos os SUID no sistema
find / -perm -4000 -type f 2>/dev/null

# Remover SUID de binário desnecessário
sudo chmod u-s /usr/bin/at

Compare a lista com a baseline. Qualquer SUID inesperado é sinal de comprometimento.

Auditoria com auditd

sudo apt install auditd
sudo auditctl -w /etc/passwd -p wa -k passwd_changes
sudo auditctl -w /etc/sudoers -p wa -k sudoers_changes
sudo auditctl -a always,exit -F arch=b64 -S execve -k exec_log

# Ver eventos
sudo ausearch -k passwd_changes
sudo aureport --summary

Checklist rápido

  • Kernel atualizado (sudo apt upgrade)
  • Serviços desnecessários parados (systemctl disable bluetooth cups)
  • /tmp montado com noexec,nosuid
  • Fail2ban instalado para SSH
  • Logs centralizados (rsyslog → SIEM)