為什麼 apache 不允許使用 SELinux 進行符號連結?
我有一個簡單的場景:我想符號連結
/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
我怎樣才能讓符號連結以這種方式工作?
更新
使用伊恩的回答,我跑了
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 系統上,我必須提供工具建議目前的策略應該允許這樣做(所以我猜你沒有使用這個),但是設置一個特定的 SELinux 布爾值將有助於解決這個問題。
在 CentOS 7 系統上,我必須使用工具建議設置特定的 SELinux 布爾值將有助於解決問題。