2012年2月12日日曜日

ApacheからKerberos認証でADユーザを利用する

Apacheにmod_auth_kerbを組み込み、Kerberos認証を使ってActiveDirectoryのユーザを利用する方法です。 Basic認証より安全かも。AD一元管理されたユーザ/パスワードを利用できるので運用がラク。
・ActiveDirectoryサーバOS: Windows Server 2008 R2
 → FQDNは win2k8r2-ad01.kuitan.net

・LinuxサーバOS: CentOS6.2 (64-bit)
 →Apacheバージョン: 2.2.15
 →Sambaバージョン: 3.5.10
 ※その他、samba-winbindが必要です。事前準備ヨロ。


--- Step1. まずはActiveDirectoryサーバに接続させる。 ---

■smb.confの設定 ⇒[global]セクションの最下部に下記を追記 [root@srv04 samba]# vi smb.conf 262行目あたりから # ---- Settings for Winbind ---- security = ads workgroup = KUITAN realm = KUITAN.NET password server = win2k8r2-ad01.kuitan.net encrypt passwords = true idmap uid = 10000-25000 idmap gid = 10000-20000 winbind use default domain = yes winbind cache time = 90 # winbind nested groups = yes # template shell = /bin/bash # template homedir = /home/%U ■nsswitch.confの設定 [root@srv04 ~]# vi /etc/nsswitch.conf [root@srv04 ~]# grep -n winbind /etc/nsswitch.conf 33:passwd: files winbind 34:shadow: files winbind 35:group: files winbind ■AD連携に必要なSamba関連パッケージ確認 [root@srv04 ~]# rpm -qa | grep samba samba-winbind-clients-3.5.10-114.el6.x86_64 samba4-libs-4.0.0-23.alpha11.el6.x86_64 samba-common-3.5.10-114.el6.x86_64 samba-client-3.5.10-114.el6.x86_64 samba-3.5.10-114.el6.x86_64 [root@srv04 ~]# ・samba →OK ・samba-client →OK ・samba-common →OK ・samba-winbind →ないので追加インストール ⇒yumレポジトリの設定 [root@srv04 ~]# vi /etc/yum.repos.d/dvd.repo [root@srv04 ~]# cat /etc/yum.repos.d/dvd.repo [dvd] name=CentOS-6.2-x86_64-DVD1 baseurl=file:///media/CentOS_6.2_Final/ enabled=0 gpgcheck=1 gpgkey=file:///media/CentOS_6.2_Final/RPM-GPG-KEY-CentOS-6 [root@srv04 ~]# ⇒samba-winbindをメディアからインストール [root@srv04 ~]# yum --disablerepo=\* --enablerepo=dvd install samba-winbind (中略) Installed: samba-winbind.x86_64 0:3.5.10-114.el6 Complete! [root@srv04 ~]# ■krb5.confの設定 [root@srv04 ~]# vi /etc/krb5.conf [root@srv04 ~]# cat /etc/krb5.conf [logging] default = FILE:/var/log/krb5libs.log kdc = FILE:/var/log/krb5kdc.log admin_server = FILE:/var/log/kadmind.log [libdefaults] default_realm = KUITAN.NET dns_lookup_realm = false dns_lookup_kdc = false ticket_lifetime = 24h renew_lifetime = 7d forwardable = true [realms] KUITAN.NET = { kdc = win2k8r2-ad01.kuitan.net admin_server = win2k8r2-ad01.kuitan.net } [domain_realm] .kuitan.net = KUITAN.NET kuitan.net = KUITAN.NET [root@srv04 ~]# ■/etc/hosts修正 [root@srv04 ~]# cat /etc/hosts 127.0.0.1 srv04.kuitan.net srv04 localhost localhost.localdomain localhost4 localhost4.localdomain4 # ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.xxx.144 srv04.kuitan.net srv04 192.168.xxx.125 win2k8r2-ad01.kuitan.net [root@srv04 ~]# ■samba起動 [root@srv04 ~]# /etc/init.d/smb start SMB サービスを起動中: [ OK ] [root@srv04 ~]# ■ADサーバと時刻同期 [root@srv04 ~]# net time set -I win2k8r2-ad01.kuitan.net 2012年 2月 12日 日曜日 15:43:10 JST [root@srv04 ~]# net ads info LDAP server: 192.168.xxx.125 LDAP server name: win2k8r2-ad01.kuitan.net Realm: KUITAN.NET Bind Path: dc=KUITAN,dc=NET LDAP port: 389 Server time: 日, 12 2月 2012 15:43:14 JST KDC server: 192.168.xxx.125 Server time offset: 0 [root@srv04 ~]# /etc/init.d/winbind status winbindd は停止しています [root@srv04 ~]# →winbindが停止していてもドメインへの接続は可能。 ■winbindを起動してAD上のユーザを確認 [root@srv04 ~]# wbinfo -u Error looking up domain users [root@srv04 ~]# /etc/init.d/winbind start Winbind サービスを起動中: [ OK ] [root@srv04 ~]# wbinfo -u administrator guest krbtgt aduser01 aduser02 aduser03 aduser04 aduser05 [root@srv04 ~]#

