質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Q&A

解決済

1回答

1664閲覧

Apache 複数の認証ファイルの共存について(digest)

tera_harumaky

総合スコア3

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

0グッド

0クリップ

投稿2020/08/03 13:42

前提・実現したいこと

現在、Apacheサーバー上に、限定的にサイトを共有するために認証をかけようとしています。
構成は

example.com
-index.html
|- projectA
|- projectB
|- projectC
...

のように、それぞれのプロジェクトが公開ディレクトリルートの直下に置いてあります。
管理者である私はexample.com以下全てのファイルにアクセスするために、/etc/httpd/conf.d/以下でauth.confと.htdigestを設置してdigest認証をするように設定しました。(マスターキーとします)

また、それぞれのプロジェクトのルートディレクトリには、共有相手がアクセスするために.htaccessと.htdigestを設置し、digest認証を設定しました。(サブキーとします)
こうしてみると、認証範囲がネストされているせいか、以下のような不具合が起きました。

発生している問題・エラーメッセージ

project直下で設定したサブキーのみでしか、そのプロジェクトにアクセス出来なくなった。
example.comにアクセスすると、出てきた認証ダイアログにマスターキーを使ってログインしてindex.htmlが表示されるのはいいのですが、example.com/projectAにアクセスすると、そのサブキーでの認証を要求され、マスターキーでは認証されません。

設定ファイル

/etc/httpd/conf.d以下でのマスターキー設定

authconf

1<Directory "/var/www/html/example.com"> 2 AuthType Digest 3 AuthName "Private Auth" 4 AuthUserFile /etc/httpd/conf.d/.htdigest 5 Require valid-user 6</Directory>

text

1htdigest -c .htdigest "Private Auth" master 2# この後インタラクティブにパスワード設定し、.htdigestを生成

example.com/projectA以下でサブキー設定

htaccess

1AuthType Digest 2AuthName "Private Auth" 3AuthUserFile /var/www/html/example.com/projectA/.htdigest 4Require valid-user

text

1htdigest -c .htdigest "Private Auth" sub 2# この後インタラクティブにパスワード設定し、.htdigestを生成

試したこと

  • basic認証でやってみる
  • マスターとサブで、レルム("Private Auth")を変える(逆効果だと思うけど)

apacheの.confでのマスターキー設定をやめ、全てのプロジェクト直下で認証の設定をするときに、マスターキーとなる組み合わせも毎回設定する(ようなスクリプトを書く)といった妥協案がありますが、それを使わずなんとかうまく出来る方法はないのでしょうか。
どうぞよろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

認証設定はマージされないので、このような挙動はしようがないところかと思います。

そうすると、「同じレルムの認証で、下位のURLでは上位のユーザ情報もマージして使える」とできれば、おそらく希望の状況を作り出せるかと思います。
つまり、projectA では /etc/httpd/conf.d/.htdigest/var/www/html/example.com/projectA/.htdigest の情報をマージして使うような想定になります。
ただ、ユーザ情報ファイルを直接的に複数指定する方法はありません

この場合、ややトリッキーですが、

  • ユーザ情報ファイルを使う「認証プロバイダ」を複数定義する
  • ダイジェスト認証で、複数のプロバイダを使う

という方法で、実質的にユーザ情報をマージさせるようなことが可能です。
この「認証プロバイダの定義」には AuthnProviderAlias ディレクティブを使います。
※apache2.4では認証コアに統合されていますが、2.2の場合は mod_authn_aliasモジュールが必要です

以下に、Basic認証ではありますが、参考になる設定例が載っています。
https://stackoverflow.com/questions/10540621/is-it-possible-to-have-two-password-files-in-apache2

投稿2020/08/04 05:54

angel_p_57

総合スコア1672

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問