实现基于LDAP的用户管理实现基于LDAP的用户管理马路遥 maluyao@163.com实现基于LDAP的用户管理

马路遥

日常工作当中,我们经常会管理多台Linux服务器,如果每台服务器都有自己独立的用户名和密码。系统管理员就需要维护多套用户名和密码,非常不方便和难于记忆。

笔者从事Linux的培训工作,也经常遇到这样的问题:“每次学生上机的时候,座位可能都是不同的。学生有可能会更改密码,如果互相配合的不好,别人就无法登陆。而且学生上一次保存的文件资料,也很难找到。”于是,笔者就将老师使用的电脑配置成为LDAP和NFS服务器,同时为所有的学生提供密码验证服务来解决这个问题。

服务器端配置OpenLDAP服务器
首先我用为每个学生指定了组名、用户名和密码,分别写如了/etc下的group、passwd和shadow文件。

LDAP服务器我使用的是Fedora Core2 Linux自带的Openldap-server,读者需要确保已经安装了openldap-server 软件包。主流的LDAP服务器还有IBM Directory Server和Sun Java System Directory Server,用她们同样可行。如果您对LDAP服务器有一定了解的话,配置也是大同小异。其中IBM Directory Server可以在Linux平台运行,Sun Java System Directory Server 可以在Linux/Windows/Solaris 平台运行。

#载入模版

include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/nis.schema
allow bind_v2
pidfile /var/run/slapd.pid
#配置访问控制列表使得用户可以修改自己的密码和查询其他资料
access to attr=userPassword
by self write
by anonymous auth
access to dn="dc=tiantian,dc=com"
by self write
by * read
database ldbm
suffix "dc=tiantian,dc=com"
rootdn "cn=Manager,dc=tiantian,dc=com"
#ldap 管理员的密码,亦可实用密文的形式
rootpw secret
# rootpw {crypt}ijFYNcSNctBYg
directory /var/lib/ldap

执行service ldap start 命令来启动ldap服务器。

进入/usr/share/openldap/migration/ 目录,这个目录中有一些perl脚本,可以将/etc/group中的组名以及/etc/passwd 和/etc/shadow中的用户和密码导出成为ldif格式的文件共Openldap服务器使用。如果您的Openldap 服务起。器是自行编译的。则需要去http://www.padl.com/ 下载着些脚本。
先编辑migrate_common.ph 文件,将其中两行改为下列形式
$DEFAULT_MAIL_DOMAIN = "tiantian.com";
$DEFAULT_BASE = "dc=tiantian,dc=com";
要注意修改的方法要和您/etc/sldap.conf 中的dc=tiantian,dc=com 相对应。

执行
./migrate_base.pl > /root/base.ldif
./migrate_group.pl /etc/group >> /root/base.ldif
./migrate_passwd.pl /etc/passwd >> /root/base.ldif

上述3个命令将Openldap服务器初始化所需要的资料写如/root/base.ldif
执行下列命令:
ldapadd –x –D ‘cn=Manager,dc=tiantian,dc=com’ –W –f /root/base.ldif

这样,我们一经将所有用户、组及其密码导入了ldap服务器.
客户端配置用户验证方法
在客户端执行authconfig 或authconfig-gtk命令,执行authconfig命令后如图:
[inline:1.png]
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 

下一步,如图
[inline:2.png]
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 

  对于客户机器而言,应该将服务器地址写为提供LDAP服务的机器上。
注意,客户端需要每次启动之后自动运行nscd服务,您可以通过执行ntsysv 命令来使nscd服务自动执行,也可以使用chkconfig –level 35 nscd on 命令来做同样的事情。并且,服务器本身也可以使用自己的Openldap 服务器来进行用户验证。

服务器端配置NFS服务
配置NFS服务器。这很简单。只需要在/etc/exports 写一行:
/home (rw)
就可以了。并且使得portmap nfs 服务都能够自动运行。
chkconfig --level 35 portmap on
chkconfig --level 35 nfslock on
chkconfig --level 35 nfs on
如果实用NFS v4 则需要开启另外几个rpc服务。

客户端配置nfs
在/etc/fstab 中增加一行:
server:/home /home nfs defaults 1 1
并且使得portmap 和netfs服务能够自动运行:
chkconfig –-level 35 portmap on
chkconfig –-level 35 netfs on如果netfs 服务没有自动打开。则客户机无法在启动的时候成功mount nfs 卷。

总结
配置完成后,不论用户在那台机器上登陆,都会去服务器验证密码。登陆后所在的初始位置,表面上是客户机/home/username ,但实质上是服务器上的/home/username,这样一来,该用户以前曾经保存的文档资料,都会储存在服务器中。不论用户在何处登陆,文档资料总是位于同样的位置。而且,全部用户的密码资料,都在Openldap Server 中,即可以由LDAP 管理员同一维护,也可以有用户使用passwd 命令来修改,只不过。这时的passwd 命令改变的不是/etc/shadow 和/etc/passwd 文件。而是OpenLdap Server中的资料。

本文在Fedora Core 2 上完成,但文中所用的方法,在Redhat 7.2/7.3/8.0/9.0 同样有效,文中的插图同样取自Fedora Core 2 ,在其他版本的Linux上,您所看到的可能会略有不同。

附件大小
Image icon 1.png77.14 KB
Image icon 2.png58.75 KB

Comments

非常感谢

請教一個問題:

您把帳戶的資訊轉成了ldap的,
可是後期的修改密碼後
其資訊是ldap中,
也就是以ldap為驗證了,對嗎?

謝謝,我會測試的.

没太明白你的意思。按文中方法操作的话,如果用passwd 命令修改密码的话,修改的是ldap服务器中的资料。
------------------
把酒当歌,黎曼几何。

FC5 下,访问控制列表改为如下形式:

access to attrs=userPassword
by dn="cn=Manager,dc=dg,dc=tt,dc=com" write
by anonymous auth
by self write
by * none
access to *
by dn="cn=Manager,dc=tt,dc=com" write
by * read

------------------
把酒当歌,黎曼几何。

randomness