Nuestra empresa tiene un servidor web con CentOS 7 y nuestros clientes administran sus sitios web a través de FTP (vsftpd). SELinux está en modo de imposición.
El problema es que los datos creados / uploadad a través de VSFTPD no heredan el contexto SELinux apropiado. Dejame explicar.
Por ejemplo, para los sitios de WordPress, el servidor ya tiene un par de reglas que se pueden ver usando semanage fcontext -l |grep '/var/www', que son:
/var/www/html(/.*)?/uploads(/.*)? all files system_u:object_r:httpd_sys_rw_content_t:s0
/var/www/html(/.*)?/wp-content(/.*)? all files system_u:object_r:httpd_sys_rw_content_t:s0
Entonces, cuando copio un sitio de WordPress, digamos desde otro servidor en un directorio /var/www/html/de SSH, las carpetas wp-content/y wp-content/uploads/el httpd_sys_rw_content_tcontexto de seguridad adecuado . SIN EMBARGO, cuando esas carpetas se crean a través de FTP, el contexto que obtienen es httpd_sys_content_t(sin rw ). Esto significa que los sitios que nuestros clientes cargan en el servidor no pueden escribir en esos directorios incluso si otorgan permisos de escritura al usuario / grupo apache, por lo que el administrador de WordPress no funciona. Entonces, cuando suben un sitio, tienen que solicitarnos ayuda para solucionarlo, lo cual es una pérdida de tiempo para todos los involucrados.
Digamos que el cliente cargó su sitio en httpdocs, si a través de SSH hago mv httpdocs/ httpdocs.2/ && cp -pr httpdocs.2/ httpdocs/ && rm httpdocs.2/ -frel problema está resuelto, por lo que no hay nada de malo en los datos.
También puedo hacer restorecon -Rv httpdocs/para solucionar el problema.
Entonces, la pregunta es: ¿cómo puedo hacer que los directorios creados / cargados a través de VSFTPD hereden los contextos SELinux adecuados tal como se heredan cuando los directorios se crean / cargan a través de SSH?

Respuestas:
Existe una diferencia entre el etiquetado predeterminado que se produce en tiempo de ejecución y la política de etiquetado posterior basada en expresiones regulares que se aplica en el servidor.
Lo que estás notando aquí:
Es la política de etiquetado posterior.
Lo que discute en su problema en realidad se relaciona con la política de tiempo de ejecución.
Cuando se crea una entrada en un directorio usando SELinux, las reglas que rigen qué etiqueta termina siendo el archivo o el directorio no están dictadas por las expresiones regulares que usted cita, sino por otras reglas de la siguiente manera (creo que este es el orden correcto, pero podría haber fallado algo) .
type_transitionregla explícita con nombre .type_transitionregla explícita sin nombre .default_context.Entonces, sí, hace esto, pero no por la razón por la que piensas que lo hace. Ciertamente no por la política de etiquetado posterior.
Esto ocurre porque
type_transitionexiste una regla con nombre específica que proporciona este comportamiento.Esto es básicamente decir.
unconfined_tyhttpd_sys_content_tyhttpd_sys_rw_content_tLa razón por la que esto funciona para SSHD es porque después de haber iniciado sesión, se le proporciona el contexto de origen
unconfined_tpara el cual se aplica esta regla.Esto no funciona para el servicio FTP porque es muy probable
ftpd_tque el contexto de origen de este servicio no tenga una regla coincidente.Como tal, necesitaría modificar la política para alterar el comportamiento de SELinux para respetar también las reglas de archivos con nombre que ve en las otras entradas para FTP.
Al menos en Fedora 23, existe una interfaz para permitir esto, un módulo de política como este lo haría.
Puede cargar esto asegurándose de que el
selinux-policy-develpaquete esté instalado y ejecutándosemake -f /usr/share/selinux/devel/Makefile load.fuente
local_ftpd.tecon su módulo de políticas, luego lo hicemake -f /usr/share/selinux/devel/Makefile local_ftpd.ppy luegosemodule -i local_ftpd.pp. ¿Esta bien? Ahora los archivos creados a través de FTP heredan los contextos deseados. ¡Gracias de nuevo!