在Ubuntu下配置Apache基于AD的Kerberos验证

余额不足 2011-01-26

在Ubuntu下配置Apache基于AD的Kerberos验证前段时间因为项目需要在Ubuntu+Apache的环境下配置了基本Active Directory的Kerberos验证, 主要为了实现WEB应用基于AD的单点登陆SSO(即SingleSignOn).

下面将配置过程做简单记录:

0.先说一下我的环境

Ubuntu9.04 + Apache2.2x + Win2k8 & AD

1.    因为Apache本身是不支持Kerberos的, 所以我们第一步是安装Kerberos Module for Apache即Mod_auth_kerb , 关于这个mod的文档资料和下载可以在官网找到. 在Ubuntu下不需要编译安装, 执行下面的apt-get搞定mod的安装. 安装后Apache的配置中会自动加载mod_auth_kerb.so, 不需要手工修改配置文件.

LINUX
# sudo apt-get install libapache2-mod-auth-kerb

2. 装好Mod_auth_kerb后, 我们来对Kerberos进行配置, 编辑/etc/krb5.conf, 这里建议将原配置文件备份(cp /etc/krb5.conf /etc/krb5_bak.conf), 然后清空原配置文件内容, 贴入如下配置信息并按实际需求进行相应修改(default_realm, kdc, example.com).

CONF
[libdefaults]
 ticket_lifetime = 24000
 default_realm = EXAMPLE.COM
 dns_lookup_realm = false
 dns_lookup_kdc = false
 
[realms]
 EXAMPLE.COM = {
  kdc = dc-01.example.com:88
  kdc = dc-02.example.com:88
 }
 
[domain_realm]
 .example.com = EXAMPLE.COM
 example.com = EXAMPLE.COM
 
[appdefaults]
 pam = {
   debug = false
   ticket_lifetime = 36000
   renew_lifetime = 36000
   forwardable = true
   krb4_convert = false
 }

3. 修改好配置文件后, 我们先来对Kerberos进行一个测试, 验证一下配置是否正确.命令行下执行kinit , 按提示输入AD用户的密码. 再在命令行下执行klist命令, 如果出现如下提示, 表示Kerberos验证成功.

CONF
# kinit Username
Password for Username @ EXAMPLE.COM:
 
# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: Username @ EXAMPLE.COM
 
Valid starting     Expires            Service principal
07/23/10 15:57:06  07/23/10 22:37:06  krbtgt/ EXAMPLE.COM @ EXAMPLE.COM

4. 在WinServer端生成.Keytab文件, 然后将生成的.keytab文件copy到ubuntu上.

CONF
C:\Program Files\Support Tools>ktpass -princ HTTP/apache.server.fqdn@ EXAMPLE.COM -mapuser apache_server -crypto DES-CBC-MD5 -ptype KRB5_NT_PRINCIPAL -mapop set +desonly -pass apache_password -out name.keytab

5. 接下来配置Apahe的http.conf, 使所有或全部的WEB应用通过Kerberos进行登陆验证. Location项即作用路径, 这里我用通配符设置了webroot/krb和webroot/test两个路径. Krb5Keytab项后添上一步生成的keytab文件的及存放路径. 具体如下

CONF
<Location ~ "/(krb|test)">
  AuthName "Kerberos Login"
  AuthType Kerberos
  Krb5Keytab /etc/auth_kerb.keytab
  KrbAuthRealm EXAMPLE.COM
  KrbMethodNegotiate off
  KrbSaveCredentials off
  KrbVerifyKDC off
  Require valid-user
</Location>

6. 重启Apahce

LINUX
# /etc/init.d/apache2 restart

7. 到这里配置过程就全部完成了, 下面我们可以测试一下. 在webroot/krb下建index.php, 写入如下内容.

PHP
<?php
  echo "<table border=\"1\">";
  foreach($_SERVER as $k=>$v){
      echo "<tr><td>".$k."</td><td>".$v."</td></tr>";
  }
  echo "</table>"
?>

浏览器上访问http://hostaddress/krb. 这时浏览器会弹出如下的登陆框, 用AD账号登陆试一下吧, 登陆成功的话页面上会显示$_SERVER信息, 并$_SERVER中会多出个[‘REMOTE_USER’]来.

整个配置过程算是比较顺利, 参考文档如下, 欢迎有兴趣的朋友与我交流 [email protected]

http://sivel.net/2007/05/sso-apache-ad-1/

http://support.microsoft.com/kb/555092/en

http://stackoverflow.com/questions/389175/kerberos-authentification-in-php

http://modauthkerb.sourceforge.net/install.html

https://help.ubuntu.com/community/SingleSignOn

http://www.midgard-project.org/documentation/kerberos-single-sign-on-with-active-directory/

http://michele.pupazzo.org/diary/?p=460

相关推荐