domingo, 29 de abril de 2007

Debian e seu suporte a SELinux

Ultimamente ando testando no meu laptop o suporte a SELinux (Security-Enhanced Linux) no Debian, que é uma das implementações MAC (Mandatory Access Control) que se pode utilizar no Linux. Eu já utilizei grsecurity em diversos servidores no passado, e custei a aceitar a idéia do LSM (Linux Security Modules) + SELinux, mais pela política 'strict' que falhou vergonhosamente quando tentaram implementá-la por padrão no Fedora, do que por qualquer outra coisa. De qualquer forma o Debian tem excelente suporte a SELinux, e o mesmo encontra-se no kernel oficial, por padrão, faz algum tempo.

O problema da política de segurança 'strict' do SELinux para uso em desktops, é que a mesma fazia com que tudo fosse executado de maneira confinada. O que, acredite, é excelente por exemplo para um servidor com um número pequeno de serviços e uma exposição alta. Exemplo: Um site de uma empresa rodando de maneira dedicada e não compartilhada com vários outros sites. Entretanto 'strict' falha em desktops, como o meu laptop, pois, não dá para escrever todas as regras que relaxam as restrições. São muitos os softwares preparados para rodar em um sistema operacional Debian (mais de 20 mil), milhares de casos de uso individuais, e etc. Tem sempre alguém para vir com a idéia do 'learning mode', mas isto já rende um outro post inteiro sobre o assunto. Vamos pular para um passo a passo de como usar o SELinux em seu desktop Debian (Etch, testing ou sid), com uma política que confina a maior parte dos programas que eu uso.

Execute como root:
aptitude install selinux-basics selinux-policy-refpolicy-targeted

Nota: O pacote selinux-basics depende do 'básico' do SELinux e instalar em paralelo o selinux-policy-refpolicy-targeted, garante que você terá esse conjunto de regras em mãos.

Agora é hora de habilitar o SELinux no boot: Eu uso um iBook, logo, eu precisei mexer no meu /etc/yaboot.conf, mas é bem provável que você vá precisar mexer no /boot/grub/menu.list. Edite o arquivo como root e adicione 'selinux=1' na linha referente a kopt (não descomente), após isto execute como root:
update-grub
touch /.autorelabel

Reinicie, mas saiba que durante o boot o /etc/init.d/selinux-basics irá executar o comando fixfiles. Dessa forma os atributos extendidos serão adicionados. É algo como aplicar a política 'targeted' ao(s) sistema(s) de arquivo(s).

Após o boot, execute 'sestatus' para verificar que o SELinux está ativo, porém, a política não está sendo imposta. Sim, somente bootando o sistema com 'seólinux=1' você colocar o SELinux para funcionar, mas nada ficará quebrado ou será imposto, é como se o SELinux estivesse em modo de monitoramento. Ele irá monitorar e processar todas as regras normalmente, e irá escrever o que teria feito se estivesse no modo 'enforced' em seu /var/log/syslog. Mantenha os olhos nele!

Para preparar seu sistema para o modo 'enforced' do SELinux, talvez precise ajustar a configuração de alguns programas. Não se assuste e execute como root:
check-selinux-installation

O 'check-selinux-installation' não resolve os problemas (se existirem) mas te dá dicas do que fazer. Eu só tive que mexer na configuração do Postfix, que não é instalado por padrão no Debian Desktop.

Quando o 'check-selinux-installation' não reclamar mais de nada, edite novamente o seu /boot/grub/menu.lst para adicionar o 'enforced=1', além de manter o 'selinux=1', salve o arquivo e execute novamente:
touch /.autorelabel

Reinicie, e execute 'sestatus' novamente.

Tenha também em mente os comandos do pacote policycoreutils (esse pacote já estará instalado), tais como: audit2allow e audit2why. Eu não precisei deles, mas se você precisar ajustar a sua política de segurança eles serão uma mão na roda.

Leia mais a respeito em: http://wiki.debian.org/SELinux/