--- Step2. ApacheからKerberos認証を利用する設定 ---

■mod_auth_kerbインストール [root@srv04 ~]# yum --disablerepo=\* --enablerepo=dvd install mod_auth_kerb (中略) Installed: mod_auth_kerb.x86_64 0:5.4-6.el6 Complete! [root@srv04 ~]# ■keytabファイル作成 [root@srv04 ~]# net ads keytab add HTTP -U administrator Warning: "kerberos method" must be set to a keytab method to use keytab functions. Processing principals to add... Enter administrator's password: [root@srv04 ~]# ⇒確認 [root@srv04 ~]# ll /etc/krb5.keytab -rw------- 1 root root 363 2月 12 15:56 2012 /etc/krb5.keytab [root@srv04 ~]# net ads keytab list Warning: "kerberos method" must be set to a keytab method to use keytab functions. Vno Type Principal 3 DES cbc mode with CRC-32 HTTP/srv04.kuitan.net@KUITAN.NET 3 DES cbc mode with RSA-MD5 HTTP/srv04.kuitan.net@KUITAN.NET 3 ArcFour with HMAC/md5 HTTP/srv04.kuitan.net@KUITAN.NET 3 DES cbc mode with CRC-32 HTTP/srv04@KUITAN.NET 3 DES cbc mode with RSA-MD5 HTTP/srv04@KUITAN.NET 3 ArcFour with HMAC/md5 HTTP/srv04@KUITAN.NET [root@srv04 ~]# ■確認用コンテンツ準備 [root@srv04 ~]# mkdir /var/www/html/krb [root@srv04 ~]# vi /var/www/html/krb/index.html [root@srv04 ~]# cat /var/www/html/krb/index.html <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> </head> <body> Kerberos認証に成功しました。<br> </body> </html> [root@srv04 ~]# ■auth_kerb.conf [root@srv04 ~]# cd /etc/httpd/conf.d/ [root@srv04 conf.d]# cp -p auth_kerb.conf auth_kerb.conf.20040909 [root@srv04 conf.d]# vi auth_kerb.conf [root@srv04 conf.d]# grep -v "^#\|^$" auth_kerb.conf LoadModule auth_kerb_module modules/mod_auth_kerb.so AuthType Kerberos AuthName "Kerberos Login" KrbMethodNegotiate Off KrbMethodK5Passwd On KrbAuthRealms KUITAN.NET Krb5KeyTab /etc/krb5.keytab KrbVerifyKDC Off require valid-user [root@srv04 conf.d]# ■Apache起動 [root@srv04 ~]# /etc/init.d/httpd start httpd を起動中: [ OK ] [root@srv04 ~]# ■ブラウザから接続確認
http://192.168.xxx.144/krb/ ユーザ:aduser01 パスワード:******* 画面に「Kerberos認証に成功しました。」と表示されれば成功です。 ■その他補足1 ⇒httpd-develとkrb5-develは不要だった [root@srv04 ~]# rpm -qa | grep httpd httpd-tools-2.2.15-15.el6.centos.x86_64 httpd-2.2.15-15.el6.centos.x86_64 httpd-manual-2.2.15-15.el6.centos.noarch [root@srv04 ~]# rpm -qa | grep krb5 krb5-libs-1.9-22.el6.x86_64 krb5-workstation-1.9-22.el6.x86_64 pam_krb5-2.3.11-9.el6.x86_64 [root@srv04 ~]# →インストールしていなくても動作した。 ■その他補足2 auth_kerb.confのKrbMethodNegotiate の値をOffにすると、 Kerberosではなさそうな認証画面が表示され、正しいユーザと パスワードを入力してもInternal Server Errorとなった。 [root@srv04 conf.d]# grep -v "^#\|^$" auth_kerb.conf LoadModule auth_kerb_module modules/mod_auth_kerb.so AuthType Kerberos AuthName "Kerberos Login" KrbMethodNegotiate On ←Offから変更 KrbMethodK5Passwd On KrbAuthRealms KUITAN.NET Krb5KeyTab /etc/krb5.keytab KrbVerifyKDC Off require valid-user [root@srv04 conf.d]# [root@srv04 ~]# /etc/init.d/httpd restart httpd を停止中: [ OK ] httpd を起動中: [ OK ] [root@srv04 ~]#
→OKボタンを押してもInternal Server Errorになった…。

0 件のコメント:

コメントを投稿