OpenLDAP 安装 & 主主同步

OpenLDAP 轻型目录访问协议

参考:

  • https://hisoka0917.github.io/linux/2017/12/22/openldap-on-centos7/
  • http://blog.51cto.com/407711169/1439623

LDAP 全称轻量级目录访问协议(英文:Lightweight Directory Access Protocol),从X.500目录访问协议的基础上发展过来的,是一个运行在 TCP/IP 上的目录访问协议。

基础概念

Entry 条目 --> Schema 模式 --> ObjectClass 对象类 --> Attribute 属性

Entry

LDAP 中的信息按照目录信息树结构组织,树中的一个节点称之为条目(Entry),条目包含了该节点的属性及属性值。

  • dn:条目的唯一标识,例如:cn=root,dc=example,dc=com
  • rdn:区别名,一般指 dn 最左边的部分,例如:cn=root。它与RootDN不同,RootDN通常与RootPW同时出现,特指管理 LDAP 中信息的最高权限用户
  • Base DN:LDAP目录树的最顶部就是根,例如:dc=example,dc=com

Schema

模式是ObjectClass对象类的集合。

例如:/etc/ldap/schema/inetorgperson.ldif定义了ObjectClass: inetOrgPerson

ObjectClass

对象类是Attribute属性的集合,它定义了一套属性的规则。

例如:ObjectClass: inetOrgPerson定义了employeeNumber

Attribute

每个条目可以有很多属性(Attribute),例如:姓名、地址、电话。

LDAP为人员组织机构中常见的对象都设计了属性:

属性 别名 描述 举例
commonName cn 名称(姓名) conanli
surname sn 姓氏 li
organizationalUnitName ou 单位(部门)名称 IT
organization o 组织(公司)名称 example
telephoneNumber 电话号码 110
objectClass 内置属性 inetOrgPerson

准备

机器名 IP 系统 内核 配置 计划安装的软件
ldap-node1 192.168.56.103 centos 7.5.1804 linux 3.10.0 2 核 / 4G 内存 openldap-servers-2.4.44
openldap-clients-2.4.44
phpldapadmin-1.2.3
keepalived-1.3.5
ldap-node2 192.168.56.104 centos 7.5.1804 linux 3.10.0 2 核 / 4G 内存 openldap-servers-2.4.44
openldap-clients-2.4.44
phpldapadmin-1.2.3
keepalived-1.3.5

安装 OpenLDAP

ldap-node1执行以下内容:

yum install -y openldap-servers openldap-clients migrationtools
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown ldap:ldap /var/lib/ldap/DB_CONFIG
systemctl start slapd
systemctl enable slapd

修改顶级域

ldap-node1执行以下内容:

注意:cn=configolcDatabase={2}hdb分别是/etc/openldap/slapd.d/etc/openldap/slapd.d/cn\=config下的目录,请根据实际情况做调整

cat > chdomain.ldif <

配置管理员

ldap-node1执行以下内容:

RootPW=$(slappasswd -s 123456)
cat > chroot.ldif <

导入内置 Schema

ldap-node1执行以下内容:

注意:ObjectClass存在依赖关系,注意执行的先后顺序,具体依赖可以打开文件查看

ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/core.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif 
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/misc.ldif 
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/openldap.ldif 

添加用户

ldap-node1执行以下内容:

cat > chuser.ldif <

导入 MemberOf

部分第三方应用会依赖memberof,可以提前安装,以备不时之需。

ldap-node1执行以下内容:

memberof

cat > memberof.ldif <

ldap-node1执行以下内容:

refint

cat > refint.ldif <

testing

添加用户conanli和分组it,以检查部署是否正常

ldap-node1执行以下内容:

ConanLiPW=$(slappasswd -s 123456)
cat > add_user.ldif < add_group.ldif <

查询

常用的数据查询,可以使用ldapsearch [options] [filter [attributes...]]options如下:

参数 说明
-H ldapuri,格式为:ldap://ip:port,不能与 -h 和 -p 同时使用
-h LDAP服务器IP,与 -p 可结合使用,不能与 -H 同时使用
-p LDAP服务器端口号,与 -h 可结合使用,不能与 -H 同时使用
-x 使用简单认证方式
-D 所绑定的服务器的 DN
-w 绑定 DN 的密码,与 -W 二者选一
-W 不输入密码,会交互式的提示用户输入密码,与 -w 二者选一
-f 指定输入条件,在 RFC 4515 中有更详细的说明
-c 出错后忽略当前错误继续执行,缺省情况下遇到错误即终止
-n 模拟操作但并不实际执行,用于验证,常与 -v 一同使用进行问题定位
-v 显示详细信息
-d 显示 debug 信息,可设定级别
-s 指定搜索范围, 可选值:base/one/sub/children
ldapsearch -H ldap:/// -x -s base -b "" subschemaSubentry
ldapsearch -H ldap:/// -x -s base -b "cn=Subschema" objectClasses

