2014年2月27日木曜日

複数の.htaccessと.htpasswdによるBasic認証

複数の.htaccessと.htpasswdを使用してWebサイトの複数個所にBasic認証を設定する手順です。
どこか1箇所のBasic認証を通過したユーザが他の個所に設定したBasic認証を認証なしで表示でき
ないようにアクセス制御できることを考慮しています。

.htpasswdはWebサイト管理者が管理する想定(CMSでは管理せず、変更は申請制)とし、
.htaccessはWebコンテンツの一部として扱う想定(CMS等で管理可能)とする。

OS: CentOS 6.4(64-bit)
Apache: 2.2.15
hostname: dcf-web
ip: 192.168.3.246


■.htpasswd作成
user10,user11 → ldap1.htpasswdで管理
user20,user21 → ldap2.htpasswdで管理
※ .htpasswdファイルはなるべくDocmentRoot以外のブラウザから直接アクセスできない場所に配置する。
[root@dcf-web ~]# mkdir /etc/httpd/htpasswd/
[root@dcf-web ~]# htpasswd -bc /etc/httpd/htpasswd/ldap1.htpasswd user10 10user
Adding password for user user10
[root@dcf-web ~]# htpasswd -b /etc/httpd/htpasswd/ldap1.htpasswd user11 11user
Adding password for user user11
[root@dcf-web ~]# cat /etc/httpd/htpasswd/ldap1.htpasswd
user10:iYP5xGnK32WPU
user11:lQXWHpaPkcB2c
[root@dcf-web ~]# htpasswd -bc /etc/httpd/htpasswd/ldap2.htpasswd user20 20user
Adding password for user user20
[root@dcf-web ~]# htpasswd -b /etc/httpd/htpasswd/ldap2.htpasswd user21 21user
Adding password for user user21
[root@dcf-web ~]# cat /etc/httpd/htpasswd/ldap2.htpasswd
user20:JQ0GxC.9s6Ips
user21:cwhMtpgo9dJOg
[root@dcf-web ~]#
htpasswd コマンドのオプション
-b: パスワードを直接指定
-c: .htpasswdを新規作成

■httpd.confに.htaccess使用許可設定
最下行に下記のような内容を追記する。
[root@dcf-web ~]# tail -6 /etc/httpd/conf/httpd.conf
<Directory "/var/www/html/ldap1">
    AllowOverride All
</Directory>
<Directory "/var/www/html/ldap2">
    AllowOverride All
</Directory>
[root@dcf-web ~]#
※ 上位階層のディレクティブに対してAllowOverride Allを設定するとWebサーバのパフォーマンスが落ちる可能性があるので注意。

■.htaccess作成
[root@dcf-web ~]# cat /var/www/html/ldap1/.htaccess
AuthType Basic
AuthName "Basic Authentication Area"
AuthUserFile /etc/httpd/htpasswd/ldap1.htpasswd
AuthGroupFile /dev/null
require valid-user
ErrorDocument 401 /401.html
[root@dcf-web ~]# cat /var/www/html/ldap2/.htaccess
AuthType Basic
AuthName "Basic Authentication Area"
AuthUserFile /etc/httpd/htpasswd/ldap2.htpasswd
AuthGroupFile /dev/null
require valid-user
ErrorDocument 401 /401.html
[root@dcf-web ~]#
"401"は認証エラー時のステータスコード。
認証エラーページとして /var/www/html/401.html を準備しておく。

■動作確認
                            user10 user11 user20 user21
http://192.168.3.246/ldap1/    ○      ○      ×      ×
http://192.168.3.246/ldap2/    ×      ×      ○      ○

## access_log
http://192.168.3.246/ldap1/ に user11 でアクセスしたときのログ。
[root@dcf-web ~]# tail -f /var/log/httpd/access_log
192.168.3.13 - - [21/Feb/2014:18:57:15 +0900] "GET /ldap1/ HTTP/1.1" 401 16262 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3)"
192.168.3.13 - user11 [21/Feb/2014:18:57:20 +0900] "GET /ldap1/ HTTP/1.1" 200 16109 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3)"

こちらの情報が何かのお役に立てましたら幸いです。サイト継続ご協力のほどお願い申し上げます。m(_ _)m

0 件のコメント:

コメントを投稿