SELinux 阻止 httpd 寫入文件
我最近在 RHEL7 上建立了一個網站。SELinux 處於強制模式。但是,無論我如何調整上下文,它總是會阻止 httpd 寫入。這是審計日誌:
type=AVC msg=audit(1488922911.038:6188):avc: denied { write } for pid=11773 comm=“httpd” name=“cache” dev=“xvda2” ino=42006369 scontext=system_u:system_r:httpd_t:s0 tcontext =system_u:object_r:httpd_t:s0 tclass=dir
type=SYSCALL msg=audit(1488922911.038:6188):arch=c000003e syscall=21 成功=沒有退出=-13 a0=7f76f76142c0 a1=2 a2=0 a3=7f76e89b0ec0 items=0 ppid=740 pid=11773 auid=4294967295 ui =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)
似乎源上下文和目標上下文不匹配。但是,統一後還是不行。
type=AVC msg=audit(1488923356.905:6384):avc: denied { write } for pid=11709 comm=“httpd” name=“cache” dev=“xvda2” ino=42006369 scontext=system_u:system_r:httpd_t:s0 tcontext =system_u:system_r:httpd_t:s0 tclass=dir
type=SYSCALL msg=audit(1488923356.905:6384):arch=c000003e syscall=21 成功=沒有退出=-13 a0=7f76f76122b0 a1=2 a2=0 a3=7f76e89b0ec0 項目=0 ppid=740 pid=11709 auid=4294967295 ui =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)
更新
我使用 restorecon 命令恢復了權限。但它沒有用。我正在使用虛擬主機,我將所有內容都保留為預設值:
<VirtualHost *:80> ServerName www.hometest.com DocumentRoot /var/www/web1 </VirtualHost>
這是我的文件的 SeLinux 權限。
# ls -Z /var/www/web1 drwxr-x---. apache apache system_u:object_r:httpd_sys_content_t:s0 admin drwxr-x---. apache apache system_u:object_r:httpd_sys_content_t:s0 core drwxr-x---. apache apache system_u:object_r:httpd_sys_content_t:s0 download drwxr-x---. apache apache system_u:object_r:httpd_sys_content_t:s0 extensions drwxr-x---. apache apache system_u:object_r:httpd_sys_content_t:s0 image -rwxr-x---. apache apache system_u:object_r:httpd_sys_content_t:s0 index.php -rwxr-x---. apache apache system_u:object_r:httpd_sys_content_t:s0 license.txt -rwxr-x---. apache root system_u:object_r:httpd_sys_content_t:s0 list.bak -rwxr-x---. apache apache system_u:object_r:httpd_sys_content_t:s0 php.ini drwxr-x---. apache apache system_u:object_r:httpd_sys_content_t:s0 resources -rwxr-x---. apache apache system_u:object_r:httpd_sys_content_t:s0 robots.txt drwxr-x---. apache apache system_u:object_r:httpd_sys_content_t:s0 static_pages drwxr-x---. apache apache system_u:object_r:httpd_sys_content_t:s0 storefront drwxr-x---. apache apache system_u:object_r:httpd_sys_content_t:s0 system -rwxr-x---. apache apache system_u:object_r:httpd_sys_content_t:s0 task.php # ls -dZ web1/system/cache/ drwxr-x---. apache apache system_u:system_r:httpd_t:s0 web1/system/cache
有什麼建議嗎?
我認為您需要應用
httpd_sys_rw_content_t
到寫入的文件(記憶體目錄)。嘗試
# semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/web1/system/cache(/.*)?" # restorecon -Rv /var/www/web1/system/cache