GNU/Linux >> Tutoriales Linux >  >> Linux

Cuatro comandos semanage para mantener SELinux en modo de aplicación

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.


Linux
  1. Establecer el modo de aplicación de SELinux con Ansible

  2. 25 comandos esenciales de Vim para navegar y editar

  3. Cómo deshabilitar o establecer SELinux en modo permisivo

  4. Comandos del editor de Mac Terminal vi[m]

  5. SElinux:¿Cómo cambiar al modo permisivo sin reiniciar?

Cómo deshabilitar o apagar SELinux en Rocky Linux 8

Comandos básicos de Vim que todo usuario de Linux debe conocer [Hoja de referencia gratuita incluida]

Todos los comandos básicos de SELINUX que necesita saber

El modo de rescate

Cuatro comandos de Linux completamente inútiles

Comandos vim básicos (hoja de trucos)