web-dev-qa-db-ja.com

Apache2:ディレクトリへのアクセスを制限しながら、その中の1つのファイルへのアクセスを許可するにはどうすればよいですか?

私は、パブリックにアクセスできる必要がある特定のファイルを含む、設計が不十分なWebアプリを継承しましたが、そのファイルは、許可されていないディレクトリ内にあります。

言い換えれば、ディレクトリ内のすべてのファイルとサブディレクトリをブロックする方法が必要ですが、1つのファイルを上書きする方法です。

私はこれを試しています:

# No one needs to access this directly
<Directory /var/www/DangerousDirectory/>
   Order Deny,allow
   Deny from all

   # But this file is OK:
   <Files /var/www/DangerousDirectory/SafeFile.html>
      Allow from all
   </Files>
</Directory>

しかし、それは機能していません-許可したいファイルを含むすべてをブロックするだけです。助言がありますか?

3
Nick

StackOverflowにこの質問に答えるはずの答えがあります。ネストされたOrderディレクティブにFilesがないと思いますか?

https://stackoverflow.com/questions/6243677/Apache-how-to-deny-directory-but-allow-one-file-in-that-dirctory

2
Kyle
# No one needs to access this directly
<Directory /var/www/DangerousDirectory/>
   Order Deny,allow
   Deny from all
</Directory>
# But this file is OK:
<Files /var/www/DangerousDirectory/SafeFile.html>
   Order Deny,Allow
   Allow from all
</Files>

このディレクトリがパスワードで保護されている場合は、Satisfy anyも追加します。

2
Lekensteyn

HTTPパスワードによってアクセスが制限されているときに特定のファイルを許可する。注意してください、パスワード保護はファイルシステムベースで定義され、特定の許可されたファイルはURIによって定義されます。 Apache 2.4用に更新されました。

<Directory /path/to/directory/>
    AuthName SecureArea
    AuthType Basic
    AuthUserFile /path/to/passwd-file
    Require user my-user

    SetEnvIf Request_URI "path/to/uri-allowed-1.php" allowedURL
    SetEnvIf Request_URI "path/to/uri-allowed-2.php" allowedURL
    Require env allowedURL
</Directory>
0
David

非常に遅い回答ですが、おそらく回答です。

タグはディレクトリのスコープ内にあり、絶対パスを含めることはできません。だからそれは読むべきです:

<Directory "/var/www/DangerousDirectory">
   Order Deny,allow
   Deny from all

   # But this file is OK:
   <Files "SafeFile.html">
      Allow from all
   </Files>
</Directory>

これにより、そのディレクトリツリーでSafeFile.htmlと呼ばれるすべてのファイルが許可されることに注意してください。

0
Andre