Apache 擁有權限時無法存取文件

Apache 擁有權限時無法存取文件

我不想允許其他人讀取存取權限,因此我已將我的使用者和使用者新增apache至名為 的群組中,然後將該群組設定為我想要存取的apachme所有檔案和資料夾,包括網頁的根目錄。apache然後我向群組和所有者授予所有權限。此後,如果不將讀取權限設定為允許 all( rwxrwxr--(0774)),apache 仍然無法存取檔案。

包含索引檔案的資料夾,其所屬apache群組apachme和權限rwxrwxr-x(0775)

0770 檔案權限

這樣我得到了 500 錯誤,將其更改為0774將讓它運行良好

測試

這些只是為了確認 apache 正在哪個用戶下運行並且它已添加到該群組中。

答案1

從安全性角度來看,使用相同 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 預設使用者。

如果您沒有在虛擬主機中定義任何指令,它將以傳統方式運作;否則行為將會改變。

它的想法是讓一個進程在虛擬主機中運行,並且用戶有權訪問該虛擬主機,因此,這些文件將擁有該所有權,並且如您所願,其他用戶將無法讀取它們。通常,您為每個虛擬主機定義一個使用者。

在虛擬主機中的虛擬主機或目錄指令中,您可以定義對該目錄有效的使用者和群組。 user:usergroup 是 Apache 在存取虛擬主機/目錄時將使用的有效權限,因此,屬於該群組的任何使用者都將能夠寫入/檢視目錄。

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

    ....

因此,在寫入目錄時,如果檔案由一組使用者管理,現在可以將檔案建立為 660,其所有權為 user:usergroup。同樣,這些文件也可以由具有全域讀取權限的其他使用者建立;但對於寫入來說,它不會是 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,則使用預設使用者和群組。

  1. 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 user|#uid group|#gid - 當 uid/gid < 小於 min uid/gid 時設定為預設 uid/gid RDefaultUidGid user|#uid group|#gid

RGroups group1 group2 - 透過 setgroups @none 設定的附加群組 - 清除所有先前定義的群組。

RDocumentChrRoot - 設定 chroot 目錄和其中的文檔根目錄

例子:

<VirtualHost example.com>    
ServerAdmin [email protected]    
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>

相關內容