SELinux impedindo que o Apache grave em um arquivo

12

O SELinux está impedindo o apacheusuário de gravar em um arquivo de log que ele possui. Quando eu faço setenforce 0isso funciona. Caso contrário, ele mostra este erro

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

O contexto de segurança do arquivo:

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

O arquivo foi criado quando o modo SELinux foi definido como permissivo.

Como definir o contexto de segurança para que o apacheusuário possa escrever nesse diretório? Eu configurei esse contexto de segurança de diretório usando, chconmas não consigo encontrar um tipo de arquivo adequado.

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
fonte

Respostas:

10

Para arquivos nos quais você deseja que o Apache possa gravar, o tipo deve ser definido como httpd_sys_rw_content_t.

Michael Hampton
fonte
18

Como já foi dito, você deve instruir o SELINUX a permitir a gravação nesse arquivo. A coisa certa a fazer é marcar /var/www/webapp/k/site/como do tipohttpd_sys_rw_content_t

Para marcar permanentemente esse diretório como httpd_sys_rw_content_t, você pode usar o comando semanage fcontext -a -t httpd_sys_rw_content_t /var/www/webapp/k/site(/.*)?; restorecon -RF /var/www/webapp/k/site/ Isso sobreviverá às atualizações de políticas binárias do SELINUX e à remarcação do sistema de arquivos.

shodanshok
fonte
2
isso deveria ter sido marcado como a resposta correta. e é recomendável marcar permanentemente o diretório (conforme declarado nesta resposta).
Skypeon
1
Você provavelmente precisa escapar dos parênteses da casca.
Michael Hampton
6

Isso mudará as permissões:

chcon --type httpd_sys_rw_content_t /var/www/webapp/k/site/k.log
t0k3n1z3r
fonte
1
Eu recebo este erro: -bash: erro de sintaxe próximo ao token inesperado `('
Derrick Miller