# 根据 dn 查询
# 查询 RootDN 管理员
ldapsearch -H ldap:/// -x -D "cn=root,dc=example,dc=com" -w 123456 -b "cn=root,dc=example,dc=com"
# 查询 people 分组,及其下的用户
ldapsearch -H ldap:/// -x -D "cn=root,dc=example,dc=com" -w 123456 -b "ou=people,dc=example,dc=com"
# 查询 conanli 成员
ldapsearch -H ldap:/// -x -D "cn=root,dc=example,dc=com" -w 123456 -b "uid=conanli,ou=people,dc=example,dc=com"

# 使用模糊匹配
# 查询所有分组
ldapsearch -H ldap:/// -x -D "cn=root,dc=example,dc=com" -w 123456 -b "dc=example,dc=com" "ou=*"
# 根据 uid 查询
ldapsearch -H ldap:/// -x -D "cn=root,dc=example,dc=com" -w 123456 -b "dc=example,dc=com" "uid=conanli"

# 返回指定信息
# 只返回 dn 和 cn 信息
ldapsearch -H ldap:/// -x -D "cn=root,dc=example,dc=com" -w 123456 -b "dc=example,dc=com" "uid=conanli" dn cn

# 验证用户密码
ldapsearch -H ldap:/// -x -D "uid=conanli,ou=people,dc=example,dc=com" -w 123456

安装 phpLDAPadmin

一个 Web 版的可视化工具。

ldap-node1执行以下内容:

yum install -y epel-release
yum install -y phpldapadmin

# 修改 phpLDAPadmin 配置
# 打开 $servers->setValue('login','attr','dn'),注释 $servers->setValue('login','attr','uid'),结果如下:
sed -n '397,398p' /etc/phpldapadmin/config.php
$servers->setValue('login','attr','dn');
// $servers->setValue('login','attr','uid');

# 修改 apache 配置
# 允许外网访问
sed -n '8,13p' /etc/httpd/conf.d/phpldapadmin.conf 

  
    # Apache 2.4
    Require all granted
  


# 开机启动
systemctl start httpd
systemctl enable httpd

# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

然后就可以在浏览器访问http://192.168.56.103/ldapadmin

OpenLDAP 安装 & 主主同步_第1张图片
phpLDAPAdmin-login

安装 LDAPadmin

Windows 可用的一个桌面工具,可以到http://www.ldapadmin.org下载,就不在这里描述了。

OpenLDAP 安装 & 主主同步_第2张图片
phpLDAPAdmin-login

双主复制

OpenLDAP 支持主主数据同步。

ldap-node1执行以下内容:

syncprov

cat > syncprov.ldif <

syncrepl

以下为数据同步的具体,不同机器会有点不同,复制ldap-node1,命名为ldap-node2,然后在ldap-node1执行以下内容:

cat > syncrepl1.ldif <

ldap-node2执行以下内容:

cat > syncrepl2.ldif <

testing

可以通过可视化工具连接到ldap-node1,然后通过工具删除分组it,最后再连接ldap-node2检查是否也删除了。

Keepalived

Keepalived 可以通过IP漂移,实现服务的高可用,避免单点故障。

首先定一个向外提供服务的虚拟IP,例如:192.168.56.105,具体方案如下:

ldap-node1slapd服务可用时,在ldap-node1添加192.168.56.105解析,否则在ldap-node2添加,可以通过命令观察ip addr路由的变化。

ldap-node1执行以下内容:

yum install -y keepalived
cat > /etc/keepalived/keepalived.conf <

ldap-node2执行以下内容:

yum install -y keepalived
cat > /etc/keepalived/keepalived.conf <

然后我们就可以用过http://192.168.56.105/ldapadmin访问了。

testing

  1. ldap-node1执行systemctl stop slapd关闭OpenLDAP
  2. ldap-node2上执行ip addr,观察其中的变化
  3. 在浏览器上试试http://192.168.56.105/ldapadmin是否可以访问

注意:

  • vrrp_script的定义必须放在vrrp_instance前,否则无法执行
  • vrrp_scriptscript包含复杂的命令时,最好关闭selinux,否则会调用失败,例如:systemctl

你可能感兴趣的:(OpenLDAP 安装 & 主主同步)