web-dev-qa-db-ja.com

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

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です。

50
Jader Dias

これを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>
75
Lanselot

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

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

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

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

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

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

<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ディレクティブを追加することもできます。

8
Dan Andreatta

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

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

Apacheドキュメント

4
Warner

私はUbuntu 10.10でApache2を実行しています。上記のすべてのソリューションで問題が発生しましたが、これはうまくいきました(Apache docsから):

 <Directory /var/www/>
オプションインデックスFollowSymLinks MultiViews 
 AllowOverride All 
 Order allow、deny 
 allow from all 
 AuthType Basic 
 AuthName "Restricted" 
 AuthBasicProvider file 
 AuthUserFile /etc/users
ユーザーの訪問者を必要とする
 </ Directory> 

上記の回答との最大の違いは、「ファイル」に設定されたAuthBasicProviderディレクティブと、実際のユーザー名の前に「ユーザー」ビットを含むRequireディレクティブです。

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

3
Alex Beynenson

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

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

LoadModule authz_user_module modules/mod_authz_user.so
3
DaveSB