Security

如何在其他禁止的 Apache 目錄中對單個文件使用基本身份驗證?

  • August 2, 2013

我想允許訪問目錄中的單個文件,否則會被禁止。

這不起作用:

<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>

引用自:https://serverfault.com/questions/151240