
A tradução do artigo foi preparada para os alunos do curso
SELinux ou Security Enhanced Linux é um mecanismo de controle de acesso aprimorado, desenvolvido pela Agência de Segurança Nacional dos EUA (NSA) para prevenir invasões maliciosas. Ele implementa um modelo de controle de acesso mandatário (Mandatory Access Control, MAC) sobre o modelo de controle de acesso discricionário (Discretionary Access Control, DAC), ou seja, permissões de leitura, gravação e execução.
O SELinux possui três modos:
- Enforcing — negação de acesso com base em regras de política.
- Permissive — registro de ações que violariam a política, as quais seriam proibidas no modo enforcing.
- Disabled — desativação completa do SELinux.
Por padrão, as configurações estão em /etc/selinux/config
Mudança dos modos do SELinux
Para descobrir o modo atual, execute
$ getenforcePara alterar o modo para permissive, execute o seguinte comando
$ setenforce 0ou, para mudar do modo permissive para paraenforcing
, execute$ setenforce 1
Se você precisar desativar completamente o SELinux, isso pode ser feito apenas através do arquivo de configuração$ vi /etc/selinux/config
Para desativá-lo, altere a configuração SELINUX da seguinte forma:SELINUX=disabled
Configuração do SELinux permissive.
Cada arquivo e processo é marcado com um contexto SELinux, que contém informações adicionais, como usuário, função, tipo, etc. Se você estiver ativando o SELinux pela primeira vez, precisará configurar o contexto e as etiquetas. O processo de atribuição de etiquetas e contextos é conhecido como marcação. Para iniciar a marcação, no arquivo de configuração, alteramos o modo para$ vi /etc/selinux/config SELINUX=permissive permissiveApós definir o modo , crie um arquivo oculto vazio chamado
autorelabel$ touch /.autorelabel
e reinicie o computador$ init 6 permissive Nota: estamos usando o modo para para marcação, pois usar o modo
pode fazer o sistema falhar durante a reinicialização. paraNão se preocupe se a inicialização travar em algum arquivo, a marcação leva um tempo. Após a conclusão da marcação e a inicialização do seu sistema, você pode voltar ao arquivo de configuração e definir o modo
, execute, além de executar:
Agora você ativou o SELinux com sucesso no seu computador. Monitorando os logs.
Pode haver ocorrido algum erro durante a marcação ou durante o funcionamento do sistema. Para verificar se o seu SELinux está funcionando corretamente e se não está bloqueando o acesso a alguma porta, aplicativo, etc., é necessário observar os logs. O log do SELinux está em /var/log/audit/audit.log, mas você não precisa lê-lo completamente para encontrar erros. Pode-se usar a ferramenta audit2why para buscar erros. Execute o seguinte comando:
$ audit2why < /var/log/audit/audit.logComo resultado, você receberá uma lista de erros. Se não houver erros no log, nenhuma mensagem será exibida.
Configuração da política SELinux
A política SELinux é um conjunto de regras que orientam o mecanismo de segurança SELinux. A política define um conjunto de regras para um ambiente específico. Agora, vamos aprender como configurar políticas para permitir acesso a serviços proibidos.
1. Valores lógicos (switches)
Os switches (booleanos) permitem modificar partes da política em tempo de execução, sem a necessidade de criar novas políticas. Eles permitem fazer alterações sem reiniciar ou recompilar políticas SELinux.
Exemplo
Suponha que queremos permitir o acesso ao diretório pessoal do usuário via FTP para leitura e gravação, e já o compartilhamos, mas ao tentar acessar, não vemos nada. Isso ocorre porque a política SELinux proíbe o servidor FTP de ler e gravar no diretório pessoal do usuário. Precisamos alterar a política para que o servidor FTP possa acessar os diretórios pessoais. Vamos verificar se existem alguns switches para isso, executando
$ semanage boolean -lEste comando vai listar os switches disponíveis com seu estado atual (habilitado/on ou desabilitado/off) e uma descrição. Você pode restringir a pesquisa adicionando grep para encontrar resultados relacionados apenas ao ftp:
$ semanage boolean -l | grep ftpe você encontrará o seguinte
ftp_home_dir -> off Permitir que o ftp leia e escreva arquivos no diretório pessoal do usuárioEste switch está desabilitado, então nós o habilitaremos com setsebool ftp_home_dir on
Agora nosso daemon ftp poderá acessar o diretório pessoal do usuário.
Nota: você também pode obter uma lista de switches disponíveis sem descrição, executando getsebool -a
2. Rótulos e contexto
Esta é a maneira mais comum de implementar a política SELinux. Cada arquivo, pasta, processo e porta é rotulado com um contexto SELinux:
- Para arquivos e pastas, as etiquetas são armazenadas como atributos estendidos no sistema de arquivos e podem ser visualizadas pelo seguinte comando:
$ ls -Z /etc/httpd - Para processos e portas, a rotulagem é gerida pelo núcleo, e essas etiquetas podem ser vistas da seguinte forma:
processo
$ ps –auxZ | grep httpdporto
$ netstat -anpZ | grep httpdExemplo
Agora, vamos considerar um exemplo para entender melhor as etiquetas e o contexto. Suponha que temos servidor web, que em vez de um diretório /var/www/html/ использует /home/dan/html/. O SELinux considerará isso uma violação da política e você não poderá acessar suas páginas web. Isso ocorre porque não configuramos o contexto de segurança relacionado aos arquivos HTML. Para visualizar o contexto de segurança por padrão, utilize o seguinte comando:
$ ls –lz /var/www/html
-rw-r—r—. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/Aqui, recebemos httpd_sys_content_t como o contexto para arquivos HTML. Precisamos definir esse contexto de segurança para o nosso diretório atual, que agora tem o seguinte contexto:
-rw-r—r—. dan dan system_u:object_r:user_home_t:s0 /home/dan/html/Um comando alternativo para verificar o contexto de segurança de um arquivo ou diretório:
$ semanage fcontext -l | grep '/var/www'Também usaremos o semanage para alterar o contexto, após encontrarmos o contexto de segurança correto. Para mudar o contexto de /home/dan/html, execute os seguintes comandos:
$ semanage fcontext -a -t httpd_sys_content_t '/home/dan/html(\/.*)?'
$ semanage fcontext -l | grep '/home/dan/html'
/home/dan/html(\/.*)? all files system_u:object_r:httpd_sys_content_t:s0
$ restorecon -Rv /home/dan/htmlApós a alteração do contexto usando o semanage, o comando restorecon irá aplicar o contexto padrão para arquivos e diretórios. Nosso servidor web agora poderá ler arquivos da pasta /home/dan/html, uma vez que o contexto de segurança para essa pasta foi alterado para httpd_sys_content_t.
3. Criando Políticas Locais
Podem surgir situações em que os métodos acima não funcionam para você, e você recebe erros (avc/denial) no audit.log. Quando isso acontece, é necessário criar uma política local (Local policy). Todos os erros podem ser encontrados usando audit2why, conforme descrito acima.
Para corrigir erros, pode-se criar uma política local. Por exemplo, se estivermos recebendo um erro relacionado ao httpd (apache) ou ao smbd (samba), usamos grep para filtrar os erros e criamos uma política para eles:
apache
$ grep httpd_t /var/log/audit/audit.log | audit2allow -M http_policy
samba
$ grep smbd_t /var/log/audit/audit.log | audit2allow -M smb_policyAqui http_policy e smb_policy — são os nomes das políticas locais que criamos. Agora precisamos carregar essas políticas locais criadas na política SELinux atual. Isso pode ser feito da seguinte forma:
$ semodule –I http_policy.pp
$ semodule –I smb_policy.ppNossas políticas locais foram carregadas, e não devemos mais receber nenhum avc ou denial no audit.log.
Essa foi a minha tentativa de ajudá-lo a entender o SELinux. Espero que após ler este artigo você se sinta mais à vontade com o SELinux.
Fonte: habr.com
