Apache Basic認証が機能しないのはなぜですか?


14

Apacheを2003年のビルドから、きしみなくクリーンな真新しい2.4.1ビルドにアップグレードしました。1つの明白なものを除いて、すべてがかなり良いようです:

httpd.confファイルには次のものがあります。

<Directory />
    AllowOverride none
    Options FollowSymLinks
    AuthType      Basic
    AuthName      "Enter Password"
    AuthUserFile  /var/www/.htpasswd
    Require     valid-user
</Directory>

これにより、指定された認証ファイル内のユーザーのみがサーバーにアクセスできるようになります-古いバージョンのApacheの場合と同じです。(正しい?)

ただし、機能していません。リクエストは認証なしで許可されます。ロギングをLogLevel Debugに切り替えると、アクセスについて次のように表示されます。

[Sat Mar 24 21:32:00.585139 2012] [authz_core:debug] [pid 10733:tid 32771] mod_authz_core.c(783): [client 192.168.1.181:57677] AH01626: authorization result of Require all granted: granted
[Sat Mar 24 21:32:00.585446 2012] [authz_core:debug] [pid 10733:tid 32771] mod_authz_core.c(783): [client 192.168.1.181:57677] AH01626: authorization result of <RequireAny>: granted

私はこれが何を意味するのか本当に知りません-私は(私の知る限り)私のファイルのいずれにも "Require all granted"または ""ステートメントがありません。

なぜこれが機能しないのか、どこでデバッグするのか?

更新:

SSLポートにプロキシを許可する仮想ホストがあります。私が入れたときと同じ内部のエントリを

<proxy *> 

virtualhost configの句、それは動作します。で動作しないようです

 <Directory> 

句。次に、他のDirectory句(他のディレクトリに固有)の下に配置しようとしました、それも機能しませんでした

また

以下のシェーンの質問から-ルート「/」ブロックを「/ tmp」ディレクトリに複製してみました。/ tmpディレクトリは正しく機能します!! だから-この問題はルートディレクトリにのみ特有のものですか???


1
<Directory>動作していないリクエストに適用している他のブロックは何ですか?
シェーンマッデン

ルート「/」ディレクトリに1つだけを配置します。これはサーバー全体に適用されるはずです。ユーザーのホームディレクトリに(mod_userdirごとに)追加してみましたが、同じ結果になりました。
ブラッド

@ShaneMadden-あなたの質問-ルート「/」ブロックを「/ tmp」ディレクトリに複製しようとしました。/ tmpディレクトリは正しく機能します!! だから-この問題はルートディレクトリにのみ特有のものですか???
ブラッド

<Directory>あなたが設定したものよりも優先されているApache設定の他の場所に、より具体的なブロックがあると思います/
シェーンマッデン

私はすべてを不満に思った-何もない。これらの設定ファイルは、Apacheの新しくインストールされたデフォルトに対するごくわずかな変更でした。
ブラッド

回答:


12

新しく2.4をインストールしたときに、ダイジェスト認証で同様の問題が発生しました。Apacheのサイトのドキュメントをよく見ると、認証ディレクティブは<Location>タグではなくタグ内にある必要があるよう<Directory>です。AuthBasicProviderディレクティブのドキュメントを参照してください。


2
これは正しくありません。mod_auth_basicとmod_auth_digestは、<Directory>と<Location>、および<File> <If>と<Proxy>で使用できます。Apache 2.4-> httpd.apache.org/docs/current/mod/…のドキュメントでは、「コンテキスト」の下に、上記の有効なコンテナをすべて示す「ディレクトリ」がリストされています。- > httpd.apache.org/docs/current/mod/directive-dict.html#Context
JadedCore

それは正しくないはずですが、私にとってはうまくいきました。たぶんそれはディレクトリ部分に他の設定があったからです(es。RewriteRule)
paul.ago

6

私は同じ問題に直面しました、そしてこの投稿から何も助けてくれなかったので、2セントを追加します。私の場合(apache 2.4)、問題はシーケンシャルRequireディレクティブにありました。

デフォルトでは、複数のRequireディレクティブがある場合、それらは次のように見なされます<RequireAny>

私の<Directory>中で

