Durante años, SELinux ha ayudado a prevenir daños a los sistemas por ataques de día cero. Esta herramienta también es útil para el aislamiento de máquinas virtuales y es necesaria para el aislamiento de contenedores. Sin embargo, SELinux todavía está comúnmente deshabilitado o colocado en modo permisivo.
targeted
de SELinux La política está diseñada para aislar varios dominios de procesos y, al mismo tiempo, permitir la interacción entre servicios según sea necesario. Solo se necesitan unos pocos comandos para que un administrador configure un sistema para usar esta política con sus aplicaciones personalizadas, manteniendo SELinux en modo de cumplimiento.
[Obtenga más información sobre el uso de la documentación de políticas de SELinux aquí.]
El semanage
El comando se utiliza para ajustar contextos de archivos, contextos de puertos y valores booleanos. Si todavía hay un conflicto con un proceso en particular, ese dominio puede colocarse en modo permisivo hasta que se pueda completar una investigación adicional. Esto deja el resto del sistema protegido en modo de cumplimiento.
Con solo los cuatro semanage
comandos a continuación, la mayoría de los sistemas se pueden configurar para que sus aplicaciones personalizadas se ejecuten con SELinux en modo de cumplimiento.
El semanage boolean
comando
El targeted
la política incluye muchos valores booleanos para habilitar y deshabilitar conjuntos de allow
reglas, asumiendo que los servicios tienen múltiples casos de uso y se ejecutan de manera diferente en cada entorno. El uso de booleanos permite diferentes conjuntos de reglas para diferentes casos de uso:un servidor web en un entorno académico puede necesitar permitir que los estudiantes publiquen contenido desde sus directorios de inicio, mientras que un sitio corporativo público puede necesitar rechazar el acceso a cualquier usuario. directorios, limite los ejecutables SSI y muestre los datos almacenados en un recurso compartido NFS.
El httpd_selinux
La página de manual describe el uso de todos los booleanos provistos para el httpd
dominio así como muestra setsebool
comandos para habilitar persistentemente cada booleano. Una forma alternativa (y más nueva) de ver y cambiar estos valores booleanos es con semanage boolean
comando.
El -l
La opción enumera todos los valores booleanos en la política cargada. A continuación, puede filtrar por una palabra clave:
$ sudo semanage boolean -l | grep httpd
httpd_anon_write (off , off) Allow httpd to anon write
httpd_builtin_scripting (on , on) Allow httpd to builtin scripting
httpd_can_check_spam (off , off) Allow httpd to can check spam
httpd_can_connect_ftp (off , off) Allow httpd to can connect ftp
httpd_can_connect_ldap (off , off) Allow httpd to can connect ldap
Esta salida incluye el nombre del booleano, el estado actual y persistente del booleano y una breve descripción de cómo se usa el booleano.
Para cambiar el booleano con semanage
usar:
$ sudo semanage boolean -m --off httpd_ssi_exec
También puede enumerar los valores booleanos personalizados localmente agregando -C
opción:
$ sudo semanage boolean -l -C
SELinux boolean State Default Description
httpd_ssi_exec (off , off) Allow httpd to ssi exec
virt_sandbox_use_all_caps (on , on) Allow virt to sandbox use all caps
virt_use_nfs (on , on) Allow virt to use nfs
Las páginas del manual para cada dominio de SELinux tienen descripciones de todos los valores booleanos provistos para esos dominios. Para obtener más opciones al modificar los valores booleanos de SELinux con semanage
, vea el semanage-boolean
página man.
Puede automatizar estos semanage
comandos con sus funciones y módulos de Ansible relacionados. El módulo Ansible para semanage boolean
es seboolean
. Este y los módulos relacionados que se describen a continuación son utilizados por los roles proporcionados por linux-system-roles
paquete en Fedora o rhel-system-roles
paquete en Red Hat Enterprise Linux. El paquete de Red Hat está disponible a partir de Red Hat Enterprise Linux 7.4 y se puede encontrar en el repositorio "Extras".
El semanage fcontext
comando
El targeted
La política proporciona información de contexto de archivo para el archivo de la aplicación, incluidos archivos de datos, registro y tiempo de ejecución, ubicaciones alternativas comunes y predeterminadas. Estas definiciones de contexto son las asignaciones que el restorecon
El comando se usa para verificar o cambiar el contexto del archivo.
El semanage fcontext
El comando se puede usar para enumerar definiciones de contexto de archivo y agregar más. El -l
La opción muestra todos los contextos en la política cargada. A continuación, puede filtrar por una palabra clave:
$ sudo semanage fcontext -l | grep sshd
/etc/rc\.d/init\.d/sshd regular file system_u:object_r:sshd_initrc_exec_t:s0
/etc/ssh/primes regular file system_u:object_r:sshd_key_t:s0
/etc/ssh/ssh_host.*_key regular file system_u:object_r:sshd_key_t:s0
/etc/ssh/ssh_host.*_key\.pub regular file system_u:object_r:sshd_key_t:s0
/usr/lib/systemd/system/sshd-keygen.* regular file system_u:object_r:sshd_keygen_unit_file_t:s0
Esta salida incluye el patrón de expresión regular para los nombres de archivo de destino, el tipo de archivo y el contexto de archivo para asignar al nombre de archivo coincidente.
La página man relacionada, en este caso man sshd_selinux
, incluye una lista de archivos administrados y una descripción de cada contexto de archivo disponible para el dominio. También hay comandos de muestra para especificar y aplicar etiquetas alternativas.
Por ejemplo, si desea almacenar el sshd
host keys en un subdirectorio separado, puede ejecutar los siguientes dos comandos:
$ sudo semanage fcontext -a -t sshd_key_t '/etc/ssh/keys(/.*)?'
$ sudo restorecon -r /etc/ssh/keys
En este ejemplo, la expresión regular coincidirá con el directorio /etc/ssh/keys
así como cualquier subdirectorio y archivo que se encuentre en /etc/ssh/keys
directorio.
Al igual que los booleanos, puede ver cualquier contexto de archivo personalizado localmente agregando -C
opción:
$ sudo semanage fcontext -l -C
SELinux fcontext type Context
/usr/share/dnfdaemon/dnfdaemon-system all files system_u:object_r:rpm_exec_t:s0
Para obtener más opciones al modificar contextos de archivos de SELinux, consulte semanage-fcontext
página man.
Puede automatizar el semanage fcontext
comando con Ansible sefcontext
módulo. La restorecon
el comando aún deberá ejecutarse con un módulo de comando separado. Ver ansible-doc sefcontext
por ejemplo. El selinux
el rol del sistema incluye ambas tareas.
El semanage port
comando
Además de los contextos de archivo, el targeted
la política también define contextos de puerto. Al igual que con los contextos booleanos y de archivo, las páginas del manual específicas del dominio enumeran los tipos definidos y también pueden mostrar los comandos de muestra necesarios para ejecutar un servicio en un puerto diferente.
Ver los contextos del puerto con:
$ sudo semanage port -l | grep http
http_cache_port_t tcp 8080, 8118, 8123, 10001-10010
http_cache_port_t udp 3130
http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t tcp 5988
pegasus_https_port_t tcp 5989
Al ejecutar un servicio en un puerto personalizado, debe cambiar el archivo de configuración del servicio y también agregar una definición de puerto SELinux. Sin la definición del puerto, el servicio no podrá iniciarse y registrará un error similar a "no se puede vincular al puerto".
Agregue una definición de puerto con:
$ sudo semanage port -a -t http_cache_port_t -p tcp 8010
Al especificar el puerto, debe incluir tanto el protocolo como el número de puerto. Además, solo se puede definir un tipo para cada protocolo y número de puerto. Para obtener más opciones al modificar los contextos de puerto de SELinux, consulte semanage-port
página man.
Puede automatizar el semanage-port
comando con el seport
Módulo Ansible.
El semanage permissive
comando
En lugar de mover todo el sistema al modo permisivo, o peor aún, deshabilitar SELinux por completo, puede colocar un solo dominio en modo permisivo. Un dominio en modo permisivo permite todas las acciones mientras sigue registrando cualquier denegación. Los otros dominios del sistema permanecen en modo de aplicación, que registra y deniega acciones que no están específicamente permitidas.
Las páginas del manual para los dominios comunes enumeran los tipos de SELinux que se pueden colocar en modo permisivo.
Para listar cualquier dominio actualmente en modo permisivo, use:
$ sudo semanage permissive -l
En la instalación inicial, es poco probable que haya dominios en modo permisivo.
Para colocar un dominio en modo permisivo, use:
$ sudo semanage permissive -a squid_t
El -d
La opción elimina un dominio permisivo y, por lo tanto, vuelve a habilitar el modo de cumplimiento para ese dominio.
Para obtener más opciones al colocar dominios en modo permisivo, consulte el semanage-permissive
página man.
El selinux_permissive
de Ansible El módulo se puede usar para colocar un dominio en modo permisivo. Ver ansible-doc selinux_permissive
para ejemplos.
Los archivos
Todos los semanage
Comandos que agregan o modifican la información del almacén de configuración de la política de destino en *local
archivos bajo el /etc/selinux/targeted
árbol de directorios. Todos estos archivos tienen advertencias de que no deben editarse directamente, pero se utilizan para conservar la personalización. Cuando se actualizan los paquetes de políticas y SELinux, estos archivos de personalización locales se dejan en su lugar y se aplican a la política actualizada.