Apache-2.2

為什麼 apache 不允許使用 SELinux 進行符號連結?

  • April 12, 2021

我有一個簡單的場景:我想符號連結/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,但要使用的工具應該在其他發行版上可用。

您應該熟悉的工具是audit2whyaudit2allow

通過工具執行您的拒絕消息將為您指明正確的方向。

在 CentOS 6 系統上,我必須提供工具建議目前的策略應該允許這樣做(所以我猜你沒有使用這個),但是設置一個特定的 SELinux 布爾值將有助於解決這個問題。

在 CentOS 7 系統上,我必須使用工具建議設置特定的 SELinux 布爾值將有助於解決問題。

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