SELinux, Nginx y fcgiWrap: ¿cómo permitir el acceso al socket fcgiWrap?

SELinux, Nginx y fcgiWrap: ¿cómo permitir el acceso al socket fcgiWrap?

Estoy bajo Fedora 31 (kernel de Linux 5.4.13, Nginx 1.16.1, fcgiwrap 1.1.0) ejecutando SELinux en modo obligatorio (política: objetivo 3.14.4-44.fc31).

Mi caja aloja un servidor controlado por Nginx. Parte de esto se basa en scripts Perl. Nginx ha sido configurado para entregar la ejecución CGI a través de FastCGI con fcgiwrap (conexión a través de un socket Unix /var/run/fcgiwrap/[correo electrónico protegido]).

Todo ha sido probado en modo "Permisivo". Luego se cambió al modo "Enforcing". Recibí un montón de AVC que podrían manejarse cambiando valores booleanos o creando políticas personalizadas como lo sugieren los comentarios de auditoría.

Sin embargo, no se puede abordar un AVC. El diario cuenta:

 type=AVC msg=audit(1580046727.459:548): avc:  denied  { connectto } for  pid=4619 comm="nginx" path="/run/fcgiwrap/fcgiwrap-0.sock" scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:system_r:unconfined_service_t:s0 tclass=unix_stream_socket permissive=0

La política personalizada contiene lo siguiente:

module nginx 1.0;

require {
    type httpd_t;
    type soundd_port_t;
    type http_port_t;
    type tor_port_t;
    type unconfined_service_t;
    type httpd_user_content_t;
    class tcp_socket { name_bind name_connect };
    class file { getattr read };
    class unix_stream_socket connectto;
}

#============= httpd_t ==============

#!!!! This avc is allowed in the current policy
allow httpd_t http_port_t:tcp_socket name_connect;

#!!!! This avc is allowed in the current policy
allow httpd_t httpd_user_content_t:file { getattr read };
allow httpd_t soundd_port_t:tcp_socket name_bind;

#!!!! This avc is allowed in the current policy
allow httpd_t tor_port_t:tcp_socket name_connect;
allow httpd_t unconfined_service_t:unix_stream_socket connectto;

Como se puede ver en los comentarios generados automáticamente, esta política personalizada no tiene ningún efecto porque ya está incluida en la política global.

Después de agregar este módulo, nada cambia. Sigo recibiendo alertas AVC que sugieren la misma solución.

Si vuelvo a "Permisivo" o si configuro el dominiohttpden modo permisivo, los scripts CGI se ejecutan y recibo el resultado esperado.

ls -Z /var/run/fcgiwrap/fcgiwrap-0.sockdevoluciones:

system_u:object_r:httpd_var_run_t:s0 /var/run/fcgiwrap/fcgiwrap-0.sock

No pude encontrar dónde httpd_var_run_tse usó la etiqueta y si un acceso controlado booleano a este tipo de archivo (soy bastante novato en la configuración de SELinux).

¿Cómo puedo otorgar acceso al socket en modo "Aplicar"?

EDITAR 2020-01-27

Parece que ya existe una regla de transición en el módulo.apachepara:

allow httpd_t unconfined_service_t:unix_stream_socket connectto;

pero es ineficaz o otro módulo (¿cuál?) lo está bloqueando. La solución temporal es poner el dominiohttpden modo permisivo, pero no me gusta porque ahora cualquier servidor web puede hacer cualquier cosa.

¿Alguna idea de por qué se niega la transición?

Respuesta1

No lo he comprobado ni probado adecuadamente; de ​​hecho, estoy bastante seguro de que esto por sí solo no funcionará.

Supongo que la creación de la ruta /var/run/fcgiwraptiene el tipo de directorio unconfined_service_ty no estoy seguro de si ese es realmente el caso.

Sin embargo, esto debería ayudarle a empezar.

policy_module(nginx_local, 31.0.0)

require {
  type httpd_t;
  type unconfined_service_t;
}

stream_connect_pattern(httpd_t, unconfined_service_t, unconfined_service_t, unconfined_service_t)

En cuanto a los problemas de red, es posible que desee activar el valor booleano, httpd_can_network_connectque ya debería silenciar algunos de ellos. A menos que quieras ser específico al respecto.

En las mejores e ideales circunstancias, sería ideal crear una política específica para su proceso fcgi, pero eso es una tarea mucho más difícil, por lo que lograr que nginx simplemente interactúe con servicios ilimitados, aunque menos seguros, es mucho más fácil.

información relacionada