为什么不能通过SELinux来允许符号链接?

我有一个简单的scheme:我想要/home/leonard/apache/sandbox/markdown/home/leonard/github/markdown-editor ,这样markdown-editor可以从我的浏览器中查看。

我设置了ln -s /home/leonard/github/markdown-editor /home/leonard/apache/sandbox/public/markdown这个链接,显示出来并且可以正常导航。

当我在浏览器中查看时,我得到了403 Forbidden 。 我的audit.log显示如下:

 type=AVC msg=audit(1461759062.021:1232192): avc: denied { read } for pid=30107 comm="httpd" name="markdown" dev=md2 ino=25300345 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=lnk_file type=SYSCALL msg=audit(1461759062.021:1232192): arch=c000003e syscall=4 success=no exit=-13 a0=7f88e34cff28 a1=7ffc036e2dd0 a2=7ffc036e2dd0 a3=7f88dec032e0 items=0 ppid=36009 pid=30107 auid=0 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=88286 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null) type=AVC msg=audit(1461759062.022:1232193): avc: denied { getattr } for pid=30107 comm="httpd" path="/home/leonard/apache/sandbox/public/markdown" dev=md2 ino=25300345 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=lnk_file type=SYSCALL msg=audit(1461759062.022:1232193): arch=c000003e syscall=6 success=no exit=-13 a0=7f88e34d0018 a1=7ffc036e2dd0 a2=7ffc036e2dd0 a3=1 items=0 ppid=36009 pid=30107 auid=0 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=88286 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null) 

我在这里看到其他的问题,询问如何设置符号链接的上下文,但我不确定它们是否相关,因为链接与其他(在浏览器中完全可见的)相邻目录相同:

 [leonard@ombrelle public]$ ls -alZ drwxr-xr-x. leonard developers unconfined_u:object_r:user_home_t:s0 . drwxr-xr-x. leonard developers unconfined_u:object_r:user_home_t:s0 .. -rw-r--r--. leonard developers unconfined_u:object_r:user_home_t:s0 .htaccess -rw-r--r--. leonard developers unconfined_u:object_r:user_home_t:s0 index.php lrwxrwxrwx. leonard developers unconfined_u:object_r:user_home_t:s0 markdown -> /home/leonard/github/markdown-editor drwxr-xr-x. leonard developers unconfined_u:object_r:user_home_t:s0 notes 

我怎样才能让符号链接以这种方式工作?

更新

用Ian的答案 ,我运行了audit2why < /var/log/audit/audit.log并给出了:

 type=AVC msg=audit(1461761590.750:1232443): avc: denied { getattr } for pid=37683 comm="httpd" path="/home/leonard/apache/sandbox/public/markdown" dev=md2 ino=25300345 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=lnk_file Was caused by: The boolean httpd_enable_homedirs was set incorrectly. Description: Allow httpd to read home directories Allow access by executing: # setsebool -P httpd_enable_homedirs 1 

运行setsebool命令神奇地使它工作。 我只是不确定如何所有其他网站( /home/*/apache/sitename.tld )没有启用这个工作?

你不会说你正在使用什么发行版或发行版,这可能是相关的。 我只有Centos 6和7,但其他发行版应该提供使用的工具。

您应该熟悉的工具是audit2why和audit2allow 。

通过这些工具来运行您的拒绝信息将会使您指向正确的方向。

在CentOS 6系统上,我必须提供这些工具,build议现在的策略应该允许这个(所以我猜你不使用这个),但是设置一个特定的SELinux布尔值将有助于解决这个问题。

在CentOS 7系统上,我必须提供这些工具,build议设置一个特定的SELinux布尔值将有助于解决这个问题。