為什麼在啟用 SELinux httpd_read_user_content 並將文件設置為 httpd_user_content_t 後 Fedora 20 仍然拒絕訪問主目錄?
在我的 Fedora 20 上,我了解到要允許 PHP 等程序通過 Apache 對文件進行寫訪問,程序所有者(在我的情況下
apache
)必須對文件具有寫權限。此外,由於啟用了 SELinux,因此文件必須具有httpd_system_rw_content_t
上下文。看起來 SELinux 策略也阻止 httpd 訪問
/home
. 幾乎每個人都同意,要解決這個問題,您要訪問的文件必須具有安全上下文httpd_user_content_t
或httpd_user_rw_content_t
. 我肯定會這樣做,但 Apache 仍然說它沒有訪問目錄的權限。當這些文件沒有 user_content 上下文時,我確實會收到 SELinux 警告。設置上下文後,我沒有收到警告,但 Apache 仍然無法訪問文件。下的所有內容都/home/me/game
具有以下使用者權限和安全上下文:$ sudo chcon -Rv --type=httpd_user_rw_content_t game $ sudo setsebool -P httpd_read_user_content 1 $ sudo chown -R :apache game $ ll -Zd game drwxrwxr-x. me apache unconfined_u:object_r:httpd_user_rw_content_t:s0 game
然而 Apache 告訴我:
禁止的
您無權訪問此伺服器上的 /game。
可能有人知道我還能檢查什麼嗎?
唉……總是檢查你的權限,人們。儘管 SELinux 設置很好,但在通往我想要到達的路徑的路上有一個目錄
apache
不允許該使用者讀取/執行它。首先,我應該看看
/var/log/httpd/error_log
哪個明明白白說:(13)權限被拒絕:
$$ client 127.0.0.1:38628 $$AH00035:訪問 /game/ 被拒絕(文件系統 > 路徑 ‘/home/me/game’),因為路徑的組件上缺少搜尋權限
在Google上查找錯誤,我發現這個頁面也說明了這個問題。
/var/www
由於它從我一直檢查目錄權限開始沒有問題:$ ll -d / drwxr-xr-x. 18 root root 4096 Jun 22 18:52 / $ ll -d /var drwxr-xr-x. 21 root root 4096 Jun 22 12:51 /var $ ll -d /var/www drwxr-xr-x. 8 root root 4096 Jun 21 09:19 /var/www
我一直在我的家庭目錄中做了同樣的事情:
$ ll -d /home drwxr-xr-x. 4 root root 4096 Jun 13 21:31 /home $ ll -d /home/me drwx------. 35 me me 4096 Jun 22 19:05 /home/me
是的……一個簡單的
sudo chmod o=rx /home/me
讓我起來。如果不檢查你們要求我做的所有事情,我就無法做到,我感謝你們。