Windows的AD(Active Directory)是一个DAP(Directory Access Protocol)的一个完美演绎,使用AD创建的域,使得普通用户的登录信息于机器无关,而且可以实现单点登录(single sign on).目前Linux下面可以勉强达到这个水平的可能只有RADIUS。 现在我要介绍的这个方案是基于LDAP的认证方式,也就是samba, ftp,system的认证信息都是来自ldap数据库,而不是原来的密码文件,这样做的好处是密码的统一管理,减少风险,比如你可能并不希望ftp, mail等帐号的认证用到系统帐号,这个时候你就可以考虑这个方案(当然你也可以使用像mysql这样的数据库)。
好了,废话不说了,现在看如何搭建这样的一个服务: 一、准备工作 这个方案于系内核的关系不是很大,主要是以来的几个服务。基本上,你的系统需要下面的几个包: openldap nss_ldap openldap-serversAX smbldap-tools openldap-clients proftpd 其中smbldap-tools是一个方便我们配置和修改ldap数据库的perl程序组,Fedora Core似乎没有安装这个软件,那么你可以到下面的地址来下载: http://www.idealx.org/prj/samba/index.fr.html
如果这些软件你都已经有了,那我们开始配置了.
二、配置ldap
修改/etc/openldap/slapd.conf文件,加入samba的schema,修改rootdn和passwd。
下面是我的配置信息
include /etc/openldap/schema/core.schema include
/etc/openldap/schema/cosine.schema include
/etc/openldap/schema/inetorgperson.schema include
/etc/openldap/schema/nis.schema include
/etc/openldap/schema/samba.schema include
/etc/openldap/schema/redhat/autofs.schema database bdb suffix
"dc=mlsx,dc=com" rootdn "cn=Manager,dc=mlsx,dc=com" rootpw abc123
这里的rootpw使用的明文,实际上你可以使用加密的方法。比如你需要abc123这个密码,但是用密文显示,那你可以这样做:
#slappasswd -h{ SSHA } -s abc123
{ SSHA}fkowonfOAxYXUa+ygm4fDvwGtEVubD9L
然后把rootpw那行替换成下面的这行
rootpw {SSHA }fkowonfOAxYXUa+ygm4fDvwGtEVubD9L
保存好,现在启动你的ldap服务。
#/etc/init.d/ldap start
三、添加数据。
向ldap数据库添加数据有三种方法,一是编写ldif文件,导入数据,二是使用某些ldap的管理工具(比如phpldapadmin,一个类似phpmysqladmin的工具),三是使用smbldap-tools工具集。
这里我们使用第三种方式。
首先修改/etc/samba/smbldap_bind.conf文件,添加必要信息如下:
masterDN="cn=Manager,dc=mlsx,dc=com" masterPw="abc123"
然后执行:
[root@ha191 samba]# smbldap-populate.pl
Using builtin directory structure
adding new entry: dc=mlsx,dc=com
adding new entry: ou=Users,dc=mlsx,dc=com
adding new entry: ou=Groups,dc=mlsx,dc=com
adding new entry: ou=Computers,dc=mlsx,dc=com
adding new entry: uid=Administrator,ou=Users,dc=mlsx,dc=com
adding new entry: uid=nobody,ou=Users,dc=mlsx,dc=com
adding new entry: cn=Domain Admins,ou=Groups,dc=mlsx,dc=com
adding new entry: cn=Domain Users,ou=Groups,dc=mlsx,dc=com
adding new entry: cn=Domain Guests,ou=Groups,dc=mlsx,dc=com
adding new entry: cn=Administrators,ou=Groups,dc=mlsx,dc=com
adding new entry: cn=Users,ou=Groups,dc=mlsx,dc=com
adding new entry: cn=Guests,ou=Groups,dc=mlsx,dc=com
adding new entry: cn=Power Users,ou=Groups,dc=mlsx,dc=com
adding new entry: cn=Account Operators,ou=Groups,dc=mlsx,dc=com
adding new entry: cn=Server Operators,ou=Groups,dc=mlsx,dc=com
adding new entry: cn=Print Operators,ou=Groups,dc=mlsx,dc=com
adding new entry: cn=Backup Operators,ou=Groups,dc=mlsx,dc=com
adding new entry: cn=Replicator,ou=Groups,dc=mlsx,dc=com
adding new entry: cn=Domain Computers,ou=Groups,dc=mlsx,dc=com
基本信息已经导入。在开始添加帐号信息之前,需要配置samba。
四、配置samba samba默认使用smbpasswd程序来认证帐号。这里我们使用ldap来认证,需要修改和增加的配置如下:
passdb backend=ldapsam:ldap://172.16.81.191
ldap admin dn=cn=Manager,dc=mlsx,dc=com
ldap suffix=dc=mlsx,dc=com
add machine script=smbldap-useradd -w “%u”
add user script=smbldap-useradd -m “%u”
ldap delete dn=yes
add group script=smbldap-groupadd -p “%u”
add user to group script=smbldap-groupmod -m “%u” “%g”
至于其他配置就和没有什么不同了。
好了,现在启动samba。
#/etc/init.d/smb start
给samba设置连接ldap的密码。
[root@ha191 openldap]# smbpasswd -w abc123 Setting stored password for "cn=Manager,dc=mlsx,dc=com" in secrets.tdb
到现在为止,我们可以添加帐号信息了。使用下面的命令
#smbldap-useradd.pl -a -m -c "fine account" smb1 #smbldap-passwd smb1
使用这个帐号就可以连接到你的samba服务器了。
五、修改系统认证
如果希望系统也能使用这个帐号登录,那么需要修改系统的认证方式。
如果有authconfig配置工具,你可以使用这个工具来方便配置,配置流程如下:
#authconfig


