Guia de Hardening de Sistemas Linux: Práticas de Segurança Essenciais

O endurecimento (hardening) de sistemsa operacionais é um processo fundamental para reduzir a superfície de ataque e fortalecer a postura de segurança de servidores Linux. A seguir, apresentamos configurações críticas recomendadas para ambientes de produção.

  1. Configuração de Timeout de Sessão

Para encerrar sessões inativas automaticamente, edite o arquivo de perfil global do sistema:

# Adicione ao final do /etc/profile
readonly TMOUT=180
export TMOUT

O valor define o tempo em segundos de inatividade antes da desconexão. Recomenda-se valores inferiores a 300 segundos.

  1. Restrição de Acesso FTP para Usuário Root

Para impedir que o superusuário acesse o serviço FTP, adicione "root" à lista de usuários bloqueados nos seguintes caminhos:

echo "root" >> /etc/vsftpd/ftpusers
echo "root" >> /etc/vsftpd/user_list

Reinicie o serviço após as alterações com systemctl restart vsftpd.

  1. Priorização do Protocolo SSH sobre Telnet

O Telnet transmite dados em texto puro, sendo inseguro para administração remota. Desative-o e garanta que o SSH esteja ativo:

# Desativar telnet via systemd
systemctl stop telnet.socket
systemctl disable telnet.socket

# Garantir que SSH está habilitado
systemctl enable sshd
systemctl start sshd

  1. Permissões Restritivas para Arquivos de Log

Arquivos de registro devem ter permissões limitadas para evitar leitura ou modificação por usuários não autorizados:

LOGDIR="/var/log"
chmod 640 ${LOGDIR}/messages
chmod 640 ${LOGDIR}/secure
chmod 640 ${LOGDIR}/maillog
chmod 640 ${LOGDIR}/cron
chmod 640 ${LOGDIR}/spooler
chmod 640 ${LOGDIR}/boot.log

  1. Habilitação de Auditoria via Syslog

Configure o daemon de logs para registrar eventos de autenticação. No rsyslog (mais comum em distribuições recentes):

# Em /etc/rsyslog.conf ou /etc/rsyslog.d/50-default.conf
authpriv.*    /var/log/auth.log

Reinicie com systemctl restart rsyslog.

  1. Ancaminhamento de Logs para Servidor Remoto

Centralize registros em um servidor de logs externo para aálise consolidada:

# Adicionar ao /etc/rsyslog.conf
*.*    @@logserver.example.com:514

Use @@ para TCP ou @ para UDP. Certifique-se de que o firewall permite a comunicação na porta configurada.

  1. Registro de Atividades do Cron

Todas as execuções de tarefas agendadas devem ser registradas:

# Em /etc/rsyslog.conf
cron.*    /var/log/cron.log

  1. Máscara de Permissão Padrão (umask)

Defina uma máscara restritiva para novos arquivos e diretórios criados no sistema:

# Em /etc/login.defs
UMASK 027

# Em /etc/profile
umask 027

Valores comuns incluem 027, 037 ou 077, dependendo do nível de restrição desejado.

  1. Bloqueio de Login Remoto como Root via SSH

Edite a configuração do daemon SSH:

# Em /etc/ssh/sshd_config
PermitRootLogin no

Reinicie o serviço: systemctl restart sshd.

  1. Controle de Acesso ao Comando su

Limite quais usuários podem alternar para o superusuário:

# Em /etc/pam.d/su
auth required pam_wheel.so use_uid

Adicione usuários permitidos ao grupo wheel: usermod -aG wheel usuario_permitido.

  1. Permissões de Arquivos Críticos de Autenticação

Proteja os bancos de dados de usuários e grupos do sistema:

chmod 644 /etc/passwd /etc/group
chmod 600 /etc/shadow /etc/gshadow

  1. Desativação de Serviços Desnecessários

Serviços não utilizados aumentam a superfície de ataque. Desative-os:

