Linux

為什麼在啟用 SELinux httpd_read_user_content 並將文件設置為 httpd_user_content_t 後 Fedora 20 仍然拒絕訪問主目錄?

  • June 23, 2014

在我的 Fedora 20 上,我了解到要允許 PHP 等程序通過 Apache 對文件進行寫訪問,程序所有者(在我的情況下apache)必須對文件具有寫權限。此外,由於啟用了 SELinux,因此文件必須具有httpd_system_rw_content_t上下文。

看起來 SELinux 策略也阻止 httpd 訪問/home. 幾乎每個人都同意,要解決這個問題,您要訪問的文件必須具有安全上下文httpd_user_content_thttpd_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讓我起來。如果不檢查你們要求我做的所有事情,我就無法做到,我感謝你們。

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