首页 > 代码库 > Linux -- 目录服务配置及应用(LDAP协议)(2)

Linux -- 目录服务配置及应用(LDAP协议)(2)

14.5  设置主从LDAP服务器

在某些时候,为了对LDAP服务器进行负载均衡,可能希望设置多台LDAP服务器。对于设置多台LDAP服务器的关键问题是数据的同步问题,使用slurpd进程可进行主LDAP服务器向从LDAP服务器复制数据的操作。本节将介绍架设主从LDAP服务器的过程。

14.5.1  多台LDAP服务器工作过程

对于多台LDAP服务器,可设置一台为主服务器,其他的为从服务器。本节介绍一台从服务器的配置,若是多台从服务器也可按此步骤进行操作。

注意:在进行配置之前应首先确保每个LDAP服务器都已安装好OpenLDAP服务器程序,并能正确工作。

通过本节下面介绍的方法配置好主从LDAP服务器之后,在主服务器运行slurpd进程,该进程使用LDAP协议从主服务器的数据库更新从服务器的数据,具体操作过程如下:

(1)LDAP客户端向从服务器提交一个LDAP修改请求。

(2)从服务器给LDAP客户端返回一个指向主服务器的引用。

(3)LDAP客户端向主服务器提交LDAP修改请求。

(4)主服务器对数据库中的数据进行修改,并将改变写入本机的日志文件。

(5)在主服务器运行的slurpd进程检查到日志中有新内容,通过日志的信息将改变发送给从服务器。

(6)从服务器接收slurpd发来的信息,对本地数据进行修改。

以上过程就是使用slurpd进程进行数据复制的过程。从以上过程可看出,需要在主服务器的配置文件中设置要向哪些从服务器发送复制信息、主服务器还要设置一个记录数据改变的日志文件,而从服务器需要设置一个指向主服务器的链接。

14.5.2  设置主服务器

要设置主服务器,首先需要修改主LDAP服务器的配置文件sladp.conf,在其中添加复制选项,并设置日志文件的位置和名称。

执行以下命令打开主配置文件slapd.conf:

# vi  /etc/openldap/slapd.conf

在打开的配置文件末尾添加以下内容:

1:  # Replicas of this database  2:  replogfile /var/lib/ldap/openldap-master-replog  3:  replica host=192.168.206.130:389  4:          binddn="cn=Manager, dc=wyh, dc=com" 5:          bindmethod=simple credentials=secret

各行的含义如下:

第2行设置日志文件的位置和名称。

第3行设置从服务器的域名或IP地址,其中的389表示LDAP服务进程默认端口。

第4行设置超级管理员的dn,在从服务器中有一项设置,必须与这行对应。

第5行设置认证方式。

修改配置文件的界面如图14-15所示。

%22


按以上步骤设置,当主服务器中的数据有改变时,改动将添加到日志文件openldap-master-replog中,而在最初该文件是不存在的。


提示:要测试主服务器是否设置成功,可修改主服务器中的一个条目,查看是否生成日志文件openldap-master-replog。

【实例14-4】测试主服务器是否配置成功。

具体操作步骤如下:

(1)使用以下命令中止slapd服务进程:

# kill  -INT  `cat /var/run/openldap/slapd.pid`

(2)再使用以下命令用新的配置文件重启slapd服务进程:

# slapd

(3)使用以下命令修改已有的一个条目:

# ldapmodify  -x  -D  "cn=Manager,dc=wyh,dc=com"  -w  secret

输入以下内容对cn=wyh这个条目进行修改:

dn: cn=wyh,ou=managers,dc=wyh,dc=com changetype: modify  replace: sn  sn: wuyunhui.modi

输入后按Enter键完成修改操作,按Ctrl+C键退出修改命令。修改过程如图14-16所示。

%22


(4)查看/var/lib/ldap/目录,可看到增加了2个文件,这就是对主服务器中的数据条目进行修改后产生的日志文件,如图14-17所示。

经过以上测试,可知道主服务器配置完成。

%22


14.5.3  设置从服务器

对从LDAP服务器也需要修改配置文件sladp.conf,使其能与主LDAP服务器进行链接。

提示:对每一台从LDAP服务器都需要进行相同的设置。

执行以下命令打开从服务器中的配置文件slapd.conf:

# vi  /etc/openldap/slapd.conf

在打开的配置文件末尾添加以下内容:

1:  updatedn        "cn=Manager,dc=wyh,dc=com"  2:  updateref ldap://192.168.206.11:389

其中,第1行必须与主服务器配置文件中的binddn对应。指定了在更新从服务器的数据时主服务器的slurpd守护进程使用的dn。

第2行的updateref设置的是主服务器。当客户端对从LDAP提交更新请求时,从服务器就将客户端重定向到这个主服务器上。

添加的内容如图14-18所示。


%22


14.5.4  复制数据库

当主服务器中的数据条目有改变时,slurpd进程将进行复制操作,但主服务器最初的数据不能通过slurpd进程进行复制,因此,还需要手工将主服务器中的数据库内容复制到从服务器对应目录中。

按默认设置,保存LDAP数据条目的数据库位于/var/lib/ldap/目录中(这个位置也可在slapd.conf文件中修改),最简单的方法就是将该目录中的所有数据都复制到每个从服务器的对应目录。

技巧:复制方法很多,可以借助U盘等移动存储设备,也可使用nfs、sftp等网络应用程序。

【实例14-5】用第8章中介绍的sftp方法将LDAP数据文件复制到从服务器中。

具体操作步骤如下:

(1)在主服务器中使用以下命令停止slapd进程:

#  kill  -INT  `cat /var/run/openldap/slapd.pid`

(2)在从服务器中使用sftp命令连接到主服务器:

#  sftp  192.168.206.11

连接到服务器之后,输入正确的密码,便以TTP方式登录到了主服务器。

(3)使用以下ftp命令,切换到/var/lib/ldap/目录,将其中的文件全部下载到本地,执行过程如图14-19所示。

sftp> cd  /var/lib/ldap  sftp> ls  sftp> get *.*

%22


(4)若是将主服务器中/var/lib/ldap/目录中的数据下载到从服务器的home目录,则还需要将其复制到从服务器的/var/lib/ldap/目录,覆盖该目录中原有的数据。

提示:也可将主服务器的数据导出,然后在从服务器中进行导入。

14.5.5  测试主从LDAP服务器

经过以上步骤的操作,主从LDAP服务器都已准备好,接下来就可以测试相关操作。

1.启动从LDAP服务器

前面的操作将主LDAP服务器的数据库文件直接复制到从服务器,下面先来测试一下从服务器是否能使用这些数据条目。

在从服务器中使用以下命令启动OpenLDAP服务器进程:

#  slapd

使用ldapsearch命令测试一下复制的数据库是否正确,具体代码如下:

#  ldapsearch  -x  -b  "dc=wyh,dc=com" "cn=wyh"

执行结果如图14-20所示,从图中可看到,在从服务器的数据库中已存在cn=wyh条目了。

2.启动主LDAP服务器

在主LDAP服务器中启动slapd进程和slurpd进程,并进行一个条目的修改,以查看从服务器中是否被修改。

%22


【实例14-6】启动主LDAP服务器。

具体操作步骤如下:

(1)使用以下命令启动主LDAP服务器的openldap服务器进程:

#  slapd

(2)使用以下命令启动slurpd进程:

#  slurpd

(3)在主LDAP服务器中使用以下命令修改一个条目:

# ldapmodify  -x  -D  "cn=Manager,dc=wyh,dc=com"  -w secret

输入以下内容,修改cn=wyh条目的内容:

dn: cn=wyh,ou=managers,dc=wyh,dc=com changetype: modify  replace: sn  sn: wuyunhui

输入后按Enter键完成修改,操作过程如图14-21所示(将sn修改为wuyunhui)。

%22

(4)在从LDAP服务器中进行操作,查看主LDAP服务器中的操作是否被复制到从LDAP服务器中来了。在从LDAP服务器中使用以下命令进行查询:

# ldapsearch  -x  -b  "dc=wyh,dc=com" "cn=wyh"

执行结果如图14-22所示,从图中可看到其中的sn也被修改为wuyunhui了(数据库中原来的内容为wuyunhui.modi,是前面例子中修改的值),即被主LDAP服务器进行了同步复制。

%22


14.6  OpenLDAP在用户认证的应用

OpenLDAP经常用在用户登录认证方面,通过LDAP的数据复制功能,可让用户使用一个账户登录网络中使用LDAP服务的所有服务器。在主LDAP服务器中设置好用户账户数据,然后通过在网络中的任意客户端都可使用设置的账号进行登录操作。本节将简单介绍将用户认证迁移到LDAP的操作方法。

14.6.1  用户认证用到的ojbectClass

在LDAP中用来保存用户认证条目的objectClass主要有以下3个,分别用来保存组、用户、密码等信息到目录的条目中。

posixGroup:可设置属性cn、userPassword、gidNumber等。

posixAccount:可设置属性cn、gidNumber、uid、uidNumber、homeDirectory、loginShell等。

shadowAccount:可设置属性uid、shadowExpire、shadowFlag、shadowInactive、shadowLastChange、shadowMax、shadowMin、shadowWarning、userPassword等。

提示:从上面列出的属性的名称可以很容易地与组、用户的相关信息联系起来。

14.6.2  使用迁移工具 

要使用LDAP进行用户认证,首先应该考虑的就是数据迁移的工作量。如果要操作员从/etc/passwd和/etc/group文件中逐个将信息重新录入,工作量将非常大。

OpenLDAP为用户考虑到了这些迁移工作,提供了多个迁移工具的脚本程序,这些程序位于/usr/share/openldap/migration/目录中,在该目录中有很多扩展名为pl和sh的脚本文件,通过这些迁移工具,可以很方便地将系统中的用户迁移到LDAP目录数据库中。下面介绍具体的迁移步骤。

