Capítulo 4. Configuración de SELinux para aplicaciones y servicios con configuraciones no estándar
Cuando SELinux está en modo de aplicación, la política por defecto es la política objetivo. Las siguientes secciones proporcionan información sobre cómo establecer y configurar la política de SELinux para varios servicios después de cambiar los valores predeterminados de configuración, como los puertos, las ubicaciones de las bases de datos o los permisos del sistema de archivos para los procesos.
En los siguientes procedimientos, aprenderás a cambiar los tipos de SELinux para los puertos no estándar, a identificar y arreglar las etiquetas incorrectas para los cambios de directorios por defecto, y a ajustar la política usando booleanos de SELinux.
4.1. Personalización de la política SELinux para el servidor HTTP Apache en una configuración no estándar
Puede configurar el servidor HTTP Apache para que escuche en un puerto diferente y proporcione contenido en un directorio no predeterminado. Para evitar las consiguientes denegaciones de SELinux, siga los pasos de este procedimiento para ajustar la política de SELinux de su sistema.
Requisitos previos
-
Se instala el paquete
httpd
y se configura el servidor HTTP Apache para que escuche en el puerto TCP 3131 y utilice el directorio/var/test_www/
en lugar del directorio predeterminado/var/www/
. -
Los paquetes
policycoreutils-python-utils
ysetroubleshoot-server
están instalados en su sistema.
Procedimiento
Inicie el servicio
httpd
y compruebe el estado:# systemctl start httpd # systemctl status httpd ... httpd[14523]: (13)Permission denied: AH00072: make_sock: could not bind to address [::]:3131 ... systemd[1]: Failed to start The Apache HTTP Server. ...
La política de SELinux asume que
httpd
se ejecuta en el puerto 80:# 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
Cambie el tipo de SELinux del puerto 3131 para que coincida con el puerto 80:
# semanage port -a -t http_port_t -p tcp 3131
Comienza de nuevo
httpd
:# systemctl start httpd
Sin embargo, el contenido sigue siendo inaccesible:
# wget localhost:3131/index.html ... HTTP request sent, awaiting response... 403 Forbidden ...
Encuentre el motivo con la herramienta
sealert
:# sealert -l "*" ... SELinux is preventing httpd from getattr access on the file /var/test_www/html/index.html. ...
Compare los tipos de SELinux para la ruta estándar y la nueva usando la herramienta
matchpathcon
:# matchpathcon /var/www/html /var/test_www/html /var/www/html system_u:object_r:httpd_sys_content_t:s0 /var/test_www/html system_u:object_r:var_t:s0
Cambie el tipo de SELinux del nuevo directorio de contenido
/var/test_www/html/
al tipo del directorio por defecto/var/www/html
:# semanage fcontext -a -e /var/www /var/test_www
Reetiquetar el directorio
/var
recursivamente:# restorecon -Rv /var/ ... Relabeled /var/test_www/html from unconfined_u:object_r:var_t:s0 to unconfined_u:object_r:httpd_sys_content_t:s0 Relabeled /var/test_www/html/index.html from unconfined_u:object_r:var_t:s0 to unconfined_u:object_r:httpd_sys_content_t:s0
Pasos de verificación
Compruebe que el servicio
httpd
está funcionando:# systemctl status httpd ... Active: active (running) ... systemd[1]: Started The Apache HTTP Server. httpd[14888]: Server configured, listening on: port 3131 ...
Compruebe que el contenido proporcionado por el servidor HTTP Apache es accesible:
# wget localhost:3131/index.html ... HTTP request sent, awaiting response... 200 OK Length: 0 [text/html] Saving to: ‘index.html’ ...
Recursos adicionales
-
Las páginas de manual
semanage(8)
,matchpathcon(8)
, ysealert(8)
.