ProHoster > Blog > Administración > Folla de trucos de SELinux para administradores de sistemas: 42 respostas a preguntas importantes
Folla de trucos de SELinux para administradores de sistemas: 42 respostas a preguntas importantes
A tradución do artigo foi elaborada expresamente para o alumnado do curso "Administrador Linux".
Aquí obterás respostas a preguntas importantes sobre a vida, o universo e todo en Linux cunha seguridade mellorada.
"A verdade importante de que as cousas non sempre son o que parecen é de coñecemento común..."
-Douglas Adams, A guía do autoestopista da galaxia
Seguridade. Aumento da fiabilidade. Correspondencia. Política. Administrador do sistema Catro cabaleiros do Apocalipse. Ademais das nosas tarefas diarias -seguimento, copia de seguridade, implantación, configuración, actualización, etc.- tamén somos responsables da seguridade dos nosos sistemas. Incluso aqueles sistemas nos que o provedor externo recomenda que desactivemos a seguridade mellorada. Parece traballo Ethan Hunt de "Misión: imposible".
Ante este dilema, algúns administradores do sistema deciden tomar pastilla azul, porque pensan que nunca coñecerán a resposta á gran pregunta da vida, o universo e todo iso. E como todos sabemos, esa resposta é 42.
No espírito da Guía do autoestopista da galaxia, aquí tes 42 respostas a preguntas importantes sobre control e uso. SELinux nos seus sistemas.
1. SELinux é un sistema de control de acceso forzado, o que significa que cada proceso ten unha etiqueta. Cada ficheiro, directorio e obxecto do sistema tamén ten etiquetas. As regras de políticas controlan o acceso entre os procesos e obxectos etiquetados. O núcleo fai cumprir estas regras.
2. Os dous conceptos máis importantes son: Etiquetado — marcas (arquivos, procesos, portos, etc.) e Tipo de execución (que illa os procesos entre si en función dos tipos).
3. Formato de etiqueta correcto user:role:type:level (опционально).
4. O propósito de proporcionar seguridade multinivel (Seguridade multinivel - MLS) é xestionar procesos (dominios) en función do nivel de seguridade dos datos que utilizarán. Por exemplo, un proceso secreto non pode ler datos de alto segredo.
5. Garantir a seguridade de varias categorías (Seguridade multicategoría - MCS) protexe procesos similares entre si (por exemplo, máquinas virtuais, motores OpenShift, sandbox SELinux, contedores, etc.).
6. Opcións do núcleo para cambiar os modos de SELinux no arranque:
autorelabel=1 → заставляет систему запускать перемаркировку
selinux=0 → o núcleo non carga a infraestrutura SELinux
enforcing=0 → cargando en modo permisivo
7. Se precisa reetiquetar todo o sistema:
# touch /.autorelabel
#reboot
Se a marcación do sistema contén un gran número de erros, é posible que necesites arrancar en modo permisivo para que a observación teña éxito.
8. Para comprobar se SELinux está activado: # getenforce
9. Para activar/desactivar temporalmente SELinux: # setenforce [1|0]
10. Comprobando o estado de SELinux: # sestatus
11. Ficheiro de configuración: /etc/selinux/config
12. Como funciona SELinux? Aquí tes un exemplo de marcado para o servidor web Apache:
Directorio de configuración: /etc/httpd→httpd_config_t
Directorio do ficheiro de rexistro: /var/log/httpd → httpd_log_t
Directorio de contidos: /var/www/html → httpd_sys_content_t
Script de lanzamento: /usr/lib/systemd/system/httpd.service → httpd_unit_file_d
Proceso: /usr/sbin/httpd -DFOREGROUND → httpd_t
Portos: 80/tcp, 443/tcp → httpd_t, http_port_t
Процесс, запущенный в контексте httpd_t, pode interactuar cun obxecto etiquetado httpd_something_t.
13. Moitos comandos aceptan un argumento -Z para ver, crear e cambiar o contexto:
ls -Z
id -Z
ps -Z
netstat -Z
cp -Z
mkdir -Z
Os contextos establécense cando se crean ficheiros en función do contexto do seu directorio principal (con algunhas excepcións). Os RPM poden establecer contextos como durante a instalación.
14. Hai catro causas principais dos erros de SELinux, que se describen con máis detalle nos puntos 15-21 a continuación:
Problemas de etiquetaxe
Por algo que SELinux necesita saber
Erro na política/aplicación de SELinux
A túa información pode estar comprometida
15.Problema de etiquetaxe: se os seus ficheiros están en /srv/myweb están marcados incorrectamente, o acceso pode ser denegado. Aquí tes algunhas formas de solucionar isto:
Se coñeces a etiqueta: # semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?'
Se coñeces un ficheiro con marcas equivalentes: # semanage fcontext -a -e /srv/myweb /var/www
Restauración do contexto (para ambos os casos): # restorecon -vR /srv/myweb
16.Problema de etiquetaxe: se moves o ficheiro en lugar de copialo, o ficheiro conservará o seu contexto orixinal. Para solucionar este problema:
Cambia o comando de contexto coa etiqueta: # chcon -t httpd_system_content_t /var/www/html/index.html
Cambia o comando de contexto coa etiqueta da ligazón: # chcon --reference /var/www/html/ /var/www/html/index.html
Restaura o contexto (en ambos casos): # restorecon -vR /var/www/html/
17. Se SELinux que necesitas saberque HTTPD está escoitando no porto 8585, diga a SELinux:
# semanage port -a -t http_port_t -p tcp 8585
18.SELinux que necesitas saber Valores booleanos que permiten cambiar partes da política de SELinux en tempo de execución sen que se sobrescriba a política de SELinux. Por exemplo, se desexa que httpd envíe correo electrónico, introduza: # setsebool -P httpd_can_sendmail 1
19.SELinux que necesitas saber valores lóxicos para activar/desactivar a configuración de SELinux:
Para ver todos os valores booleanos: # getsebool -a
Para ver unha descrición de cada un: # semanage boolean -l
Para establecer un valor booleano: # setsebool [_boolean_] [1|0]
Para unha instalación permanente, engade -P. Por exemplo: # setsebool httpd_enable_ftp_server 1 -P
20. As políticas/aplicacións de SELinux poden conter erros, incluíndo:
Camiños de código pouco habituais
Configuracións
Redirixindo stdout
Fugas de descritores de ficheiros
Memoria executable
Bibliotecas mal construídas
Tickets abertos (non envíe un informe a Bugzilla; Bugzilla non ten SLA).
21.A túa información pode estar comprometidase tes dominios restrinxidos intentando:
Загрузить модули ядра
Desactivar o modo SELinux forzado
Escribe a etc_t/shadow_t
Cambiar as regras de iptables
22. Ferramentas de SELinux para desenvolver módulos de políticas:
25. Se se produce un erro de SELinux, use o rexistro setroubleshoot ofrecendo varias solucións posibles.
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. Rexistro: SELinux rexistra información en moitos lugares:
27. Rexistro: busca de erros de SELinux no rexistro de auditoría:
# ausearch -m AVC,USER_AVC,SELINUX_ERR -ts today
28. Para atopar mensaxes de caché vectorial de acceso (AVC) de SELinux para un servizo específico:
# ausearch -m avc -c httpd
29. Utilidade audit2allow recolle información dos rexistros de operacións prohibidas e despois xera regras de política de permisos de SELinux. Por exemplo:
Para crear unha descrición lexible por humanos de por que se denega o acceso: # audit2allow -w -a
Para ver unha regra de aplicación de tipos que permite o acceso denegado: # audit2allow -a
Para crear un módulo personalizado: # audit2allow -a -M mypolicy
Opción -M crea un ficheiro de aplicación de tipo (.te) co nome especificado e compila a regra nun paquete de políticas (.pp): mypolicy.pp mypolicy.te
Para instalar un módulo personalizado: # semodule -i mypolicy.pp
30. Para configurar un proceso separado (dominio) para que funcione en modo permisivo: # semanage permissive -a httpd_t
31. Se xa non queres que o dominio sexa permisivo: # semanage permissive -d httpd_t
32. Para desactivar todos os dominios permisivos: # semodule -d permissivedomains
33. Activación da política MLS SELinux: # yum install selinux-policy-mls
в /etc/selinux/config:
SELINUX=permissive
SELINUXTYPE=mls
Asegúrate de que SELinux estea funcionando en modo permisivo: # setenforce 0
Используйте скрипт fixfiles, чтобы гарантировать, что файлы будут перемаркированы при следующей перезагрузке:
# fixfiles -F onboot # reboot
34. Crea un usuario cun rango MLS específico: # useradd -Z staff_u john
Usando o comando useradd, mapee o novo usuario a un usuario SELinux existente (neste caso, staff_u).
35. Para ver o mapeo entre usuarios de SELinux e Linux: # semanage login -l
36. Defina un rango específico para o usuario: # semanage login --modify --range s2:c100 john
37. Para corrixir a etiqueta do directorio de inicio do usuario (se é necesario): # chcon -R -l s2:c100 /home/john
38. Для просмотра текущих категорий: # chcat -L
39. Para cambiar de categoría ou comezar a crear a túa, edita o ficheiro do seguinte xeito:
/etc/selinux/_<selinuxtype>_/setrans.conf
40. Para executar un comando ou un script nun ficheiro, rol e contexto de usuario específicos: