Security
如何在其他禁止的 Apache 目錄中對單個文件使用基本身份驗證?
我想允許訪問目錄中的單個文件,否則會被禁止。
這不起作用:
<VirtualHost 10.10.10.10:80> ServerName example.com DocumentRoot /var/www/html <Directory /var/www/html> Options FollowSymLinks AllowOverride None order allow,deny allow from all </Directory> # disallow the admin directory: <Directory /var/www/html/admin> order allow,deny deny from all </Directory> # but allow this single file:: <Files /var/www/html/admin/allowed.php> AuthType basic AuthName "private area" AuthUserFile /home/webroot/.htusers Require user admin1 </Files> ... </VirtualHost>
當我訪問時,
http://example.com/admin/allowed.php
我得到了http://example.com/admin/
目錄的禁止消息,但不是來自基本身份驗證的瀏覽器登錄彈出視窗,因此基本身份驗證不適用於文件。如何對 allowed.php 進行例外處理?如果不可能,也許我可以在另一個 Files 指令中列舉所有被禁止的文件?
假設 admin/ 還包含 user.php 和 admin.php,這應該在這個虛擬主機中被禁止。
*編輯:*我還嘗試了以下修改,嘗試遵循 Ignacio 的回答中的建議,結果相同“禁止”:
... # disallow the admin directory: <Directory /var/www/html/admin> order allow,deny deny from all </Directory> # but allow this single file:: <Files /var/www/html/admin/allowed.php> order allow,deny allow from all AuthType basic AuthName "private area" AuthUserFile /home/webroot/.htusers Require user admin1 satisfy all </Files> ...
嘗試這個:
<Directory /var/www/html/admin> <Files allowed.php> AuthType basic AuthName "private area" AuthUserFile /home/webroot/.htusers Require user admin1 </Files> order allow,deny deny from all satisfy any </Directory>
嵌套在目錄中的文件僅適用於其中,因此您的程式碼塊更有邏輯組織,我認為使用“滿足任何”將允許它們按計劃合併。我不確定它是否真的需要,所以在有和沒有滿足線的情況下嘗試……
我不確定該解決方案
<Files xxx>
實際上是否有效,因為Require doc 頁面指出它不適用於Files
Context: directory, .htaccess
相反,apache 文件建議的是為文件創建一個單獨的目錄:
刪除子目錄中的控制項
以下範例顯示如何使用 Satisfy 指令禁用受保護目錄的子目錄中的訪問控制。應謹慎使用此技術,因為它還會禁用 mod_authz_host 施加的任何訪問控制。
<Directory /path/to/protected/> Require user david </Directory> <Directory /path/to/protected/unprotected> # All access controls and authentication are disabled # in this directory Satisfy Any Allow from all </Directory>