一、前言
在企业的IT环境中,通常既有windows也有unix/linux服务器,传统情况下,每一台机器有自己的帐号和密码,对用户和管理员来说,要记住自己在N台机器上的账号、密码密码是件超级麻烦和恶心的事情,因此我们需要一个集中的、支持异构系统的身份管理解决方案。
Win/linux的身份整合方案大多数人会想到samba+winbind,但这是一个费力而效果不是很理想的方案,微软在Windows 2003 R2上集成了基于活动目录的Identity Management for UNIX,该组件提供Windows域用户的UNIX账号属性,因此我们在Linux系统上不需要winbind就能实现域用户的LDAP身份验证了。
如果您想要基于Linux充当服务器其他win/linux机器充当客户端的方案,我暂时还不知道,但无论如何不建议使用samba(PDC)+winbind。
在实施本方案前,请先了解什么是LDAP,什么是AD,什么是ObjectClass,什么是DN,知道ldapsearch的用法,了解这些有助于诊断在实施过程中遇到的问题。
二、Windows 2003 Server R2安装与配置
在开始之前,需要注意一件事:从windows 2003 Server R2开始才有Identity Management for UNIX。安装完Windows 2003 R2之后,必须给网卡配置一个静态IP和指定DNS。接下来,我们需要配置域控制器和AD,打开 开始->管理工具->配置您的服务器向导
选择配置”域控制器(Active Directory)“,接下一步
以上只是启用和配置了域控制器,第二步是安装Active Directory Services,进入控制面板->添加删除程序->添加删除Windows组件,出现如下
把Active Directory 服务打钩,接着出错提示,选择是,别管太多。
运行Microsoft Identity Management for UNIX
选择Password Synchronization的属性
在出现的对话框中,把UNIX to Computers that run on Windows勾上,下面的port Number不改,一定要点New Key。
还是在上述对话框中,选择Configuration标签,把最后一项,Enable Windows to NIS(AD) Password Sync打钩。
以上是密码同步属性配置,第三步是创建域用户和组:
首先,需要把Domain Users用户组的UNIX账号属性打开
选择UNIX Attributes标签,选择NIS Domain为myad,GID为10000
接下来我们才能创建一个可以打开UNIX属性的域用户
在本例中,创建的用户登录名为helloworld
完成后,回去看helloworld的用户属性,能够看到标签页UNIX Attributes
设置helloworld用户的UNIX账号属性
为了能让用户从客户端登录,必须重置密码,至此Windows AD端配置完成
三、Linux客户端的配置与测试
1、RHEL 5.5篇
(1)首先确保如下有关LDAP的组件已经安装(32bit版的略有不同)
(2)接下来,编辑/etc/hosts文件,加入adserver.myad.com的IP解析,或者也可以编辑/etc/resolv.conf文件指定namesever为adserver.myad.com的IP地址。
(3)第三步,编辑/etc/nsswitch.conf文件,把passwd,shadow,group的查找指定如下图:
(4)第四步,编辑/etc/openldap/ldap.conf文件,内容如下:
URI ldap://adserver.myad.com BASE dc=myad,dc=com
(5)第五步,编辑/etc/ldap.conf文件,在编辑之前,首先把自带的备份。新建的/etc/ldap.conf文件内容如下
为了安全起见,不使用Administrator来查询,而是创建一个adbind域用户,并加入Domain User、Account Operator组, 如果不加入Account Operator组,用ldapsearch查询DN无法获取unixUserPassword属性值。
上图中的cn=adbind,cn=users,dc=myad,dc=com是查询用户/组账号的LDAP用户DN。
(6) 关闭nscd服务以避免信息缓存的影响
# chkconfig nscd off
# service nscd stop
(7)验证是否已经成功配置AD域验证UNIX/Linux用户
执行如下命令:
[root@rhcs1 ~]# id helloworld
uid=10000(helloworld) gid=10000(Domain Users) groups=10000(Domain Users)
[root@rhcs1 ~]# getent group | grep 'Domain Users'
Domain Users:*:10000:
如果能够看到账户和组的信息,说明身份能够获取,只是身份信息能够获取,我们还需要测试一下登录。在第一次登录之前,helloworld在当前机器的家目录没有创建,其他没有登录的域用户也是一样,为了在第一次登录时自动创建家目录,需要配置一个文件/etc/pam.d/system-auth,在末尾加上一行:
session optional pam_mkhomedir.so
现在首先测试ssh登录本地来验证ssh服务
接下来测试从本地键盘登录:
2、SLES 11 SP1篇
(1)检查LDAP组件是否已经安装(2)修改/etc/pam.d/common-session,加入一行
session optional pam_mkhomedir.so
(3)以下配置文件与RHEL 5.5的配置相同
/etc/nsswitch.conf
/etc/ldap.conf
/etc/openldap.conf
(4)SLES 11 SP1的系统服务启动顺序有些问题,缺省先启动dbus再启动network,这会造成一个阻塞:dbus试图去查找passwd,group信息,而这时nss_ldap会因为network服务没有启动而一直不断尝试连接AD服务器,系统启动到dbus就会挂住。所以我们要分别到/etc/init.d/rc3.d和/etc/init.d/rc5.d下把dbus,network服务改成如下顺序:
lrwxrwxrwx 1 root root 10 Jul 20 03:54 S00network -> ../network
lrwxrwxrwx 1 root root 7 Jul 20 03:52 S01dbus -> ../dbus
lrwxrwxrwx 1 root root 7 Jul 20 03:56 K07dbus -> ../dbus
lrwxrwxrwx 1 root root 10 Jul 20 03:56 K08network -> ../network
(5)关闭nscd服务以避免信息缓存的影响
# chkconfig nscd off
# service nscd stop
(6)SLES 10的配置方法同上
(7)SLES 9的配置方法基本和SLES 10/11一样,但要修改两个文件成如下内容:
/etc/pam.d/login
/etc/pam.d/sshd
四、配置使用web修改域用户密码
Linux客户端上的passwd命令还不能修改域用户的密码,因为域用户的密码会涉及三种加密方式:windows系统密码,NTLM密码,UNIX密码。Windows 2003 R2包含了修改域用户密码的web程序,以下是该程序的配置步骤。
1、安装远程管理组件,从控制面板->添加删除程序->添加Windows组件选择“应用程序服务器”,然后在详细信息里依次选择如下图组件:
2、打开IIS管理器
3、新建虚拟目录
4、输入虚拟目录的别名
5、输入虚拟目录的本地路径
6、查看虚拟目录的属性
7、启用默认内容文档
8、打开设置页面修改密码