Require ip 192.168.100.0/24 10.9.8.0/24
Require valid-user

そのため、IPが正しい場合、認証リクエストは表示されませんでした。Requireロジックをからに切り替える必要がありましたが、今ではすべてが正しく機能<RequireAny><RequireAll>ているようです。

   <Directory /var/www>

      DirectoryIndex index.html
      Options -Indexes

      AuthType Basic
      AuthName "hidden data"
      AuthBasicProvider    file
      AuthUserFile /opt/httpaswd
      <RequireAll>
        Require ip 192.168.100.0/24 10.9.8.0/24
        Require valid-user
      </RequireAll>
    </Directory>

5

jscottの答えは間違っています。Apache 2.4 <Directory>コンテナ内の認証ディレクティブを許可します。さらに、<Location>コンテナにさまざまな方法でアクセスできるため、これが認証を実装する唯一の安全な方法であり、注意しないと認証を回避できます。参考のために、本番システムで使用しているサンプルコンテナを次に示します。

<Directory "/srv/http/my_domain.org/html/secret-stuff"> Options Indexes Multiviews FollowSymLinks AuthType Digest AuthName "staff" AuthUserFile /etc/httpd/private/secret-stuff.htaccess Require valid-user </Directory>


1

AuthBasicのプロバイダーが欠落しているようです。次のような行を追加してみてください。

AuthBasicProvider    file

これが機能したら、Satisfyディレクティブを確認することをお勧めします。これは、パスワードなしでローカルアクセスを許可するために使用できますが、インターネットアクセスにはパスワードが必要です。

編集:私はBasicAuthのインクルードファイルを使用して、通常インターネットからは利用できないコンテンツへのパスワードベースのリモートアクセスを有効にします。Satisfyディレクティブが不要な場合があります。これは私の/etc/apache2/basicauth.confファイルです:

# Basic authorization configuration include file 
# Enable basic auth access for remote users
AuthName             "Authentication Required"
AuthType             Basic
AuthBasicProvider    file
AuthUserFile         /etc/apache2/httpd.passwd
Require              valid-user
Satisfy              any

/etc/apache2/allow_local.confIPベースの認証用のインクルードファイルもあります。

# Common local access block - Allow all local addresses
Order deny,allow
Deny  from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
Allow from 192.168.1.0/24

それらを有効にするには、これらのインクルードを使用します。

Include /etc/apache2/allow_local.conf
Include /etc/apache2/basicauth.conf

認可仕様に追加してみてください。これは私のテスト構成で機能します。

Order deny,allow
Allow from all

それを試してみました-それでも動作しません:-O-
ブラッド

ファイルをそのまま含めると、「AuthName not allowed here」というエラーが表示されます。これらのディレクティブはどこにも指定できません(「Location」、「Directory」、または「Proxy」句の外側など)。 「ディレクトリ」句内にそれを含めると、再び-資格情報なし
Brad

「ディレクトリ」句に「すべてからの拒否」のみを含めると、アクセスが拒否されます(予想どおり)。その後、ディレクトリ句に最初のスクリプトを含めると、無条件にアクセスが許可されます。スクリプトの「満足」を削除すると、無条件に拒否されます。
ブラッド

0

私も同じ問題を抱えていたので、Apacheのバグである可能性が高いです。私の場合、問題は更新後に現れ、その後の更新後に消えましたが、これを一番下に追加する必要がありました。

Deny from all

Apacheがこのようなセキュリティホールを開けるのは恐ろしいことです:(


Deny from allApache 2.2の設定です。 httpd.apache.org/docs/2.4/upgrading.html#run-time
danger89

はい、下位互換性のない方法でセキュリティ関連のディレクティブを変更することはbaaaaaad
greg

0

試してください:
<Directory "/"> ... </Directory>

の代わりに:
<Directory /> ... </Directory>

意味:二重引用符でルートシンボルをカプセル化します。それ以外の場合は、スラッシュでタグを閉じている可能性があります。


0

また、誤って別のものがないかどうかを確認してください

    Require all granted

同じディレクトリ構成の別の場所。それはあなたのオーバーライドかもしれません

    Require     valid-user
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.