有的authconfig看到的可能是下面这个样子:


确定后,会重启nscd服务。
如果没有这个配置工具,那就只能手工修改/etc/pam.d/system-auth文件,修改如下:
#cat /etc/pam.d/system-auth
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth required /lib/security/$ISA/pam_env.so
auth sufficient /lib/security/$ISA/pam_unix.so likeauth nullok
auth sufficient /lib/security/$ISA/pam_ldap.so use_first_pass
auth required /lib/security/$ISA/pam_deny.so
account required /lib/security/$ISA/pam_unix.so
account [default=bad success=ok user_unknown=ignore service_err=ignore system_err=ignore authinfo_unavail=ignore] /lib/security/$ISA/pam_ldap.so
password required /lib/security/$ISA/pam_cracklib.so retry=3 type=
password sufficient /lib/security/$ISA/pam_unix.so nullok use_authtok md5 shadow
password sufficient /lib/security/$ISA/pam_ldap.so use_authtok
password required /lib/security/$ISA/pam_deny.so
session required /lib/security/$ISA/pam_limits.so
session required /lib/security/$ISA/pam_unix.so
session optional /lib/security/$ISA/pam_ldap.so
保存后,切换到终端,尝试使用smb1帐号登录。 如果你使用的是RedFlag Linux 4系列产品,那么上面的操作你可能没有办法让你从系统登录,你需要升级的你的nss_ldap库。
六、配置proftpd proftpd 默认使用系统帐号来认证,这对于想对外提供ftp服务的人来说,显然是一个痛苦的决定,因为系统帐号过多,对于管理是一个很麻烦的问题,还有就是如何申请 ftp帐号也是一个问题,于是我们希望能够使用其他方式来提供帐号认证。ldap显然是一个不错的主意,我们看看如果配置proftpd使得其认证可以用 ldap完成。 其实配置proftpd完成ldap认证,很简单,你只需要在你的字段加入下面几行,重启ftp就可以了。
LDAPServer 172.16.81.191
LDAPDNInfo cn=manager,dc=mlsx,dc=com abc123
LDAPDoAuth on ou=Users,dc=mlsx,dc=com
现在你使用smb1这个帐号登录ftp服务看看,是不是很方便?
七、其他配置 其实你还有使用ldap来做其他服务器的认证,比如apache。上面的配置都是使用了比较方便的配置工具,如果你对ldap比较熟悉,那你也完全可以自己编写ldif文件来设置帐号信息。
八、有用的工具 管理ldap也有一些有用的工具,其中比较有名的是phpmysqladmin的姊妹工具--phpldapadmin了,它秉承了phpmysqladmin工具的直观,方便,功能强大的特点。下面是他的一个截图:

phpldapadmin的官方网址是:
http://phpldapadmin.sourceforge.net/
另外还有一个基于java的工具LDAPBrowser,下面是他的截图:
该软件的官方网址是:
http://www-unix.mcs.anl.gov/~gawor/ldap/
九、后记 在刚准备这个方案时,因为对ldap不了解,所以花了不少时间,同时也走了不少弯路,如果大家在配置过程中也遇到这样的问题,建议大家先了解ldap,这样会达到事半功倍的效果。 接下来我想实现openwebmail等一切认证可以支持第三方认证的软件来使用ldap认证。