UNNECESSARY_SERVICES=(
    "daytime" "echo" "discard" "chargen"
    "ntalk" "ident" "printer" "tftp"
    "kshell" "klogin" "nfs" "rpcbind"
    "ypbind" "sendmail" "avahi-daemon"
)

for svc in "${UNNECESSARY_SERVICES[@]}"; do
    systemctl stop "${svc}" 2>/dev/null
    systemctl disable "${svc}" 2>/dev/null
done

  1. Desativação de Contas de Sistema Não Utilizadas

Contas de serviço sem uso devem ter seu shell definido como nologin:

SYSTEM_ACCOUNTS=("listen" "gdm" "webservd" "nobody" "nobody4" "noaccess")

for account in "${SYSTEM_ACCOUNTS[@]}"; do
    usermod -s /sbin/nologin "${account}" 2>/dev/null
done

  1. Restrição de Usuários FTP em Diretórios

Para confinar usuários FTP aos seus diretórios home, configure chroot no vsftpd:

# Em /etc/vsftpd.conf
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list

  1. Remoção de Arquivos de Confiança de Rede

Arquivos como .rhosts, .netrc e hosts.equiv podem permitir autenticação indevida. Localize e elimine-os:

find / -type f \( -name ".rhosts" -o -name ".netrc" -o -name "hosts.equiv" \) -exec rm -f {} \;

  1. Expiração de Senhas

Force a renovação periódica de credenciais:

# Em /etc/login.defs
PASS_MAX_DAYS   90
PASS_MIN_DAYS   1
PASS_WARN_AGE   7

  1. Complexidade de Senhas

Implemente políticas de senha robustas usando pam_pwquality ou pam_cracklib:

# Em /etc/pam.d/system-auth ou /etc/pam.d/common-password
password requisite pam_pwquality.so retry=3 minlen=12 dcredit=-1 ucredit=-1 ocredit=-1 lcredit=-1

Parâmetros: dcredit (dígitos), ucredit (maiúsculas), lcredit (minúsculas), ocredit (caracteres especiais). Valores negativos indicam quantidade mínima obrigatória.

  1. Desativação de FTP Anônimo

# Em /etc/vsftpd.conf
anonymous_enable=NO
local_enable=YES

  1. Comprimento Mínimo de Senha

# Em /etc/login.defs
PASS_MIN_LEN 12

  1. Limitação de Tentativas de Login

Bloqueie contas após múltiplas falhas de autenticação usando pam_faillock ou pam_tally2:

# Em /etc/pam.d/sshd (acima da linha de auth include)
auth required pam_faillock.so preauth silent deny=3 unlock_time=900 fail_interval=900
auth [default=die] pam_faillock.so authfail deny=3 unlock_time=900 fail_interval=900

# Desbloqueio manual de conta específica
faillock --user nome_usuario --reset

  1. Proteção de Arquivos Essenciais com Atributos Imutáveis

Impedir modificação mesmo por root usando atributos do sistema de arquivos:

chattr +i /etc/passwd /etc/shadow /etc/group /etc/gshadow
# Para reverter: chattr -i /etc/passwd /etc/shadow /etc/group /etc/gshadow

  1. Autenticação Exclusiva por Chaves SSH

Desative autenticação por senha para conexões SSH:

# Em /etc/ssh/sshd_config
PasswordAuthentication no
PubkeyAuthentication yes
ChallengeResponseAuthentication no

Reinicie o serviço após alterações: systemctl restart sshd.

  1. Remoção de Informações de Identificação do Sistema

Evite que ataquantes identifiquem a distribuição e versão do sistema:

BANNER_FILES=("/etc/issue" "/etc/issue.net" "/etc/motd")

for file in "${BANNER_FILES[@]}"; do
    if [ -f "$file" ]; then
        > "$file"
        echo "Acesso não autorizado é proibido." >> "$file"
    fi
done

Tags: Linux hardening SSH vsftpd pam

Publicado em 6-4 06:20 por Thomas