1

私の Apache 構成では、最初にファイルシステム全体へのアクセスを拒否します。

<Directory />
    Require all denied
</Directory>

次に、各仮想ホストの構成で、無制限のアクセスを許可します。

<VirtualHost ...>
    <Directory /var/www/example.com/>
        Require all granted
    </Directory>
</VirtualHost>

または、認証されたアクセスが必要です:

<VirtualHost ...>
    <Directory /var/www/example.com/>
        AuthType Basic
        AuthName "example.com"
        AuthUserFile htpasswd
        Require valid-user
    </Directory>
</VirtualHost>

Apache のドキュメントで次のことに気付きました。

ファイルシステムに存在するコンテンツの場合は、<Directory> と <Files> を使用します。<Location /> は例外で、サーバー全体に構成を適用する簡単な方法です。

そして<Location />、特定の仮想ホストに対して認証されたアクセスを要求する方法として、次を使用することができるのではないかと考えました。

<VirtualHost ...>
    <Location />
        AuthType Basic
        AuthName "example.com"
        AuthUserFile htpasswd
        Require valid-user
    </Location>
</VirtualHost>

しかし、Apache のドキュメントには次のように記載されています。

<Location> ディレクティブは、ファイルシステムの場所へのアクセスを制御するために使用しないでください。

これにより、一般的にディレクティブを推奨するべきではない<Location>かどうか、特定の状況で特定の<Location />ディレクティブをアクセスを許可する例外として使用できるかどうか、または言い換えれば、Apache<Location>ディレクティブを安全に使用してアクセスを構成できるかどうか疑問に思いました。サーバーに?

4

1 に答える 1

2

いいえ。 また、Apacheのドキュメントから:

Location ディレクティブと Directory ディレクティブの相互作用に特に注意してください。たとえば、 <Directory /> がアクセスを拒否したとしても、 <Location /> ディレクティブがそれを覆す可能性があります。

私の理解では、どの<Location>ディレクティブもディレクティブを覆す可能性があるため<Directory>[1]、最も制限の少ないディレクティブは、サーバー全体で最も制限の厳しいディレクティブ<Location>よりも制限を緩和してはなりません。<Directory>

賢明な<Directory />デフォルトのから始めてRequire all denied、上記の規則に従うには、どの<Location>ディレクティブも より制限が緩くならないようにする必要がありRequire all deniedます。

<Location>ディレクティブの目的は、ファイルシステムの外部に存在するリソースを構成することでもあることに注意してください。

要点は、ファイルシステムに触れる可能<Location>性のあるリクエスト、それらのリクエストのいずれかに適用される可能性のあるディレクティブについては、該当する<Location>ディレクティブにステートメントを含めてはならないRequireということです.[2]

[1]: たとえば、シンボリック リンクを使用します。
[2]: ファイルシステムのパーミッションや apparmor のようなツールを使用してRequire、特定のディレクティブにステートメントを含めることで開いたセキュリティ ホールを緩和することは可能ですが、 Defence In Depth<Location>の原則を思い出してください。

于 2013-09-23T22:39:01.563 に答える