Cómo utilizar el comando Semanage para la política de SELinux
Semanage es una herramienta que se utiliza para configurar ciertos elementos de la política de SELinux sin modificar o recompilar las fuentes de la política. Esto incluye mapear nombres de usuario de Linux a identidades de usuario de SELinux y mapeos de contexto de seguridad para objetos como puertos de red, interfaces y hosts.
De forma predeterminada, SELinux solo permite que los servicios conocidos se unan a puertos conocidos. Si queremos modificar un servicio para usar un puerto no predeterminado, necesitaremos modificar el tipo de puerto con el comando semanage.
En este artículo, exploraremos el comando semanage y aprenderemos cómo enumerar, crear / agregar y eliminar tipos de puertos en distribuciones basadas en RPM como CentOS y RedHat.
Listado de puertos con Semanage
El comando básico para listar todos los puertos es
# semanage port -l SELinux Port Type Proto Port Number afs3_callback_port_t tcp 7001 afs3_callback_port_t udp 7001 afs_bos_port_t udp 7007 afs_fs_port_t tcp 2040 afs_fs_port_t udp 7000, 7005 afs_ka_port_t udp 7004 afs_pt_port_t tcp 7002 afs_pt_port_t udp 7002 ...
Para enumerar los números de puerto de un puerto específico como http, use este comando:
# semanage port -l | grep -w http_port_t http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000
Del mismo modo para mysqld
# semanage port -l | grep -w mysqld_port_t
mysqld_port_t tcp 1186, 3306, 63132-63164
Para encontrar nombres de puertos con un número de puerto específico, use este comando:
# semanage port -l | grep 53
apertus_ldp_port_t tcp 539 apertus_ldp_port_t udp 539 dns_port_t tcp 53 dns_port_t udp 53
Crear o agregar puertos con Semanage
En este ejemplo, crearemos un nuevo puerto para http y lo asignaremos al puerto tcp 2222. El -a
opción es agregar un nuevo puerto, la -t
La opción especifica el tipo SELinux y la -p
La opción es especificar el protocolo a utilizar (en este caso tcp).
# semanage port -a -t http_port_t -p tcp 2222
para ver el puerto recién creado, usamos el comando lista de comandos con el -C
opción para mostrar solo personalizaciones.
# semanage port -lC
Tipo de puerto SELinux Número de puerto proto
http_port_t tcp 2222
Para asignar un rango de números de puertos a un puerto específico, use el comando:
# semanage port -a -t http_port_t -p tcp 2223-2225
Ahora, podemos ver el rango de puertos aquí.
# semanage port -lC SELinux Port Type Proto Port Number http_port_t tcp 2223-2225
Si intenta agregar otra entrada con los mismos valores que utilizó antes, obtiene el error:
ValueError: Port tcp/2222 already defined
Para anular un puerto existente que ya fue creado, use el -m
opción para modificar:
# semanage port -m -t unreserved_port_t -p tcp 2222
Ahora, si enumeramos todos los puertos, veremos el cambio.
# semanage port -lC SELinux Port Type Proto Port Number unreserved_port_t tcp 2222
Eliminar puertos con Semanage
Usamos la opción -d
para eliminar un registro de puerto. Para eliminar unreserved_port_t en el puerto tcp 2222, usamos el comando:
# semanage port -d -t unreserved_port_t -p tcp 2222
Para eliminar un rango de puertos, use el comando:
# semanage port -d -t http_port_t -p tcp 2223-2225
Si ejecuta el comando de lista personalizada y no devuelve nada, la entrada se ha eliminado.
Usando Semanage-Permmissive
Semanage permissive se utiliza para agregar o eliminar módulos permisivos de la Política SELinux.
Para enumerar todos los módulos permisivos, use el -l
opción:
# semanage permissive -l Customized Permissive Types Builtin Permissive Types sanlk_resetd_t hsqldb_t systemd_hwdb_t blkmapd_t ipmievd_t targetd_t
Para crear httpd_t un dominio permisivo, use el -a
opción:
# semanage permissive -a httpd_t
Ahora, revisemos todos los módulos permisivos:
# semanage permissive -l Customized Permissive Types httpd_t Builtin Permissive Types sanlk_resetd_t hsqldb_t systemd_hwdb_t blkmapd_t ipmievd_t
Para eliminar un tipo permisivo que acabamos de crear, usamos el -d
opción.
# semanage permissive -d httpd_t libsemanage.semanage_direct_remove_key: Removing last permissive_httpd_t module (no other permissive_httpd_t module exists at another priority).
En este artículo, vimos cómo listar, agregar y eliminar puertos usando la herramienta semanage para distribuciones de Linux basadas en RPM. Si su sistema tiene una GUI, puede instalar el policycoreutils-gui paquete a través de yum y luego ejecutar system-config-selinux comando para abrir la versión GUI y configurar los tipos de puerto SELinux desde el menú Puerto de red.