SELinux препятствует записи Apache в файл

12

SELinux запрещает apacheпользователю писать в файл журнала, которым он владеет. Когда я делаю setenforce 0это работает. В противном случае это показывает эту ошибку

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

Контекст безопасности файла:

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

Файл был создан, когда режим SELinux был установлен как разрешающий.

Как установить контекст безопасности, чтобы apacheпользователь мог писать в этом каталоге? Я установил этот контекст безопасности каталога, используя, chconно я не могу найти подходящий тип файла.

От 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
источник

Ответы:

10

Для файлов, в которые вы хотите, чтобы Apache мог писать, тип должен быть установлен в httpd_sys_rw_content_t.

Майкл Хэмптон
источник
18

Как уже говорилось, вы должны указать SELINUX разрешить запись в этот файл. Что нужно сделать, это отметить /var/www/webapp/k/site/как типhttpd_sys_rw_content_t

Чтобы навсегда пометить этот каталог как httpd_sys_rw_content_t, вы можете использовать команду semanage fcontext -a -t httpd_sys_rw_content_t /var/www/webapp/k/site(/.*)?; restorecon -RF /var/www/webapp/k/site/ Это переживет обновления двоичной политики SELINUX и перемаркировку файловой системы.

shodanshok
источник
2
это должно быть помечено как правильный ответ. и рекомендуется постоянно пометить каталог (как указано в этом ответе).
skidadon
1
Вам, вероятно, нужно убрать скобки из оболочки.
Майкл Хэмптон
6

Это изменит разрешения:

chcon --type httpd_sys_rw_content_t /var/www/webapp/k/site/k.log
t0k3n1z3r
источник
1
Я получаю эту ошибку: -bash: синтаксическая ошибка рядом с неожиданным токеном `('
Деррик Миллер