限制對 Apache 中子目錄的訪問
我有一個非常簡單的問題。但是,我已經花了一整天的時間在所有手冊中尋找答案。
我想要的是配置 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,你就完成了。