Bloqueando o acesso de root ao Linux

Essa é para aqueles que querem tornar seus sistemas Linux o mais seguro possível.
A dica aqui passada surgiu depois de uma discussão na lista do Linux-SE sobre segurança, e como o BSD e o Linux se comparavam.

A idéia aqui é fazer o Linux se comportar como o FreeBSD já se comporta out of the box, e que traz muito mais segurança a um ambiente.
O que faremos aqui é simplesmente bloquear o acesso do root ao sistema através de console, além de proibir que qualquer usuário possa rodar o su ou o sudo para ganhar uma shell com poderes de root. Grande parte disso é possível de ser implementado, e de forma bem simples, graças ao PAM.

Antes de continuar uma observação: eu testei as dicas abaixo no KUbuntu 8.04. Pode ser que os detalhes variem na sua distribuição! Bom, vamos lá.
O primeiro passo é verificar que o arquivo /etc/pam.d/login, possui a seguintes linha:
auth required /lib/security/pam_securetty.so

O
que o modulo pam_securitty faz é dizer que o root só pode se autenticar nas seriais definidas no arquivo /etc/securetty.
O próximo passo é então dizer que nenhuma serial é segura para login do root, executando o seguinte comando:
cp /etc/securetty /etc/securetty-BACKUP
echo "null" > /etc/securetty

Pronto! O root não pode mais logar em nenhuma shell.
E agora, como garantir que somente alguns usuários podem "virar" root?
Existem duas maneiras para isso: executando o comando su -, e fornecendo a senha de root, ou então usando o comando sudo bash. Em ambos os casos o usuário termina com uma shell com poderes de root.

Primeiro vamos impedir que todo usuário possa executar o comando su. Para iso basta adicionar a seguinte linha no arquivo /etc/pam.d/su
auth required /lib/security/pam_wheel.so

Agora somente os usuários do grupo root podem usar o su. Para adicionar um usuário a esse grupo basta usar o comando usermod -G root joe. Se quisermos usar um outro grupo para restringir o acesso ao su (o BSD usa classicamente o grupo wheel) devemos adicionar ao final da linha de configuração acima a opção group="wheel", por exemplo.

Para restringir o poder do comando sudo, nos temos de editar o arquivo /etc/sudoers. Isso é feito usando o comando visudo -f /etc/sudoers.
No Ubuntu, por padrão, somente membros do grupo admin e o root podem executar comandos usando o sudo. Isso é garantido pela presença, unicamente, das seguintes três linhas:

Defaults env_reset
root ALL=(ALL) ALL
%admin ALL=(ALL) ALL

Se quisessemos que somente membros do grupo wheel pudessem executar comandos usando o sudo, poderiamos alterar a última linha de forma que ela ficasse:
%wheel ALL=(ALL) ALL

Uma outra opção interessante é impedir que qualquer pessoa de executar o bash usando o sudo. Isso pode ser conseguido adicional a seguinte linha ao arquivo sudoers:
ALL ALL=!/bin/bash

Para mais detalhes da sintaxe do arquivo sudoers, recomendo uma lida no manual (man sudoers), em especial a sessão de exemplos, que mostra de forma bem resumida tudo que da pra fazer :)

Por último, para garantir que o root não vai poder acessar seu sistema através de SSH, basta ter certeza que a linha abaixo existe no
/etc/ssh/sshd_config:
PermitRootLogin no


Pronto! Seu sistema já está a prova de root. ;)
Claro que, se houverem outros meios de acesso ao sistema, como telnet ou uma sessão X, medidas adicionais são necessárias.

Para os interessados, mais dicas de hardenização Linux/BSD podem ser encontradas aqui: http://www.cromwell-intl.com/security/linux-hardening.html

Marcadores: ,