Red Hat Training

A Red Hat training course is available for RHEL 8

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 y setroubleshoot-server están instalados en su sistema.

Procedimiento

  1. 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.
    ...
  2. 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
  3. 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
  4. Comienza de nuevo httpd:

    # systemctl start httpd
  5. 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.
    ...
  6. 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
  7. 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
  8. 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

  1. 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
    ...
  2. 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), y sealert(8).