web-dev-qa-db-ja.com

Apacheのサブディレクトリへのアクセスを制限する

とても簡単な質問があります。しかし、私はすでに丸一日答えのためにすべてのマニュアルを掘っています。

私が欲しいのは、誰でも/ var/wwwへの読み取りアクセスを許可するが、/ var/www/privateを私のチームだけに制限するようにApacheを構成することです。バージョン2.4の新しいソリューションを探しています。したがって、AllowDenyOrderSatisfyなどの非推奨のディレクティブは使用しません。/etc/Apache2/sites-available/*ファイルの書き込み権限がありますが、/ etc/Apache2 /Apache2.confの読み取り権限しかありません。

私がこれまでに試したことはこれです:/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

また、<RequireAll><RequireAny>、または<RequireNone>の外側のRequireディレクティブは、<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がすべての人に開かれている理由を明確に示しています(2番目のステートメントは常に一致します)。

したがって、私の質問は次のとおりです。「サブディレクトリの親ディレクトリにあるRequire all grantedをなんとか上書きできますか、それともデフォルトの<RequireAny>の動作を<RequireAll>に変更できますか?」

1

/var/wwwのデフォルトのApache設定は、すでに要件を満たしています。次のように不足している構成を追加することにより、提案したように/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および.groupsファイルへの正しいパスを設定して、Apacheディレクティブを次のように構成します。

<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を再起動すると、完了です。

2
Alxs