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

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

非常に簡単な質問があります。しかし、私は答えを見つけるために一日中すべてのマニュアルを遅らせるのに時間を費やしました。

私が望むのは、誰もが/var/wwwを読むことを許可し、私のチームだけが/var/www/privateにアクセスできるようにApacheを設定することです。バージョン2.4の新しいソリューションを探しています。したがって、などの廃止されたディレクティブはAllow使用されません。 /etc/apache2/sites-available/* ファイルに対する書き込み権限がありますが、/etc/apache2/apache2.conf に対する読み取り権限しかありません。DenyOrderSatisfy

これまでに試したことは次のとおりです。 /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を再起動すると完了です。

おすすめ記事