ProHoster > Blog > administração > Folha de dicas do SELinux para administradores de sistema: 42 respostas para perguntas importantes
Folha de dicas do SELinux para administradores de sistema: 42 respostas para perguntas importantes
A tradução do artigo foi elaborada especificamente para os alunos do curso "Administrador Linux".
Aqui você obterá respostas para questões importantes sobre a vida, o universo e tudo no Linux com segurança aprimorada.
“A verdade importante de que as coisas nem sempre são o que parecem é de conhecimento comum...”
-Douglas Adams, O Guia do Mochileiro das Galáxias
Segurança. Maior confiabilidade. Correspondência. Política. Administrador de sistema dos Quatro Cavaleiros do Apocalipse. Além das nossas tarefas diárias – monitorização, backup, implementação, configuração, atualização, etc. – também somos responsáveis pela segurança dos nossos sistemas. Mesmo aqueles sistemas em que o fornecedor terceirizado recomenda que desabilitemos a segurança aprimorada. Parece trabalho Ethan Hunt de “Missão: Impossível”.
Diante deste dilema, alguns administradores de sistema decidem tomar pílula azul, porque acham que nunca saberão a resposta para a grande questão da vida, do universo e tudo mais. E como todos sabemos, essa resposta é 42.
No espírito do Guia do Mochileiro das Galáxias, aqui estão 42 respostas para questões importantes sobre controle e uso. SELinux em seus sistemas.
1. SELinux é um sistema de controle de acesso forçado, o que significa que cada processo possui um rótulo. Cada arquivo, diretório e objeto do sistema também possui rótulos. As regras de política controlam o acesso entre processos e objetos marcados. O kernel impõe essas regras.
2. Os dois conceitos mais importantes são: Marcando — marcações (arquivos, processos, portas, etc.) e Aplicação de tipo (que isola processos uns dos outros com base em tipos).
3. Formato correto da etiqueta user:role:type:level (opcional).
4. O objetivo de fornecer segurança multinível (Segurança Multinível - MLS) é gerenciar processos (domínios) com base no nível de segurança dos dados que irão utilizar. Por exemplo, um processo secreto não pode ler dados ultrassecretos.
5. Garantindo segurança multicategoria (Segurança Multicategoria - MCS) protege processos semelhantes entre si (por exemplo, máquinas virtuais, mecanismos OpenShift, sandboxes SELinux, contêineres, etc.).
6. Opções do kernel para alterar os modos do SELinux na inicialização:
autorelabel=1 → faz com que o sistema execute a reetiquetagem
selinux=0 → o kernel não carrega a infraestrutura SELinux
enforcing=0 → carregando em modo permissivo
7. Se você precisar renomear todo o sistema:
# touch /.autorelabel
#reboot
Se a marcação do sistema contiver um grande número de erros, pode ser necessário inicializar no modo permissivo para que a observação seja bem-sucedida.
8. Para verificar se o SELinux está habilitado: # getenforce
9. Para ativar/desativar temporariamente o SELinux: # setenforce [1|0]
10. Verificando o status do SELinux: # sestatus
11. Arquivo de configuração: /etc/selinux/config
12. Como funciona o SELinux? Aqui está um exemplo de marcação para o servidor web Apache:
Diretório de configuração: /etc/httpd→httpd_config_t
Diretório do arquivo de log: /var/log/httpd → httpd_log_t
Diretório de conteúdo: /var/www/html → httpd_sys_content_t
Roteiro de lançamento: /usr/lib/systemd/system/httpd.service → httpd_unit_file_d
Processo: /usr/sbin/httpd -DFOREGROUND → httpd_t
Portas: 80/tcp, 443/tcp → httpd_t, http_port_t
Processo em execução no contexto httpd_t, pode interagir com um objeto rotulado httpd_something_t.
13. Muitos comandos aceitam um argumento -Z para visualizar, criar e alterar o contexto:
ls -Z
id -Z
ps -Z
netstat -Z
cp -Z
mkdir -Z
Os contextos são estabelecidos quando os arquivos são criados com base no contexto do diretório pai (com algumas exceções). Os RPMs podem estabelecer contextos como durante a instalação.
14. Existem quatro causas principais de erros do SELinux, que são descritas com mais detalhes nos pontos 15 a 21 abaixo:
Problemas de rotulagem
Por causa de algo que o SELinux precisa saber
Erro na política/aplicativo SELinux
Suas informações podem estar comprometidas
15.Problema de rotulagem: se seus arquivos estiverem em /srv/myweb estiverem marcados incorretamente, o acesso poderá ser negado. Aqui estão algumas maneiras de corrigir isso:
Se você conhece o rótulo: # semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?'
Se você conhece um arquivo com marcações equivalentes: # semanage fcontext -a -e /srv/myweb /var/www
Restaurando o contexto (para ambos os casos): # restorecon -vR /srv/myweb
16.Problema de rotulagem: se você mover o arquivo em vez de copiá-lo, o arquivo manterá seu contexto original. Para corrigir esse problema:
Altere o comando de contexto com o rótulo: # chcon -t httpd_system_content_t /var/www/html/index.html
Altere o comando de contexto com o rótulo do link: # chcon --reference /var/www/html/ /var/www/html/index.html
Restaure o contexto (para ambos os casos): # restorecon -vR /var/www/html/
17. Se SELinux você precisa conhecerque o HTTPD está escutando na porta 8585, diga ao SELinux:
# semanage port -a -t http_port_t -p tcp 8585
18.SELinux você precisa conhecer Valores booleanos que permitem que partes da política SELinux sejam alteradas em tempo de execução sem que o conhecimento da política SELinux seja sobrescrito. Por exemplo, se você deseja que o httpd envie e-mail, digite: # setsebool -P httpd_can_sendmail 1
19.SELinux você precisa conhecer valores lógicos para ativar/desativar as configurações do SELinux:
Para ver todos os valores booleanos: # getsebool -a
Para ver uma descrição de cada um: # semanage boolean -l
Para definir um valor booleano: # setsebool [_boolean_] [1|0]
Para uma instalação permanente, adicione -P. Por exemplo: # setsebool httpd_enable_ftp_server 1 -P
20. As políticas/aplicativos SELinux podem conter erros, incluindo:
Caminhos de código incomuns
Configurações
Redirecionando saída padrão
Vazamentos no descritor de arquivo
Memória executável
Bibliotecas mal construídas
Tickets abertos (não envie um relatório para o Bugzilla; o Bugzilla não tem SLA).
21.Suas informações podem estar comprometidasse você tiver domínios restritos tentando:
Carregar módulos do kernel
Desative o modo SELinux imposto
Escrever para etc_t/shadow_t
Alterar regras do iptables
22. Ferramentas SELinux para desenvolver módulos de política:
25. Se ocorrer um erro do SELinux, use o log setroubleshoot oferecendo diversas soluções possíveis.
Por exemplo, de journalctl:
Jun 14 19:41:07 web1 setroubleshoot: SELinux is preventing httpd from getattr access on the file /var/www/html/index.html. For complete message run: sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e
# sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e
SELinux is preventing httpd from getattr access on the file /var/www/html/index.html.
***** Plugin restorecon (99.5 confidence) suggests ************************
If you want to fix the label,
/var/www/html/index.html default label should be httpd_syscontent_t.
Then you can restorecon.
Do
# /sbin/restorecon -v /var/www/html/index.html
26. Registro: o SELinux registra informações em vários lugares:
27. Logging: procurando erros do SELinux no log de auditoria:
# ausearch -m AVC,USER_AVC,SELINUX_ERR -ts today
28. Para encontrar mensagens SELinux Access Vector Cache (AVC) para um serviço específico:
# ausearch -m avc -c httpd
29. Utilitário audit2allow coleta informações de logs de operações proibidas e, em seguida, gera regras de política de permissão do SELinux. Por exemplo:
Para criar uma descrição legível do motivo pelo qual o acesso foi negado: # audit2allow -w -a
Para visualizar uma regra de imposição de tipo que permite acesso negado: # audit2allow -a
Para criar um módulo personalizado: # audit2allow -a -M mypolicy
Opção -M cria um arquivo de aplicação de tipo (.te) com o nome especificado e compila a regra em um pacote de políticas (.pp): mypolicy.pp mypolicy.te
Para instalar um módulo personalizado: # semodule -i mypolicy.pp
30. Para configurar um processo separado (domínio) para funcionar em modo permissivo: # semanage permissive -a httpd_t
31. Se você não quiser mais que o domínio seja permissivo: # semanage permissive -d httpd_t
32. Para desativar todos os domínios permissivos: # semodule -d permissivedomains
33. Habilitando a política MLS SELinux: # yum install selinux-policy-mls
в /etc/selinux/config:
SELINUX=permissive
SELINUXTYPE=mls
Certifique-se de que o SELinux esteja rodando em modo permissivo: # setenforce 0
Use um roteiro fixfilespara garantir que os arquivos sejam renomeados na próxima reinicialização:
# fixfiles -F onboot # reboot
34. Crie um usuário com um intervalo MLS específico: # useradd -Z staff_u john
Usando o comando useradd, mapeie o novo usuário para um usuário SELinux existente (neste caso, staff_u).
35. Para visualizar o mapeamento entre usuários SELinux e Linux: # semanage login -l
36. Defina um intervalo específico para o usuário: # semanage login --modify --range s2:c100 john
37. Para corrigir o rótulo do diretório inicial do usuário (se necessário): # chcon -R -l s2:c100 /home/john
38. Para visualizar as categorias atuais: # chcat -L
39. Para alterar categorias ou começar a criar as suas próprias, edite o arquivo da seguinte forma:
/etc/selinux/_<selinuxtype>_/setrans.conf
40. Para executar um comando ou script em um arquivo, função e contexto de usuário específicos: