Linux|系统管理|WEB开发

关注Linux,系统管理,WEB开发以及开源世界

LDAP+SAMBA+Proftpd+SYSTEM AUTH集成配置

| Comments

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

image

image

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

image

image

确定后,会重启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工具的直观,方便,功能强大的特点。下面是他的一个截图:

image

phpldapadmin的官方网址是:

http://phpldapadmin.sourceforge.net/

另外还有一个基于java的工具LDAPBrowser,下面是他的截图:

image 该软件的官方网址是: http://www-unix.mcs.anl.gov/~gawor/ldap/

九、后记 在刚准备这个方案时,因为对ldap不了解,所以花了不少时间,同时也走了不少弯路,如果大家在配置过程中也遇到这样的问题,建议大家先了解ldap,这样会达到事半功倍的效果。 接下来我想实现openwebmail等一切认证可以支持第三方认证的软件来使用ldap认证。

Comments