文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>实现基于LDAP的用户管理实现基于LDAP的用户管理马..

实现基于LDAP的用户管理实现基于LDAP的用户管理马..

时间:2006-11-20  来源:huanghaojie

http://zh.linuxvirtualserver.org/node/385


日常工作当中,我们经常会管理多台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 平台运行。

配置文件/etc/openldap/slapd.conf

#载入模版

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 jiangtao #(这里这样写,不然后面的 ldapadd –x –D ‘cn=Manager,dc=tiantian,dc=com’ –W –f /root/base.ldif 执行会报错)

# 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命令后如图:

 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 

下一步,如图

 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 

  对于客户机器而言,应该将服务器地址写为提供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上,您所看到的可能会略有不同。

附件 大小
1.png 77.14 千字节
2.png 58.75 千字节


LDAP命令解释:   http://www.metaconsultancy.com/whitepapers/ldap.htm

增加与修订对象

增加对象的命令是 ldapadd,修订对象的命令是ldapmodify,两个命令的用法是一样的,只是对于新增加的对象使用前者,而修改已经存在的对象使用后者。

现在,我们把用户 wangxu 的描述写入 user.ldif 文件,利用这个文件,我们来增加用户 wangxu

ldapadd -x -v -D cn=admin,dc=cg,dc=com,dc=cn -W < user.ldif

这里的参数们的含义是

  • -x,使用简单认证方式,而不是SASL,这个选项在后面仍然很常用
  • -v,输出更多信息
  • -D cn=admin,dc=cg,dc=com,dc=cn,使用此用户进行增加操作,显然用管理员比较好使,增加用户的权限不是谁都有的
  • -W,提示输入密码,也可以在命令行里面给出密码,这时的参数应该是 -w password,这对于脚本来说比较方便

此外,

  • 如果文件中描述了多个 dn,则可以一次添加多个
  • 修改用户 wangxu,只要写好 ldif 文件,用ldapmodify命令和同样的命令行参数就可以了。
[编辑]

查询、修改密码、删除对象

查询的命令是 ldapsearch ,上面我们已经用过一次了,查找 teacher 组,其他查询照此办理即可。

修改密码的命令是 ldappasswd,命令行中,我们需要给出用哪个用户修改密码和修改哪个用户的密码两个dn,可能相同,也可能不同,比如

ldappasswd -x -v -S -W -D ou=admin,dc=cg,dc=com,dc=cn uid=wangxu,ou=stl,dc=cg,dc=com,dc=cn 

这里,是使用 admin (-D 后面指明的) 来修改用户 wangxu (命令行中的用户,而不是参数) 的密码,所有的参数和 ldapadd 的含义相同,唯一多出来的是

  • -S 参数是要求命令提示用户输入两次新的密码,来确认密码更新,使用 -s newpasswd 可以在命令行中指定新密码。

而删除对象的命令则是 ldapdelete,也要指定两个对象,哪个对象删除和删除哪个对象

ldapdelete -x -v -W -D ou=admin,dc=cg,dc=com,dc=cn uid=wangxu,ou=stl,dc=cg,dc=com,dc=cn 

命令就是 admin 删除用户 wangxu 这个 ldap 对象。不过,同学们,没事千万不要拿 wangxu 这个对象来练手啊!

[编辑]

目录服务器内建命令

目录服务器 slapd 提供了一组内建工具,这些工具需要在目录服务器停止之后才可以使用,用于管理员的系统维护

  • slapcat 读取目录服务器的内容,可以用来备份
  • slapadd 添加对象
  • slapindex 添加对象后,重新索引

slap系列命令的 I/O 同样使用 ldif 文件格式


排行榜 更多 +
少女爱换装

少女爱换装

休闲益智 下载
百变英雄射击

百变英雄射击

飞行射击 下载
魔灵契约

魔灵契约

休闲益智 下载