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_t
contexto 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/ -fr
el 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_transition
regla explícita con nombre .type_transition
regla 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_transition
existe una regla con nombre específica que proporciona este comportamiento.Esto es básicamente decir.
unconfined_t
yhttpd_sys_content_t
yhttpd_sys_rw_content_t
La 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_t
para el cual se aplica esta regla.Esto no funciona para el servicio FTP porque es muy probable
ftpd_t
que 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-devel
paquete esté instalado y ejecutándosemake -f /usr/share/selinux/devel/Makefile load
.fuente
local_ftpd.te
con su módulo de políticas, luego lo hicemake -f /usr/share/selinux/devel/Makefile local_ftpd.pp
y luegosemodule -i local_ftpd.pp
. ¿Esta bien? Ahora los archivos creados a través de FTP heredan los contextos deseados. ¡Gracias de nuevo!