Rhel

Apache 有權限時無法訪問文件

  • December 29, 2018

我不想允許其他人讀取訪問權限,因此我已將我的使用者和apache使用者添加到一個名為的組apachme中,然後將該組設置為我想要apache訪問的所有文件和文件夾,包括網頁的根目錄。然後,我已授予組和所有者所有權限。rwxrwxr--(0774)在沒有將讀取權限設置為允許全部( )的情況下,這個 apache 仍然無法訪問文件。

包含索引文件的文件夾,由apacheapachme和權限擁有rwxrwxr-x(0775)

0770 文件權限

有了這個我得到一個500錯誤,把它0774改成讓它執行正常

測試

這些只是為了確認 apache 在哪個使用者下執行以及它已被添加到組中。

從安全的角度來看,使用同一個 Apache 使用者設置網頁並不是一個好主意。Apache 使用者應該能夠閱讀網頁,但不能寫入網頁。

因此,在標準配置中,Web 結構是所有人可讀的,而當需要編寫時,通常是 Apache 使用者可寫的,這是一個安全噩夢。

避免這種情況的策略之一是安裝/使用 mod_ruid2。https://github.com/mind04/mod-ruid2

至於 Debian,這樣做就足夠了:

apt-get install libapache2-mod-ruid2

請注意 Apache 預設使用者因發行版而異。在 Debian 中是 www-data,在 RH/CentOS 中是 apache,在 SuSE 中是 wwwrun。從現在開始,我將其稱為 Apache 預設使用者。

如果您沒有在 vhost 中定義任何指令,它將以傳統方式執行;否則行為將被改變。

它的想法是在虛擬主機中執行一個程序,該使用者擁有對虛擬主機的權限,因此,文件將擁有該所有權,並且如您所願,其他使用者將無法讀取它們。通常,您為每個虛擬主機定義一個使用者。

在 vhost 中的 Virtualhost 或 Directory 指令中,您定義將對該目錄處於活動狀態的使用者和組。user:usergroup 是 Apache 在訪問虛擬主機/目錄時將使用的有效權限,因此,屬於該組的任何使用者都將能夠寫入/查看目錄。

   <Directory "/vhostdir/">
           RMode config
           RUidGid user usergroup

   ....

因此,在編寫目錄時,如果文件由一組使用者管理,現在可以將文件創建為具有 user:usergroup 所有權的 660。同樣,這些文件也可以由另一個具有全球讀​​取權限的使用者創建;但是對於寫作,它不會是 Apache 預設使用者,而是這個其他使用者。

那麼 mod_ruid2 的優點是:

  • 在虛擬主機房環境下,使用者無法讀取其他使用者的文件;
  • 在單個使用者中,您仍然可以像其他使用者一樣創建文件,Apache 預設使用者和 ruid2 使用者都無法覆蓋它們
  • 更重要的是,現在將使用 ruid2 使用者完成寫入的文件,而不是使用 Apache 預設使用者在全域範圍內完成。

從 github 頁面:

關於 mod_ruid2 是 apache 2.0、2.2 和 2.4 的一個 suexec 模組,基於 mod_ruid 和 mod_suid2

  • 它僅在 Linux 上執行,因為只有 Linux 核心實現了所需的程序功能。- 它比 mod_suid2 具有更好的性能,因為它不需要在一個請求後殺死 httpd 子級。它利用核心功能,並在再次收到新請求後 suids。-存在一些安全問題,例如如果攻擊者成功利用httpd程序,他可以設置有效的能力和setuid為root。我建議在核心(grsec)中使用一些安全更新檔,或者其他東西..

-有兩種主要的操作模式:stat和config 1.config是預設的,你必須定義uid和gid。如果不

$$ ug $$id 定義為使用預設使用者和組。 2. stat httpd setuid 和 setgid 到請求的文件名(腳本)/目錄的 uid 和 gid 如果您使用 mod_vhost_alias 進行虛擬主機,這很好

安裝 1. 從這裡下載並安裝最新的 libcap 2. 執行 /apachedir/bin/apxs -a -i -l cap -c mod_ruid2.c 3. 配置 httpd.conf 4. 重啟 apache

配置選項: RMode config|stat(預設為 config) RUidGid user|#uid group|#gid - 當 RMode 為 config 時,設置為此 uid 和 gid

RMinUidGid 使用者|#uid 組|#gid - 當 uid/gid 小於 min uid/gid 設置為預設 uid/gid RDefaultUidGid 使用者|#uid 組|#gid

RGroups group1 group2 - 通過 setgroups @none 設置的其他組 - 清除所有先前定義的組。

RDocumentChrRoot - 設置 chroot 目錄和里面的文件根目錄

例子:

<VirtualHost example.com>    
ServerAdmin webmaster@example.com    
RDocumentChRoot /home /example.com/public_html    
ServerName     example.com    
ServerAlias    www.example.com    
RMode          config     # unnecessary since config is the default    
RUidGid        user1 group1    
RGroups        apachetmp

<Directory /home/example.com/public_html/dir>
   RMode stat    </Directory>

<Directory /home/example.com/public_html/dir/test>
   RMode config
   RUidGid user2 group2
   RGroups groups1    </Directory>

<Directory /home/example.com/public_html/dir/test/123>
   RUidGid user3 group3    </Directory>

<Location /yustadir>
   RMode config
   RUidGid user4 user4
   RGroups groups4    </Location>

引用自:https://unix.stackexchange.com/questions/262138