Centos

SELinux 阻止 Apache 寫入文件

  • November 11, 2017

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)

對於您希望 Apache 能夠寫入的文件,類型必須設置為httpd_sys_rw_content_t.

如前所述,您應該指示 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 二進制策略更新和文件系統重新標記後繼續存在。

引用自:https://serverfault.com/questions/626610