Se preparó una traducción del artículo específicamente para estudiantes del curso de Administrador de Linux .
Aquí obtendrá respuestas a preguntas importantes sobre la vida, el universo y todo eso en Linux con seguridad mejorada."La verdad importante es que las cosas no siempre son lo que parecen ser bien conocidas ..."
―Douglas Adams, La guía del autoestopista galáctico
Seguridad Mejora de la fiabilidad. Cumplimiento Política Cuatro jinetes del Apocalipsis del administrador de sistemas. Además de nuestras tareas diarias (monitoreo, respaldo, implementación, configuración, actualización, etc.), también somos responsables de la seguridad de nuestros sistemas. Incluso aquellos sistemas en los que un proveedor externo recomienda que desactivemos la seguridad mejorada. Esto es similar al trabajo de
Ethan Hunt de Mission Impossible.
Ante este dilema, algunos administradores de sistemas deciden tomar la
píldora azul porque creen que nunca sabrán la respuesta a la gran pregunta de la vida, el universo y todo eso. Y, como todos sabemos, esta respuesta es 42.
En el espíritu de la "Guía del autoestopista galáctico", aquí hay 42 respuestas a preguntas importantes sobre cómo administrar y usar
SELinux en sus sistemas.
1. SELinux es un sistema de control de acceso forzado, lo que significa que cada proceso tiene una etiqueta. Cada archivo, directorio y objeto del sistema también tiene etiquetas. Las reglas de política controlan el acceso entre procesos y objetos etiquetados. El núcleo hace cumplir estas reglas.
2. Los dos conceptos más importantes son:
etiquetado : etiquetado (archivos, procesos, puertos, etc.) y
aplicación de tipo (que aísla los procesos entre sí en función de los tipos).
3. El formato de etiqueta correcto es
user:role:type:level
(opcional).
4. El objetivo de proporcionar seguridad multinivel
(MLS ) es administrar procesos (dominios) en función del nivel de seguridad de los datos que utilizarán. Por ejemplo, un proceso secreto no puede leer datos de alto secreto.
5. Garantizar la
seguridad de múltiples categorías (MCS ) protege procesos similares entre sí (por ejemplo, máquinas virtuales, mecanismos OpenShift, cajas de arena SELinux, contenedores, etc.).
6. Parámetros del núcleo para cambiar los modos SELinux en el arranque:
autorelabel=1
obliga al sistema a comenzar a volver a marcarselinux=0
núcleo no carga la infraestructura SELinuxenforcing=0
carga en modo permisivo
7. Si necesita volver a marcar todo el sistema:
# touch /.autorelabel
#reboot
Si la marca del sistema contiene una gran cantidad de errores, es posible que deba iniciar en modo permisivo para que la marca tenga éxito.
8. Para verificar si SELinux está habilitado:
# getenforce
9. Para habilitar / deshabilitar temporalmente SELinux:
# setenforce [1|0]
10. Comprobando el estado de SELinux:
# sestatus
11. Archivo de configuración:
/etc/selinux/config
12. ¿Cómo funciona SELinux? Aquí hay un ejemplo de etiquetado para el servidor web Apache:
- Representación binaria:
/usr/sbin/httpd→httpd_exec_t
- Directorio de configuración:
/etc/httpd→httpd_config_t
- Directorio del archivo de registro:
/var/log/httpd → httpd_log_t
- Directorio de contenido:
/var/www/html → httpd_sys_content_t
- Lanzar script:
/usr/lib/systemd/system/httpd.service → httpd_unit_file_d
- Proceso:
/usr/sbin/httpd -DFOREGROUND → httpd_t
- Puertos:
80/tcp, 443/tcp → httpd_t, http_port_t
Un proceso que se ejecuta en el contexto de httpd_t
puede interactuar con un objeto etiquetado httpd_something_t
.13. Muchos comandos aceptan el argumento
-Z
para ver, crear y cambiar el contexto:
ls -Z
id -Z
ps -Z
netstat -Z
cp -Z
mkdir -Z
Los contextos se establecen cuando los archivos se crean en función del contexto de su directorio principal (con algunas excepciones). Los RPM pueden establecer contextos como durante la instalación.14. Existen cuatro causas principales de errores de SELinux, que se describen con más detalle en los párrafos 15-21 a continuación:
- Problemas de etiquetado
- Por algo que SELinux necesita saber
- Error en la política / aplicación de SELinux
- Su información puede verse comprometida.
15. Problema con el marcado : si sus archivos en
/srv/myweb
marcados incorrectamente, el acceso puede ser denegado. Aquí hay algunas formas de solucionar esto:
- Si conoces la etiqueta:
# semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?'
- Si conoce un archivo con marcas equivalentes:
# semanage fcontext -a -e /srv/myweb /var/www
- Habiendo restaurado el contexto (para ambos casos):
# restorecon -vR /srv/myweb
16. El problema con el marcado: si mueve el archivo en lugar de copiarlo, el archivo conservará su contexto original. Para solucionar este problema:
- Cambie el comando de contexto etiquetado:
# chcon -t httpd_system_content_t /var/www/html/index.html
- Cambie el comando de contexto con la etiqueta del enlace:
# chcon --reference /var/www/html/ /var/www/html/index.html
- Restaure el contexto (para ambos casos):
# restorecon -vR /var/www/html/
17. Si
SELinux necesita saber que HTTPD está escuchando en el puerto 8585, dígale a SELinux:
# semanage port -a -t http_port_t -p tcp 8585
18. SELinux necesita conocer los valores booleanos que le permiten cambiar partes de la política de SELinux en tiempo de ejecución sin conocimiento de reescribir las políticas de SELinux. Por ejemplo, si desea que httpd envíe un correo electrónico, ingrese:
# setsebool -P httpd_can_sendmail 1
19. SELinux necesita conocer los valores lógicos para habilitar / deshabilitar la configuración de SELinux:
- Para ver todos los valores booleanos:
# getsebool -a
- Para ver una descripción de cada uno:
# semanage boolean -l
- Para establecer un valor booleano:
# setsebool [_boolean_] [1|0]
- Para una instalación permanente, agregue
-P
. Por ejemplo: # setsebool httpd_enable_ftp_server 1 -P
20. Las políticas / aplicaciones de SELinux pueden contener errores, que incluyen:
- Caminos de código de fantasía
- Configuraciones
- Redireccionar stdout
- El descriptor de archivo tiene fugas
- Memoria ejecutable
- Bibliotecas mal construidas
Entradas abiertas (no envíe un informe a Bugzilla; no hay SLA en Bugzilla).
21. Su información puede verse comprometida si tiene dominios limitados que intentan:
- Descargar módulos del kernel
- Deshabilitar el modo SELinux forzado
- Escribe en
etc_t/shadow_t
- Cambiar las reglas de iptables
22. Herramientas SELinux para desarrollar módulos de políticas:
# yum -y install setroubleshoot setroubleshoot-server
Reinicie o reinicie
auditd
después de la instalación.
23. Uso
journalctl
para enumerar todos los registros asociados con
setroubleshoot
:
# journalctl -t setroubleshoot --since=14:20
24. Use
journalctl
para enumerar todos los registros asociados con una etiqueta SELinux particular. Por ejemplo:
# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0
25. Si se produce un error de SELinux, use el registro de
setroubleshoot
con algunas soluciones posibles.
Por ejemplo, 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: SELinux registra información en muchos lugares:
- / var / log / messages
- /var/log/audit/audit.log
- /var/lib/setroubleshoot/setroubleshoot_database.xml
27. Registro: busque errores de SELinux en el registro de auditoría:
# ausearch -m AVC,USER_AVC,SELINUX_ERR -ts today
28. Para buscar mensajes de SELinux Access Vector Cache (AVC) para un servicio específico:
# ausearch -m avc -c httpd
29. La utilidad
audit2allow
recopila información de registros de operaciones prohibidas y luego genera reglas de política de permisos de SELinux. Por ejemplo:
- Para crear una descripción legible del motivo del acceso denegado:
# audit2allow -w -a
- Para ver una regla de cumplimiento de tipo que permite el acceso denegado:
# audit2allow -a
- Para crear un módulo personalizado:
# audit2allow -a -M mypolicy
- La opción
-M
crea un archivo de cumplimiento de tipo (.te) con el nombre especificado y compila la regla en un 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 trabajar en modo permisivo:
# semanage permissive -a httpd_t
31. Si ya no desea que el dominio sea permisivo:
# semanage permissive -d httpd_t
32. Para deshabilitar todos los dominios permisivos:
# semodule -d permissivedomains
33. Habilitación de la política MLS SELinux:
# yum install selinux-policy-mls
/etc/selinux/config:
SELINUX=permissive
SELINUXTYPE=mls
# yum install selinux-policy-mls
/etc/selinux/config:
SELINUX=permissive
SELINUXTYPE=mls
Asegúrese de que SELinux esté en modo permisivo:
# setenforce 0
Use el script de archivos de
fixfiles
para asegurarse de que los archivos se vuelvan a marcar durante el próximo reinicio:
# fixfiles -F onboot # reboot
34. Cree un usuario con un rango MLS específico:
# useradd -Z staff_u john
Con el comando
useradd
,
staff_u
el nuevo usuario al usuario existente de SELinux (en este caso,
staff_u
).
35. Para ver la correspondencia entre los usuarios de SELinux y Linux:
# semanage login -l
36. Defina un rango específico para el usuario:
# semanage login --modify --range s2:c100 john
37. Para corregir la etiqueta en el directorio de inicio del usuario (si es necesario):
# chcon -R -l s2:c100 /home/john
38. Para ver las categorías actuales:
# chcat -L
39. Para cambiar las categorías o comenzar a crear las suyas, edite el archivo de la siguiente manera:
/etc/selinux/_<
selinuxtype >
_/setrans.conf
40. Para ejecutar un comando o script en un archivo, rol y contexto de usuario específicos:
# runcon -t initrc_t -r system_r -u user_u yourcommandhere
-t
contexto del archivo-r
contexto del rol-u
contexto de usuario
41. Contenedores que trabajan con SELinux deshabilitado:
- Podman:
# podman run --security-opt label=disable …
- Docker:
# docker run --security-opt label=disable …
42. Si necesita darle al contenedor acceso completo al sistema:
- Podman:
# podman run --privileged …
- Docker:
# docker run --privileged …
Y ahora ya sabes la respuesta. Por lo tanto, por favor: no entre en pánico y encienda SELinux.Referencias