Apache-Httpd

限制對 Apache 中子目錄的訪問

  • November 12, 2017

我有一個非常簡單的問題。但是,我已經花了一整天的時間在所有手冊中尋找答案。

我想要的是配置 Apache 以授予任何人對 /var/www 的讀取訪問權限,但僅將 /var/www/private 限制為我的團隊。我正在尋找2.4版的新解決方案。因此不要使用不推薦使用的指令,如Allow,和. 我有 /etc/apache2/sites-available/* 文件的寫權限,但只有 /etc/apache2/apache2.conf 的讀權限。Deny``Order``Satisfy

到目前為止,我嘗試過的是:/etc/apache2/apache2.conf 的內容:

<Directory />
   Require all denied
</Directory>
<Directory /var/www>
   Require all granted
</Directory>

/etc/apache2/sites-available/000-default.conf 的內容:

<Directory /var/www/private>
   Require group team
</Directory>

但是通過這種配置,每個人都可以訪問 /var/www/private。這我可以理解,因為 Apache 將 /var/www/private 的所有環境合併為如下內容:

Require all denied  # inherited from /
Require all granted # inherited from /var/www
Require group team  # inherited from /var/www/private

並且由於Require指令外<RequireAll>, <RequireAny>or<RequireNone>相當於在一個<RequireAny>塊中,因此合併的視圖是:

<RequireAny>
   Require all denied  # inherited from /
   Require all granted # inherited from /var/www
   Require group team  # inherited from /var/www/private
</RequireAny>

這清楚地表明了為什麼 /var/www/private 對所有人開放(第二條語句總是匹配的)。

因此,我的問題是:“您可以以某種方式覆蓋Require all granted子目錄中的父目錄中的 ,還是可以將預設<RequireAny>行為更改為<RequireAll>?”

預設的 Apache 設置/var/www已經滿足您的要求。您可以按照您的建議限制訪問權限,/var/www/private方法Require group team是添加缺少的配置,如下所示。

Require 指令預設為 RequireAny,因此通常可以省略它,除非您需要更改它,如下面的配置所示。

.groups在適合您系統的位置創建這樣的文件:

# group: memberOne memberTwo memberThree etc
team: richard david jane bill

然後生成一個.password使用者文件和雜湊密碼:

$ htpasswd -c /path/to/file/.passwords richard

對需要訪問的每個組成員執行相同的命令,但省略-c(創建)標誌,否則您將用新的空白文件覆蓋密碼文件。

.passwords如下配置您的 Apache 指令,為您在上面創建的.groups文件設置正確的路徑。

<Location /private>
Options Indexes
 AuthType basic
 AuthName "login info required"
 AuthUserFile path/to/file/.passwords
 AuthGroupFile path/to/file/.groups
<RequireAll>
 Require all granted
 Require group team
</RequireAll>
</Location>

重新啟動 Apache,你就完成了。

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