SELinux empêchant Apache d'écrire dans un fichier

12

SELinux empêche l' apacheutilisateur d'écrire dans un fichier journal dont il est propriétaire. Quand je fais setenforce 0ça marche. Sinon, il montre cette erreur

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

Le contexte de sécurité du fichier:

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

Le fichier a été créé lorsque le mode SELinux a été défini sur permissif.

Comment définir le contexte de sécurité pour que l' apacheutilisateur puisse écrire dans ce répertoire? J'ai défini ce contexte de sécurité de répertoire à l'aide chconmais je ne trouve pas de type de fichier approprié.

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
la source

Réponses:

10

Pour les fichiers sur lesquels vous souhaitez qu'Apache puisse écrire, le type doit être défini sur httpd_sys_rw_content_t.

Michael Hampton
la source
18

Comme déjà indiqué, vous devez demander à SELINUX d'autoriser l'écriture dans ce fichier. La bonne chose à faire est de marquer /var/www/webapp/k/site/comme de typehttpd_sys_rw_content_t

Pour marquer définitivement ce répertoire comme httpd_sys_rw_content_t, vous pouvez utiliser la commande semanage fcontext -a -t httpd_sys_rw_content_t /var/www/webapp/k/site(/.*)?; restorecon -RF /var/www/webapp/k/site/ Cela survivra aux mises à jour des politiques binaires SELINUX et au réétiquetage du système de fichiers.

shodanshok
la source
2
cela aurait dû être marqué comme la bonne réponse. et il est conseillé de marquer en permanence le répertoire (comme indiqué dans cette réponse).
skidadon
1
Vous devez probablement échapper les parenthèses du shell.
Michael Hampton
6

Cela modifiera les autorisations:

chcon --type httpd_sys_rw_content_t /var/www/webapp/k/site/k.log
t0k3n1z3r
la source
1
J'obtiens cette erreur: -bash: erreur de syntaxe près du jeton inattendu `('
Derrick Miller