我最近在 RHEL7 上设置了一个网站。 SELinux 处于强制模式。然而,无论我如何调整上下文,它总是阻止 httpd 写入。这是审计日志:
类型=AVC msg=audit(1488922911.038:6188): avc:拒绝{写入} 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
类型 = SYSCALL msg = 审核(1488922911.038:6188):arch = c000003e syscall = 21 成功 = 否退出 = -13 a0 = 7f76f76142c0 a1 = 2 a2 = 0 a3 = 7f76e89b0ec0 项目 = 0 ppid = 740 pid = 11773 auid = 4294967295 uid = 48 gid = 48 euid = 48 suid = 48 fsuid = 48 egid = 48 sgid = 48 fsgid = 48 tty =(无)ses = 4294967295 comm =“httpd”exe =“/usr/sbin/httpd”subj = system_u:system_r:httpd_t:s0 key =(null)
源上下文和目标上下文似乎不匹配。但是我统一了之后还是不行。
类型=AVC msg=audit(1488923356.905:6384): avc:拒绝{写入} 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
类型=SYSCALL msg=audit(1488923356.905:6384): arch=c000003e syscall=21 成功=不退出=-13 a0=7f76f76122b0 a1=2 a2=0 a3=7f76e89b0ec0 items=0 ppid=740 pid=11709 auid=429496729 5 号=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(无) ses=4294967295 comm="httpd" exe="/usr/sbin/httpd" subj=system_u: system_r:httpd_t:s0 key=(空)
更新
我使用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
有什么建议吗?
答案1
我认为您需要应用于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