非常に簡単な質問があります。しかし、私は答えを見つけるために一日中すべてのマニュアルを遅らせるのに時間を費やしました。
私が望むのは、誰もが/var/wwwを読むことを許可し、私のチームだけが/var/www/privateにアクセスできるようにApacheを設定することです。バージョン2.4の新しいソリューションを探しています。したがって、などの廃止されたディレクティブはAllow
使用されません。 /etc/apache2/sites-available/* ファイルに対する書き込み権限がありますが、/etc/apache2/apache2.conf に対する読み取り権限しかありません。Deny
Order
Satisfy
これまでに試したことは次のとおりです。 /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
そしてRequire
外部コマンド<RequireAll>
または銀ブロックに配置されているものと同じであるため、マージされた<RequireAny>
ビューは次のようになります。<RequireNone>
<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
デフォルトのApache設定はすでに/var/www
要件を満たしています。以下のような不足している設定を追加して、提案された/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
上記で作成したファイルへの正しいパスを設定して、次のようにApacheディレクティブを設定します.groups
。
<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を再起動すると完了です。