【实例14-7】将系统中的用户信息迁移到LDAP目录数据库中。

具体操作步骤如下:

(1)修改/usr/share/openldap/migration/migrate_common.ph文件,在其中查找以下内容:

$DEFAULT_BASE = "dc=padl,dc=com";

将其修改为目录服务器使用的根,如本章使用的例子要改为以下形式:

$DEFAULT_BASE = "dc=wyh,dc=com";

保存后退出。

(2)使用以下命令执行脚本migrate_base.pl,用来创建根项,并为Hosts、Networks、Group和People等创建低一级的组织单元:

# ./migrate_base.pl  >  base.ldif

(3)由于本章前面已在LDAP服务器中创建了根项"dc=wyh,dc=com",因此将base.ldif文件中的第1个条目删除,另外,在用户认证中只用到组和用户,也将其他无关条目删除,只保存以下内容:

dn: ou=People,dc=wyh,dc=com ou: People  objectClass: top  objectClass: organizationalUnit   dn: ou=Group,dc=wyh,dc=com ou: Group  objectClass: top  objectClass: organizationalUnit

(4)使用以下命令将base.ldif文件中的条目导入目录数据库:

# ldapadd - x  -D  "cn=Manager,dc=wyh,dc=com"  -w  secret  -f  base.ldif

执行结果如图14-23所示。

%22

(5)开始迁移组信息。使用以下命令将/etc/group中的组信息保存到临时文件group.tmp中:

#  cat  /etc/group  >  group.tmp

(6)系统组不导入LDAP目录数据库中,因此需对group.tmp文件中的信息进行编辑,只保留需要导入LDAP目录数据库的组的信息。

(7)使用以下命令将组的数据生成LDIF条目信息:

#  ./migrate_group.pl  group.tmp  >  group.ldif

(8)使用cat命令查看group.ldif的内容,可看到已按posixGroup这种objectClass将组的数据组织完成,如图14-24所示。

%22


(9)类似地,使用以下命令导出/etc/passwd中的用户数据,并删除不需要的用户,然后使用migrate_passwd.pl脚本生成LDIF文件:

#  cat /etc/passwd > passwd.tmp  #  vi  passwd.tmp  #  ./migrate_passwd.pl  passwd.tmp  >  passwd.ldif  #  cat passwd.ldif

执行过程如图14-25所示。


%22

提示:系统管理方面的用户(如root),最好从passwd.tmp中删除,这些用户仍然使用本地登录方式。

(10)使用以下命令将组和用户信息导入目录数据库:

  1. #  ldapadd  -x  -D  "cn=Manager,dc=wyh,dc=com
    -w  secret  -f  group.ldif  

  2. #  ldapadd  -x  -D  "cn=Manager,dc=wyh,dc=com
    -w  secret  -f  passwd.ldif 

执行以上命令的过程如图14-26所示。

%22

(11)使用以下命令查看目录数据库中用户wyh的信息,用"uid=wyh"作查询条件:

#  ldapsearch  -x  "uid=wyh"

查找结果如图14-27所示。

%22

通过以上的操作,就将需要导入的组和用户的信息导入到了目录数据库中,接下来还需要对客户端进行设置,使用LDAP进行登录验证操作。


14.6.3  设置客户端登录

若客户端要使用LDAP进行用户登录认证,则可使用本地计算机中不存在的用户名进行登录操作。

【实例14-8】修改配置文件,设置客户端使用LDAP进行认证。

具体操作步骤如下:

(1)修改客户端计算机中的/etc/sysconfig/authconfig文件,将以下项都修改为yes:

USELDAP=yes USELDAPAUTH=yes USEMD5=no USESHADOW=yes USELOCAUTHORIZE=yes

(2)修改客户端计算机中的/etc/openldap/ldap.conf文件,修改内容如下:

host 192.168.206.11  BASE dc=wyh,dc=com ssl off

(3)修改客户端计算机中的/etc/nsswitch.conf文件,在passwd、shadow、group后面都加上ldap,如图14-28所示。

%22

14.7  本章小结

本章介绍了使用OpenLDAP目录服务的相关内容,首先介绍了LDAP基本模型,接着详细介绍了安装、配置OpenLDAP服务器的过程,然后介绍了通过客户端命令向OpenLDAP中添加条目、修改条目、查询条目的相关命令,以及设置主从OpenLDAP服务器进行数据复制的方法,最后还介绍了将用户认证数据迁移到OpenLDAP的方法。

OpenLDAP是一个非常有用的保存信息资料的工具,本章介绍了安装配置LDAP服务器的过程,并介绍了通过命令方法访问OpenLDAP条目的方法。在实际应用中,更多地是使用类似访问数据库中数据的方法,通过程序代码去访问、修改LDAP中的条目信息。


参考:http://book.51cto.com/art/201002/182321.htm 


本文出自 “Ricky's Blog” 博客,请务必保留此出处http://57388.blog.51cto.com/47388/1554680

Linux -- 目录服务配置及应用(LDAP协议)(2)