¿Cómo interpretar las reglas de permiso booleano de SELinux?

1

Estoy tratando de entender qué permisos están permitidos por algunos de los booleanos de SELinux para el dominio httpd, ya que es mi principal fuente de preocupación, y la política actual de mi organización es otorgar el privilegio mínimo requerido para obtener un aplicación funcionando.

Leyendo con sesearch lo que hacen algunos booleanos, está claro que realmente no necesito algunos de ellos, así que los desactivamos. Por ejemplo, no necesitamos que nginx pueda conectarse a los puertos squid, ftp, gopher y memcache, entre otras cosas que permite el boolean httpd_can_network_relay , porque pasamos nuestras solicitudes a través de sockets. Boolean httpd_can_network_connect es demasiado amplio para nosotros, como el único puerto que necesitamos abrir, ya está etiquetado para redis y tenemos un módulo de políticas muy fácil de entender para eso: enlace

He luchado un poco para que funcionen algunos scripts PHP, incluso después de etiquetar cuidadosamente algunas rutas públicas, para permitir solo escrituras desde la aplicación web en las subidas y cachés de los directorios de captchas, pero sin dejar que la actualización se haga por sí sola o mágicamente. Descarga de scripts de terceros que podrían ser ejecutados. Además, solo se permite la ejecución de scripts en rutas específicas.

Ya tengo estos objetivos funcionando y la gente de fuera de TI está trabajando sin quejarse, pero aún no puedo entender por completo lo que permiten los booleanos que he tenido que habilitar, porque las páginas de manual son útil para habilitar algo rápidamente pero no entender cómo funciona magic . Y la salida de sesearch es demasiado confusa.

Por ejemplo: sesearch -AC -b httpd_anon_write permite comprender que solo está permitiendo escrituras en los objetos etiquetados public_content_rw_t , pero todavía no entiendo por qué no estaba funcionando con httpd_sys_content_rw_t .

Pero, la salida para los valores booleanos httpd_unified y httpd_builtin_scripting son conflictivos, y estoy francamente preocupado de permitir sin necesidad de demasiadas cosas. Especialmente en los objetos etiquetados con httpd_sys_rw_content_t , no pude hacer que las escrituras funcionaran sin habilitar ambos booleanos, y no habilité httpd_enable_cgi porque los permisos me parecen muy amplios. Vea la parte más confusa:

DT allow httpd_t httpd_sys_rw_content_t : file { ioctl read write create getattr setattr lock append unlink link rename open } ; [ httpd_enable_cgi httpd_unified && httpd_builtin_scripting && ]

ET allow httpd_t httpd_sys_rw_content_t : file { ioctl read write create getattr setattr lock append unlink link rename open } ; [ httpd_builtin_scripting ]

Tal vez es que no llego a donde está el AND y si hay un OR , pero no entiendo por qué se permiten todas las operaciones de acuerdo con la regla anterior , simplemente habilitando httpd_builtin_scripting , y por qué de acuerdo con la primera regla, se debe habilitar ese mismo booleano, Y httpd_unified AND httpd_enable_cgi .

Honestamente, estaría más que contento de no depender de ningún booleano que permita más de lo estrictamente necesario, por eso le agradezco que me ayude a entender la sintaxis de los booleanos necesarios para una regla para ser habilitado.

FWIW, la aplicación web que estoy asegurando está basada en WordPress, y los tutoriales a su alrededor dependen de los booleanos sin explicar por qué son necesarios y qué riesgos presentan. A mi organización también le disgustan las actualizaciones automáticas para saltos de compatibilidad.

    
pregunta Jesús Franco 02.11.2017 - 01:17
fuente

1 respuesta

1

¿Cuál es exactamente tu pregunta?

Básicamente, lo que creo que sesearch está tratando de decirte es que tienes dos opciones si quieres permitir que los procesos asociados de tipo httpd_t "lean y escriban" httpd_sys_rw_content_t escriban "archivos" asociados

O configuras estos tres:

  • enlace
  • enlace
  • enlace

O configura éste:

  • enlace

Lo que obviamente no parece que parezca tener sentido, ya que el primero es un super conjunto de este último. El autor de la política puede o no haber cometido un error allí.

El conjunto anterior de valores booleanos puede tener las mismas reglas que el último conjunto booleano como parte de permisos más amplios. Su consulta fue bastante estrecha, por lo que coincidía con ambos escenarios

Puede usar sesearch para ver qué reglas están asociadas con cada uno de los booleanos y luego determinar si establecer los tres primeros o el último está a su favor

Concedido que esto no parece ser muy intuitivo, pero sesearch te da información precisa y precisa.

La política del servidor web utilizada comúnmente por las distribuciones pretende ser una política de propósito general, y eso la hace bastante compleja e introduce algunas ventajas y desventajas. Hay muchas maneras diferentes de usar servidores web. Los booleanos y los tipos le brindan cierta flexibilidad, pero si desea tener una política que se adapte a sus requisitos, siempre puede elegir escribir su propia política para su servidor web. Lamentablemente, puede que no sea tan fácil como debería, pero es posible.

En cuanto a por qué las cosas "no funcionaron para usted", tendría que ver algunos rechazos de AVC para poder interpretar los eventos y sugerir soluciones.

    
respondido por el dac.override 02.11.2017 - 11:52
fuente

Lea otras preguntas en las etiquetas