如何在镜像模式下用2个主机配置OpenLDAP

时间:2020-03-05 15:28:04  来源:igfitidea点击:

OpenLDAP是由OpenLDAP Project开发的轻型目录访问协议(LDAP)的免费开源实现。
换句话说,它是用于通过使用文件和目录层次结构从集中位置管理相关信息的协议。

它在某些方面以与关系数据库类似的方式起作用,并可用于组织和存储任何类型的信息。
LDAP通常用于集中式身份验证。
在本文中,我们将考虑在镜像模式下具有两个主机的OpenLDAP配置。

OpenLDAP具有三个主要组件:

slapd –独立的LDAP守护程序以及相关的模块和工具
实现LDAP协议和基本编码规则的库
客户端软件:ldapsearch,ldapadd,ldapdelete等。

在开始之前

LDAP是电子邮件和其他程序用来从服务器查找联系信息的Internet协议。
它是在OpenLDAP公共许可证下发行的,可用于所有主要的Linux发行版,AIX,Android,HP-UX,OS X,Solaris,Windows和z/OS。

LDAP不限于存储信息,它还用作“单点登录”的后端数据库,在该数据库中,许多服务之间共享一个用户的密码。
在本教程中,我们将在CentOS 6.8上安装和配置OpenLDAP以及镜像模式复制。

1)Openldap安装

在CentOS和RedHat上,使用yum install如下所示,以安装与openldap相关的软件包。

yum -y install openldap openldap-servers openldap-clients

-y标志–如果出现提示,则假定是
openldap-servers –这是主要的LDAP服务器
openldap-clients –包含所有必需的LDAP客户端实用程序
openldap –该软件包包含LDAP支持库

注意:对于Web UI,我们需要安装phpldapadmin软件包。
我们假定httpd守护程序已安装在计算机上。
如果没有,请安装它以访问Web UI。

phpLDAPadmin(也称为PLA)是基于Web的LDAP客户端。
它为LDAP服务器提供了易于访问的多语言轻松管理。

它的分层树查看器和高级搜索功能使浏览和管理LDAP目录变得直观。
由于它是一个Web应用程序,因此该LDAP浏览器可在许多平台上运行,从而使LDAP服务器可从任何位置轻松管理。

总之,对于LDAP专业人士和新手而言,phpLDAPadmin是理想的LDAP浏览器。

它的用户群主要由LDAP管理专业人员组成。
要安装它,我们需要运行以下命令:

yum -y install phpldapadmin

2)Ldap配置

首先,我们将更新/etc/openldap/ldap.conf文件。
ldap.conf配置文件用于设置运行ldap客户端时要应用的系统范围的默认值。
用户可以在其主目录中创建一个可选的配置文件ldaprc或者.ldaprc,该文件将用于覆盖系统范围的默认文件。

对于基本设置,我们只需要更改2个参数:BASE和URI。
我们可以在方便时使用任何编辑器。
在此示例中,我们将使用vi。

vi /etc/openldap/ldap.conf
BASE dc=example,dc=com
URI ldap://localhost

BASE –指定执行ldap操作时要使用的默认基本DN。
必须以LDAP格式将基础指定为专有名称。

