Apache httpd仮想ホストで基本認証を構成する方法は?


48

Apache httpを使用してMercurialアクセスを設定しようとしています。認証が必要です。私/etc/apache2/sites-enabled/mercurialはこのように見えます:

NameVirtualHost *:8080

<VirtualHost *:8080>
    UseCanonicalName Off
    ServerAdmin  webmaster@localhost
    AddHandler cgi-script .cgi
    ScriptAliasMatch ^(.*) /usr/lib/cgi-bin/hgwebdir.cgi/$1
</VirtualHost>

インターネットで読んだすべてのチュートリアルでは、次の行を挿入するように指示されています。

AuthType Basic
AuthUserFile /usr/local/etc/httpd/users

しかし、それを行うと、次のエラーが表示されます。

# /etc/init.d/apache2 reload
Syntax error on line 8 of /etc/apache2/sites-enabled/mercurial:
AuthType not allowed here

私のディストリビューションは、Turnkey Linux RedmineというカスタマイズされたUbuntuです

回答:


73

これをLocationディレクティブ内に配置する必要があります。

<VirtualHost *:8080>

<Location /> #the / has to be there, otherwise Apache startup fails
            Deny from all
            #Allow from (You may set IP here / to access without password)
            AuthUserFile /usr/local/etc/httpd/users
            AuthName authorization
            AuthType Basic
            Satisfy Any # (or all, if IPs specified and require IP + pass)
                        # any means neither ip nor pass
            require valid-user
</Location>
...
</VirtualHost>

1
これは私には機能しません。<Location /opt/mcmap/shapefiles.php> AuthType Kerberos AuthName KerberosLogin KrbServiceName HTTP/intranet.spectrumasa.com KrbMethodNegotiate On KrbMethodK5Passwd On KrbAuthRealms DOMAIN.COM Krb5KeyTab /etc/httpd/conf/intranet.keytab require valid-user Options Indexes MultiViews FollowSymLinks AllowOverride All Order allow,deny Allow from all SetOutputFilter DEFLATE </Location>
shorif2000

1
apacheのdocページでこれをすべて説明していますが、面倒な完全な例は決してありません。例の一部をコピーしましたが、一部を見逃しましたrequire valid-user。完全な例は素晴らしいことです。ありがとう。
バトルブトス

1
@sharifはyourhost.com/のルートURLへのアクセスを意味すると、その認証設定要求すべきである、<場所/>でなければなりません
agbb

1
<Location />いずれにせよ、構成ファイルをロードするときに構文エラーが発生しないようにする必要がありました。
ペルセウス

3
なぜ「多くのトラブルを回避するために修正された」という内部ログメッセージで<Location /> 編集され<Location>ましたが、答え自体の本当の理由については何も語っていませんか?Apacheには<Location>ディレクティブ(つまり、場所のないもの)のようなものはありません。それは間違いなく、今トラブルの原因となります。;)(上記を参照)
Sz。

9

私はubuntu 10.04でApache2を実行しています。同じ問題と解決策に感謝します。構成を配置する必要があることがわかりました/etc/apache2/apache2.conf

htpasswdを使用してユーザー名とパスワードを生成できます。新しいファイル:

$ htpasswd -c /srv/auth/.htpasswd squire

既存のファイルに追加するには:

$ htpasswd -b /srv/auth/.htpasswd squire2 tickleme2

7

場所またはディレクトリを保護できます。ディレクトリの場合、次のようなものを追加します。

<Directory /some/dir/cgi-bin/>
    Options +ExecCGI
    AddHandler cgi-script .cgi
    AuthType Basic
    AuthName 'Private scripts'
    AuthUserFile '/some/other/dir/.htpasswd'
    Require valid-user
</Directory>

あなたはまた、追加することができますDenyし、Allowより細かい制御のためのディレクティブ。


4

で認証設定を指定しているようですVirtualHost。通常、これらの設定はDirectoryディレクティブの下で指定されます。

.htaccesssファイルを使用することもできますが、露出が少ないため、Apache confで指定するのが適切なデフォルトです。

Apacheドキュメント


3

Ubuntu 2.10。でApache2を実行しています。私は上記のすべてのソリューションで問題を抱えていますが、これはうまくいきました(Apacheドキュメントから):

<ディレクトリ/ var / www />
  オプションインデックスFollowSymLinks MultiViews
  すべてを許可
  注文許可、拒否
  すべてから許可する
  AuthType Basic
  AuthName "制限付き"
  AuthBasicProviderファイル
  AuthUserFile / etc / users
  ユーザーの訪問者を要求する
</ Directory>

上記の回答との最大の違いは、AuthBasicProviderディレクティブが「file」に設定されており、Requireディレクティブに実際のユーザー名の前に「user」ビットが含まれていることです。

これが誰かを助けることを願っています。


3

メモリ最適化バージョンのapacheを実行しているときに、この問題が発生しました。

これは、Apache構成に次の行が存在しないためでした。

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