SELinux impide que Apache escriba en un archivo

12

SELinux impide que el apacheusuario escriba en un archivo de registro que le pertenece. Cuando lo hago setenforce 0funciona. De lo contrario, muestra este error

IOError: [Errno 13] Permission denied: '/var/www/webapp/k/site/k.log'

El contexto de seguridad del archivo:

$ ll -Z k.log 
-rw-r--r--. apache apache system_u:object_r:httpd_sys_content_t:s0 k.log

El archivo se creó cuando el modo SELinux se estableció en permisivo.

¿Cómo establecer el contexto de seguridad para que el apacheusuario pueda escribir en ese directorio? Establecí ese contexto de seguridad de directorio usando chconpero no puedo encontrar un tipo de archivo adecuado.

De audit.log:

type=AVC msg=audit(1409945481.163:1561): avc:  denied  { append } for  pid=16862 comm="httpd" name="k.log" dev="dm-1" ino=201614333 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:httpd_sys_content_t:s0 tclass=file
type=SYSCALL msg=audit(1409945481.163:1561): arch=c000003e syscall=2 success=no exit=-13 a0=7fa8080847a0 a1=441 a2=1b6 a3=3 items=0 ppid=15256 pid=16862 auid=4294967295 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4294967295 comm="httpd" exe="/usr/sbin/httpd" subj=system_u:system_r:httpd_t:s0 key=(null)
Clodoaldo
fuente

Respuestas:

10

Para los archivos en los que desea que Apache pueda escribir, el tipo debe establecerse en httpd_sys_rw_content_t.

Michael Hampton
fuente
18

Como ya se indicó, debe indicar a SELINUX que permita la escritura en ese archivo. Lo correcto es marcar /var/www/webapp/k/site/como de tipohttpd_sys_rw_content_t

Para marcar permanentemente ese directorio como httpd_sys_rw_content_t, puede usar el comandosemanage fcontext -a -t httpd_sys_rw_content_t /var/www/webapp/k/site(/.*)?; restorecon -RF /var/www/webapp/k/site/ Esto sobrevivirá a las actualizaciones de la política binaria SELINUX y al reetiquetado del sistema de archivos.

shodanshok
fuente
2
Esto debería haber sido marcado como la respuesta correcta. y se recomienda marcar permanentemente el directorio (como se indica en esta respuesta).
skidadon
1
Probablemente necesites escapar de los paréntesis del shell.
Michael Hampton
6

Esto cambiará los permisos:

chcon --type httpd_sys_rw_content_t /var/www/webapp/k/site/k.log
t0k3n1z3r
fuente
1
Me sale este error: -bash: error de sintaxis cerca de token inesperado `('
Derrick Miller