複数の.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