本資料はCentOS6, Apache/2.2.15 (Unix)を使用してベーシック認証の設定を行った手順を記してあります。
尚、CentOS6のhttpdはyumコマンドによりhttpdパッケージをインストールしました。
iptablesなどにより外部から接続できない場合は、以下の資料が参考になるかもしれません。
ベーシック認証の環境を構築したOSおよびApacheバージョンです。
# cat /etc/redhat-release CentOS release 6.3 (Final) # httpd -v Server version: Apache/2.2.15 (Unix) Server built: Feb 13 2012 22:31:42
ベーシック認証を設定するために、mod_authモジュールが有効になっているか確認します。
apache(httpd)の設定ファイルであるhttpd.confを確認します。
(CentOSでは、/etc/httpd/conf/httpd.confにあります。)
コメントアウトされていないので有効になっていることが確認できました。
# # Dynamic Shared Object (DSO) Support # # To be able to use the functionality of a module which was built as a DSO you # have to place corresponding `LoadModule' lines at this location so the # directives contained in it are actually available _before_ they are used. # Statically compiled modules (those listed by `httpd -l') do not need # to be loaded here. # # Example: # LoadModule foo_module modules/mod_foo.so # LoadModule auth_basic_module modules/mod_auth_basic.so <snip>
この資料では、ベーシック認証用のパスワードファイルは、/etc/httpd/.htpasswdに保存することにします。
rootになり、以下のコマンドにより、ベーシック認証用のパスワードファイルを作成します。
htpasswd -c /etc/httpd/.htpasswd ユーザ名
以下の実行例は、ユーザsakuraで作成しています。
パスワードとする文字列を2度入力するとベーシック認証用の.htpasswdファイルが作成されます。
# htpasswd -c /etc/httpd/.htpasswd sakura New password: Re-type new password: Adding password for user sakura
# ls /etc/httpd/.htpasswd /etc/httpd/.htpasswd # cat /etc/httpd/.htpasswd sakura:P/90xXxXxXxXx
# ls /etc/httpd/.htpasswd ls: cannot access /etc/httpd/.htpasswd: そのようなファイルやディレクトリはありません [root@centos6 ~]# htpasswd -c /etc/httpd/.htpasswd sakura New password: Re-type new password: Adding password for user sakura [root@centos6 ~]# cat /etc/httpd/.htpasswd sakura:NGabcdefghijhhtpasswd -c でtsubakiユーザを作成し.htpasswdファイルを確認
# htpasswd -c /etc/httpd/.htpasswd tsubaki New password: Re-type new password: Adding password for user tsubaki # cat /etc/httpd/.htpasswd tsubaki:Jz1234567890asakuraが削除されているのが確認できます。
作成したパスワードファイルのパーミッションを変更します。
この資料では、.htpasswdファイルはapacheユーザのものに変更しapacheユーザのみが読み書きできるように変更しました。
# chown apache:apache /etc/httpd/.htpasswd # chmod 600 /etc/httpd/.htpasswd # ls -l /etc/httpd/.htpasswd -rw-------. 1 apache apache 43 9月 24 11:17 2012 /etc/httpd/.htpasswd
みなさんの環境に応じて適正なパーミッションを設定してください。
ユーザ追加の場合は、htpasswdコマンドにオプションなしで実行すれば引数で指定したユーザを追することができます。
# htpasswd /etc/httpd/.htpasswd tsubaki New password: Re-type new password: Adding password for user tsubaki # cat /etc/httpd/.htpasswd sakura:NGabcdefghijh tsubaki:Jz1234567890a
パスワードの更新の場合は、htpasswdコマンドにオプションなしで実行すれば引数で指定したユーザのパスワードを変更することができます。
# htpasswd /etc/httpd/.htpasswd sakura New password: Re-type new password: Updating password for user sakura
今回使用した環境デフォルトのままであり、以下のように設定されています。
DocumentRoot "/var/www/html" : : : <Directory "/var/www/html"> : :
本資料では、<Directory "/var/www/html"> 中略 </Directory>にダイジェスト認証の設定を行います。
変更した内容は以下の通りになります。
<Directory "/var/www/html">
AuthType Basic
AuthName "AuthArea"
AuthUserFile /etc/httpd/.htpasswd
Require valid-user
:
追加したのは、以下の4行です。
AuthType Basic AuthName "AuthArea" AuthUserFile /etc/httpd/.htpasswd Require valid-user
AuthTypeにはBasic
AuthNameには、AuthAreaという領域名を設定
AuthUserFileには、htpasswdコマンドで指定したダイジェスト用パスワードファイルを設定
Require valid-userを追記しました。
Apacheが既に起動している場合は、Apacheを再起動します。
停止している場合は、Apacheを起動してください。
今回は、CentOSを利用しているので以下のコマンドで起動、停止、再起動ができます。
service httpd start
service httpd stop
service httpd stop
ブラウザを起動してBasic認証を設定したホストに接続します。
きちんと設定されていれば、以下のように認証画面が表示されます。
AuthNameに指定した文字列が表示されているのが確認できます。
認証にはユーザIDパスワードはhtpasswdコマンドで指定した値を使用します。