とても簡単な質問があります。しかし、私はすでに丸一日答えのためにすべてのマニュアルを掘っています。
私が欲しいのは、誰でも/ var/wwwへの読み取りアクセスを許可するが、/ var/www/privateを私のチームだけに制限するようにApacheを構成することです。バージョン2.4の新しいソリューションを探しています。したがって、Allow
、Deny
、Order
、Satisfy
などの非推奨のディレクティブは使用しません。/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>
に変更できますか?」
/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を再起動すると、完了です。