Apacheでプライベートユーザーディレクトリの認証を設定するには?

Apacheでプライベートユーザーディレクトリの認証を設定するには?

public_html私のディレクトリに個人認証を設定しましたが、home何の効果もありません。つまり、資格情報を求めるポップアップが表示されるはずですが、そのようなことは起こりません。認証はサーバールートのディレクトリで正しく機能し、うまく機能します。今はサーバーを改編しています。

詳細は次のとおりです。私が置く設定ファイルに関連するいくつかの追加の質問とクエリがあります。勇敢な

  • デフォルトのHTTPディレクトリがあり、/var/www/htmlHTTPSにも同じディレクトリがあります。
  • 私の個人URLindex.htmlへのリンクを含むファイルは1つだけです。~tomas良い結果。userdirマッピングにモードを使用しています~tomas
  • プライベートディレクトリもあり、cgi-binCGIはうまく機能しますが、URLが必要です。~tomas/cgi-bin ディレクトリリストの表示、何らかの理由で動作せずに403 Forbiddenが表示されます。
  • 承認なしにホームディレクトリをHTTPSとHTTPで使用できるようにしたいです。ただし、クライアントが以下を介してpublic_html個人ディレクトリのいずれかを要求した場合は、~userアクセスを認証する必要があります。認証はHTTPSを介して行う必要があります。。したがって、HTTPをHTTPSに切り替える必要があります。 HTTPS機能を設定してテストしましたが、このコンテキストでは何も行いませんでした。重要な場合は、FQDNはありません。

~userただし、主な質問は、HTTPを介して認証自体が機能するようにする方法です。

構成をすべて入れuserdir.confました。推測する問題は.NETでワイルドカードを使用することです/home/*/public_html

これはuserdir.conf

<IfModule mod_userdir.c>
        UserDir "public_html"
        UserDir disabled
        UserDir enabled tomas

        <Directory "/home/*/public_html">
                AllowOverride FileInfo AuthConfig Limit Indexes
                Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
                <Limit GET POST OPTIONS>
                        Require all granted
                </Limit>
                <LimitExcept GET POST OPTIONS>
                        Require all denied
                </LimitExcept>
                AuthType Basic
                AuthName "Personal HTML"
                AuthUserFile "/usr/share/apache2/passwd/passwords"
                Require valid-user
                SSLOptions +StdEnvVars
        </Directory>

        <Directory "/home/*/public_html/cgi-bin">
                Options ExecCGI Indexes
                SetHandler cgi-script
        </Directory>
</IfModule>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

この設定ファイルやApacheへの全体的なアプローチに関するコメントがある場合は、コメントを残してください。

答え1

キーはLimitガイドラインです。手がかりは存在する<Limit>コマンド部分mod Apacheドキュメントページcore

<Limit><LimitExcept>ディレクティブでorディレクティブを使用するときは、Require 他のディレクティブの有無にかかわらず、成功した最初のディレクティブが要求を承認することに注意してください。RequireRequire

Require現在のケースと一致する最初のケースによって、処理方法が決定されます。私の質問の構成によると、

            <Limit GET POST OPTIONS>
                    Require all granted
            </Limit>
            <LimitExcept GET POST OPTIONS>
                    Require all denied
            </LimitExcept>
            AuthType Basic
            AuthName "Personal HTML"
            AuthUserFile "/usr/share/apache2/passwd/passwords"
            Require valid-user

Require all granted上記のリストの2行目のGETリクエストは、単純なGETリクエストでこれを行います。そのAuthType Basic下の行と他の行はデッドコードです。正しいアプローチは次のとおりです。

            <Limit GET POST OPTIONS>
                    AuthType Basic
                    AuthName "Personal HTML"
                    AuthUserFile "/usr/share/apache2/passwd/passwords"
                    Require valid-user
            </Limit>
            <LimitExcept GET POST OPTIONS>
                    Require all denied
            </LimitExcept>

ところで、これはディレクティブが無視される場合ですLimit

            Require all granted
            <Limit GET POST OPTIONS>
                    AuthType Basic
                    AuthName "Personal HTML"
                    AuthUserFile "/usr/share/apache2/passwd/passwords"
                    Require valid-user
            </Limit>
            <LimitExcept GET POST OPTIONS>
                    Require all denied
            </LimitExcept>

最初の行はリクエストを成功させて承認します。

関連情報