A tradução do artigo foi preparada especialmente para os alunos do curso .

Aqui você encontrará respostas para questões importantes sobre a vida, o universo e tudo mais no Linux com segurança aprimorada.
«A verdade importante, que as coisas nem sempre são o que aparentam, é amplamente conhecida…»
―Douglas Adams, O Guia do Mochileiro das Galáxias
Segurança. Aumento da confiabilidade. Conformidade. Política. Os Quatro Cavaleiros do Apocalipse do administrador de sistemas. Além de nossas tarefas diárias — monitoramento, backup, implantação, configuração, atualização, etc. — também somos responsáveis pela segurança de nossos sistemas. Mesmo daquelas em que o provedor externo nos recomenda desativar a segurança reforçada. Isso é como o trabalho de “Missão Impossível”.
Diante desse dilema, alguns administradores de sistemas optam por tomar , porque pensam que nunca saberão a resposta à grande questão da vida, do universo e tudo mais. E, como todos sabemos, essa resposta é 42.
No espírito de “O Guia do Mochileiro das Galáxias”, aqui estão 42 respostas para perguntas importantes sobre gerenciamento e uso em seus sistemas.
1. O SELinux é um sistema de controle de acesso mandatório, o que significa que cada processo tem uma etiqueta (label). Cada arquivo, diretório e objeto do sistema também possui etiquetas. Regras de políticas gerenciam o acesso entre processos e objetos etiquetados. O núcleo garante a conformidade com essas regras.
2. As duas concepções mais importantes são: Etiquetagem — rotulagem (arquivos, processos, portas, etc.) e Aplicação de tipo (que isola processos uns dos outros com base em tipos).
3. O formato correto da etiqueta user:role:type:level (opcional).
4. O objetivo de garantir segurança multinível (Multi-Level Security — MLS) é gerenciar processos (domínios) com base no nível de segurança dos dados que eles utilizarão. Por exemplo, um processo secreto não pode ler dados ultra secretos.
5. Garantir segurança multicategorial (Multi-Category Security — MCS) protege processos similares uns dos outros (por exemplo, máquinas virtuais, mecanismos OpenShift, sandboxes do SELinux, contêineres, etc.).
6. Parâmetros do núcleo para alterar modos do SELinux durante a inicialização:
autorelabel=1→ faz o sistema iniciar a reetiquetagemselinux=0→ o núcleo não carrega a infraestrutura do SELinuxenforcing=0→ inicializa no modo permissivo
7. Se você precisa reclassificar 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 reclassificação seja bem-sucedida.
8. Para verificar se o SELinux está ativado: # getenforce
9. Para habilitar/desabilitar temporariamente o SELinux: # setenforce [1|0]
10. Verificação do status do SELinux: # sestatus
11. Arquivo de configuração: /etc/selinux/config
12. Como o SELinux funciona? Aqui está um exemplo de marcação para o servidor web Apache:
- Representação binária:
/usr/sbin/httpd→httpd_exec_t - Diretório de configuração:
/etc/httpd→httpd_config_t - Diretório de arquivos de log:
/var/log/httpd → httpd_log_t - Diretório de conteúdo:
/var/www/html → httpd_sys_content_t - Script de inicialização:
/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
O processo executado no contexto httpd_t, pode interagir com o objeto rotulado httpd_something_t.
13. Muitos comandos aceitam o argumento -Z para visualizar, criar e modificar o contexto:
ls -Zid -Zps -Znetstat -Zcp -Zmkdir -Z
Os contextos são estabelecidos quando os arquivos são criados com base no contexto de seu diretório pai (com algumas exceções). RPM pode definir contextos tanto durante a instalação.
14. Existem quatro principais razões para erros do SELinux, que são descritas em mais detalhes nos itens 15-21 abaixo:
- Problemas de marcação
- Devido a algo que o SELinux precisa saber
- Erro na política/aplicativo SELinux
- Suas informações podem estar comprometidas
15. Problema de marcação: se seus arquivos em /srv/myweb estiverem marcados incorretamente, o acesso pode ser negado. Aqui estão algumas maneiras de corrigir isso:
- Se você souber a etiqueta:
# semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?' - Se você conhecer um arquivo com uma marcação equivalente:
# semanage fcontext -a -e /srv/myweb /var/www - Restaurando o contexto (para ambos os casos):
# restorecon -vR /srv/myweb
16. Problema de marcação: se você mover um arquivo em vez de copiá-lo, o arquivo manterá seu contexto original. Para corrigir esse problema:
- Altere o comando de contexto com etiqueta:
# chcon -t httpd_system_content_t /var/www/html/index.html - Altere o comando de contexto com a etiqueta de referência:
# chcon --reference /var/www/html/ /var/www/html/index.html - Restaure o contexto (para ambos os casos):
# restorecon -vR /var/www/html/
17. Se O SELinux precisa saber, que o HTTPD está ouvindo a porta 8585, informe ao SELinux:
# semanage port -a -t http_port_t -p tcp 8585
18. O SELinux precisa saber valores lógicos que permitem modificar partes da política do SELinux em tempo de execução sem precisar reescrever a política do SELinux. Por exemplo, se você deseja que o httpd envie e-mails, insira: # setsebool -P httpd_can_sendmail 1
19. O SELinux precisa saber valores lógicos para habilitar/desabilitar configurações do SELinux:
- Para ver todos os valores lógicos:
# getsebool -a - Para ver a descrição de cada um:
# semanage boolean -l - Para definir um valor lógico:
# setsebool [_boolean_] [1|0] - Para uma configuração permanente, adicione
-P. Por exemplo:# setsebool httpd_enable_ftp_server 1 -P
20. As políticas/aplicações SELinux podem conter erros, incluindo:
- Caminhos de código incomuns
- Configurações
- Redirecionamento do stdout
- Vazamentos de descritores de arquivo
- Memória executável
- Bibliotecas mal construídas
Abra tickets (não envie relatórios para o Bugzilla; não há SLA no Bugzilla).
21. Suas informações podem estar comprometidas, se você tiver domínios limitados tentando:
- Carregar módulos do kernel
- Desativar o modo enforcing do SELinux
- Escrever em
etc_t/shadow_t - Modificar regras do iptables
22. Ferramentas SELinux para desenvolvimento de políticas:
# yum -y install setroubleshoot setroubleshoot-server
Reinicie ou reinicie auditd após a instalação.
23. Use
journalctl para listar todos os logs relacionados a setroubleshoot:
# journalctl -t setroubleshoot --since=14:20
24. Use journalctl para listar todos os logs relacionados a uma determinada etiqueta SELinux. Por exemplo:
# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0
25. Quando ocorrer um erro SELinux, use o log setroubleshoot com sugestões de possíveis soluções.
Por exemplo, a partir de journalctl:
Jun 14 19:41:07 web1 setroubleshoot: SELinux está impedindo o httpd de acessar o atributo do arquivo /var/www/html/index.html. Para a mensagem completa, execute: sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e
# sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e
SELinux está impedindo o httpd de acessar o atributo do arquivo /var/www/html/index.html.
***** O plugin restorecon (99,5 de confiança) sugere ************************
Se você quiser corrigir o rótulo,
O rótulo padrão de /var/www/html/index.html deve ser httpd_syscontent_t.
Então você pode restaurar o rótulo.
Faça
# /sbin/restorecon -v /var/www/html/index.html26. Registro: o SELinux registra informações em muitos lugares:
- /var/log/messages
- /var/log/audit/audit.log
- /var/lib/setroubleshoot/setroubleshoot_database.xml
27. Registro: procurar erros do SELinux no log de auditoria:
# ausearch -m AVC,USER_AVC,SELINUX_ERR -ts today
28. Para encontrar mensagens do SELinux Access Vector Cache (AVC) para um determinado serviço:
# ausearch -m avc -c httpd
29. Utilitário audit2allow coleta informações dos logs de operações negadas e, em seguida, gera regras de permissões do SELinux. Por exemplo:
- Para criar uma descrição legível da razão da negação de acesso:
# audit2allow -w -a - Para visualizar a regra de aplicação forçada de tipos que permite o acesso negado:
# audit2allow -a - Para criar um módulo personalizado:
# audit2allow -a -M mypolicy - Opção
-Mcria um arquivo de aplicação forçada de tipo (.te) com o nome especificado e compila a regra em um pacote de política (.pp):mypolicy.pp mypolicy.te - Para instalar um módulo personalizado:
# semodule -i mypolicy.pp
30. Para configurar um processo (domínio) separado para operar 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. Ativação da política MLS do SELinux: # yum install selinux-policy-mls
em /etc/selinux/config:
SELINUX=permissive
SELINUXTYPE=mls
Certifique-se de que o SELinux está operando em modo permissivo: # setenforce 0
Use o script fixfiles, para garantir que os arquivos sejam re-marcados na próxima reinicialização:
# fixfiles -F onboot # reboot
34. Criar um usuário com um intervalo específico de MLS: # useradd -Z staff_u john
Usando o comando useradd, associe um novo usuário com um usuário existente do SELinux (neste caso, staff_u).
35. Para visualizar a correspondência entre usuários do SELinux e do 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 no diretório home 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 suas próprias, modifique o arquivo da seguinte forma:
\/etc\/selinux\/_<selinuxtype>_\/setrans.conf
40. Para executar um comando ou script em um arquivo específico, contexto de função e usuário:
# runcon -t initrc_t -r system_r -u user_u yourcommandhere
-tcontexto do arquivo-rcontexto de função-ucontexto do usuário
41. Contêineres operando com SELinux desativado:
- Podman:
# podman run --security-opt label=disable … - Docker:
# docker run --security-opt label=disable …
42. Se você precisar fornecer ao contêiner acesso total ao sistema:
- Podman:
# podman run --privileged … - Docker:
# docker run --privileged …
E agora você já sabe a resposta. Portanto, por favor: não entre em pânico e ative o SELinux.
Links:
- by
- por Dan Walsh
- by
- by
Fonte: habr.com