URI指定LDAP库应连接到的LDAP服务器的URI。
URI方案可以是ldap,ldaps或者ldapi中的任何一种,分别指的是TCP上的LDAP,SSL上的LDAP(TLS)和IPC上的LDAP(Unix域套接字)。
可以将每个服务器的名称指定为域样式名称或者IP地址文字。
(可选)服务器名称后面可以跟有“:”和LDAP服务器正在侦听的端口号。
如果未提供端口号,则使用方案的默认端口(ldap://为389,ldaps://为636)。
对于基于IPC的LDAP,名称是套接字的名称,不需要端口也不允许。
下一步,我们需要将slapd.conf.obsolete文件复制到/etc/openldap /目录中。

稍后,我们将更新此文件。

cp /usr/share/openldap-servers/slapd.conf.obsolete /etc/openldap/slapd.conf

slapd.conf文件由三种类型的配置信息组成:全局,特定于后端和特定于数据库。
首先指定全局信息,然后指定与特定后端类型关联的信息,然后指定与特定数据库实例关联的信息。
全局指令可以在后端和/或者数据库指令中被覆盖,后端指令可以被数据库指令覆盖。

以“#”字符开头的空行和注释行将被忽略。
如果一行以空格开头,则将其视为前一行的延续(即使前一行是注释)。

注意:此步骤是可选的。

似乎越来越多的OpenLDAP建议是优先于其他配置属性或者slapd.conf指令使用DB_CONFIG。
在可能的情况下,每个指令中都应注明。

如果我们关心性能使用DB_CONFIG文件,则是否使用DB_CONFIG文件的决定很简单。
如果我们不在乎,那就算了。
但是,如果我们选择不使用DB_CONFIG,则必须使用检查点指令。
OpenLDAP的建议似乎越来越多地使用DB_CONFIG,而不是通过slapd.conf传递参数。

cp /usr/share/openldap-servers/DB_CONFIG.example /etc/openldap/DB_CONFIG

然后,我们需要使用slappasswd命令生成LDAP根密码。
只需运行:

slappasswd

Slappasswd用于生成适用于ldapmodify,slapd.conf rootpw配置指令或者slapd-config olcRootPW配置指令的userPassword值。
一旦运行命令并提示输入密码,我们将看到SSHA密码。
我们将在本文中使用该root密码。
因此,记下这一点并放在一边。

现在,我们需要使用刚刚生成的DN和密码来修改/etc/openldap/slapd.conf文件。
基本上,将有两行需要域名:

vi /etc/openldap/slapd.conf

导航到“数据库定义”部分,并使用DN更新后缀和rootdn并将完整的SSHA密码粘贴到rootpw旁边

suffix "dc=example,dc=com"
rootdn "cn=manager,dc=example,dc=com"
rootpw {SSHA}gHuk69PP7Hxh4mglbRdkg47GQrfBhlt6

下一步,我们将修改/etc/phpldapadmin/config.php文件以访问Web GUI。
请找到以下行并进行如下更新:

//$servers->setValue('login','attr','dn');
$servers->setValue('login','attr','uid');
→
$servers->setValue('login','attr','dn');
//$servers->setValue('login','attr','uid');

其中我们指定登录时要使用的属性。
默认情况下,phpLDAPadmin将搜索uid = username(如果我们以用户名登录)。
如果我们将其保留为空白或者像我们刚才那样指定'dn',则phpLDAPadmin将使用完整DN(我们在slapd.conf中提供)。

另外,请取消注释以下行并添加IP地址:

$servers->setValue('server','host','127.0.0.1');

访问phpLDAPadmin Web UI的最后一件事是更新/etc/httpd/conf.d/phpldapadmin.conf文件,以列出允许连接到Web UI的IP地址。
默认情况下,该文件应如下所示:

## Web-based tool for managing LDAP servers
#Alias /phpldapadmin /usr/share/phpldapadmin/htdocs
Alias /ldapadmin /usr/share/phpldapadmin/htdocs
Order Deny,Allow
Deny from all
Allow from 127.0.0.1
Allow from ::1

如果没有,请按照上述说明进行更新。

3)测试并运行

请运行以下命令集以执行完整的配置测试:

rm -rf /etc/openldap/slapd.d/*
chown -R ldap. /etc/openldap/slapd.d/
chown -R ldap. /var/lib/ldap/
slaptest -u 
slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/

如果测试成功运行,请继续下一步–在系统启动时启用LDAP以自动启动服务,并启动LDAP服务

chkconfig slapd on
service httpd restart 
service slapd restart

我们可以使用netstat命令验证LDAP是否正在运行:

netstat -antup | grep -i 389

现在,我们需要在LDAP中创建一些对象。
请创建几个具有以下内容的.ldif文件:

Organization.ldif
dn: dc=example,dc=com
dc: corp
o: corp
objectclass: dcObject
objectclass: organization
Department.ldif 
dn: ou=department,dc=example,dc=com
objectclass: organizationalUnit
objectclass: top
ou: hadoop
Groups.ldif
dn: ou=groups,ou=department,dc=example,dc=com
objectclass: organizationalUnit
objectclass: top
ou: groups
System_admin.ldif
dn: cn=system_admin,ou=groups,ou=department,dc=example,dc=com
cn: system_admin
gidnumber: 502
memberuid: admin1
memberuid: admin2
objectclass: posixGroup
objectclass: top
Users.ldif
dn: ou=users,ou=department,dc=example,dc=com
objectclass: organizationalUnit
objectclass: top
ou: users
Admin1.ldif
dn: uid=admin1,ou=users,ou=department,dc=example,dc=com
cn: admin1
gidnumber: 502
givenname: Admin1
homedirectory: /home/users/admin1
objectclass: inetOrgPerson
objectclass: posixAccount
objectclass: top
sn: Admin1
uid: admin1
uidnumber: 5001
userpassword: password
Admin2.ldif
dn: uid=admin2,ou=users,ou=department,dc=example,dc=com
cn: admin2
gidnumber: 502
givenname: Admin2
homedirectory: /home/users/admin2
objectclass: inetOrgPerson
objectclass: posixAccount
objectclass: top
sn: Admin2
uid: admin2
uidnumber: 5002
userpassword: password

现在,我们需要通过为每个文件运行以下命令来将这些对象添加到LDAP服务器中:

ldapadd -x -W -D “cn=manager,dc=example,dc=com” -f

4)镜像模式复制

镜像模式是一种混合配置,可提供单主机复制的所有一致性保证,同时还提供多主机的高可用性。
在镜像模式下,两个提供程序被设置为可以互相复制(作为多主服务器配置),但是使用外部前端将所有写入仅定向到两个服务器之一。
仅当第一个提供程序崩溃时,第二个提供程序才用于写操作,此时前端将切换为将所有写操作定向到第二个提供程序。
当崩溃的提供程序被修复并重新启动后,它将自动赶上正在运行的提供程序上的所有更改并重新同步。

镜像模式的参数

提供用于目录写入(副本句柄读取)的高可用性(HA)解决方案。

只要一个提供程序处于运行状态,就可以安全地接受写入。

提供者节点相互复制,因此它们始终是最新的,可以随时接管(热备用)。

Syncrepl还允许提供者节点在任何停机时间后重新同步。

反对镜像模式的争论

镜像模式不是所谓的多主机解决方案。
这是因为一次只能将写入操作转到镜像节点之一。

镜像模式可以称为“主动-主动热备用”,因此需要外部服务器(以代理模式安装)或者设备(硬件负载平衡器)来管理当前处于活动状态的提供程序。

备份的管理略有不同。

在启动镜像模式之前,我们需要在另一台主机上执行本文提供的相同安装和配置步骤(带有* .ldif的部分除外,所有对象将在设置镜像模式后复制)。
我们将其称为–从属主机。

一旦在从属主机上成功安装并配置了LDAP,就需要更新主服务器(第一个配置的主机)的/etc/openldap/slapd.conf文件,如下所示:

1.取消注释modsyncload syncprov.la
2.将以下配置添加到文件的中:

##### Mirror Mode
serverID    001
# Consumer
syncrepl rid=001
provider=ldap://slave.example.com
bindmethod=simple
binddn="cn=manager,dc=example,dc=com"
credentials="slave_userPassword_from_slappasswd"
searchbase="dc=example,dc=com"
attrs="*,+"
type=refreshAndPersist
interval=00:00:01:00
retry="60 +"
# Provider
overlay syncprov
syncprov-checkpoint 50 1
syncprov-sessionlog 50
mirrormode on

然后,我们需要按以下方式更新从站/etc/openldap/slapd.conf:

一种。
取消注释模块负载syncprov.la
b。
在文件末尾添加以下配置:

##### Mirror Mode
serverID    002
# Consumer
syncrepl rid=001
provider=ldap://master.example.com
bindmethod=simple
binddn="cn=Manager,dc=example,dc=com"
credentials="master_userPassword_from_slappasswd"
searchbase="dc=example,dc=com"
attrs="*,+"
type=refreshAndPersist
interval=00:00:01:00
retry="60 +"
# Provider
overlay syncprov
syncprov-checkpoint 50 1
syncprov-sessionlog 50
mirrormode on