Linux 安装并配置 OpenLDAP 新编(3)YUM安装

Linux 安装并配置 OpenLDAP 新编(3)YUM安装

我实操OpenLDAP的过程,是先根据官网资料编译安装,大约花费了近2周时间,也有点陷入牛角尖了,一时不得出。后来加了一个群,经过提醒发现了配置文件中的不同,但是依旧不得其果,最终还是自行再折腾了几遍YUM方式的安装,终于才对比发现了一些问题所在,同时也进一步了解了更多内容,知其所以然~~

注意!注意!注意!
根据官方信息来说,2.4不再推荐使用,2.5为LTS版本,2.6为特性版本。因此虽然本章为了省事是基于2.4编写的,仅用于研究,依旧不建议在生产环境中部署了。

安装

前往symas选择对应OpenLDAP版本在相应OS中的repo仓库文件。

symas同时还提供了一些第三方库,可根据具体情况决定是否安装。

wget -q https://repo.symas.com/configs/SOFL/rhel8/sofl.repo -O /etc/yum.repos.d/sofl.repo
yum update
yum install symas-openldap-servers
systemctl start slapd

再次回到那句老话 设定先行! ,这里什么叫设定先行?

  • openldap-clients : 我并没有安装 symas 提供的客户端,安装的是系统自带的客户端,当前版本为:2.4.46;
  • 同为 symas 提供的源,2.42.52.6 的安装过程略有不同,2.52.6 安装后要先配置,否则无法启动。切记!切记!切记!
  • 理论上,2.52.6 在启动前的配置方法,应该和源码安装后的配置是一样的,这里 未实测

默认配置

如上所说,对于 OpenLDAP2.4 来说,安装后直接启动即会成功运行服务。然鹅……上一章所谓带着问题的问题是什么?我们要操作的DN是什么?密码是什么?

身份验证

上章的结尾,提到使用 SASL 机制添加前面创建的条目时会提示没有写入权限,现在我们利用前面的文件再试一下:

ldapadd -Q -Y EXTERNAL -H ldapi:// -f add_group.ldif
# 一般会返回如下结果
adding new entry "ou=group,dc=example,dc=com"
ldap_add: Server is unwilling to perform (53)
	additional info: no global superior knowledge

诶?先不要管具体的错误原因,但至少身份验证很显然是通过了,这是为什么呢?

目录结构

还记得之前编译安装的2.5,配置存储目录在哪里么?在 /usr/local/etc/slapd.d/ ,那么通过yum安装的,对应的目录在哪里呢?在: /etc/openldap/slapd.d/ 。使用 tree 命令输出该目录中的内容:

tree /etc/openldap/slapd.d
# 返回结果
/etc/openldap/slapd.d
├── cn=config
│   ├── cn=schema
│   │   └── cn={0}core.ldif
│   ├── cn=schema.ldif
│   ├── olcDatabase={0}config.ldif
│   ├── olcDatabase={-1}frontend.ldif
│   ├── olcDatabase={1}monitor.ldif
│   └── olcDatabase={2}mdb.ldif
└── cn=config.ldif

除了根目录不一致,可以看到目录中还多了一个名为: olcDatabase={1}monitor.ldif 的配置文件。我们现在尚处于不知其所以然的层次,因此可以先不管各个文件是干什么的,目前只需要关注: olcDatabase={0}config.ldifolcDatabase={2}mdb.ldif 这两个文件。

{0}config.ldif

这个配置文件中,最重要的是这一行:

olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=extern
 al,cn=auth" manage by * none

该配置指令,涉及到了 OpenLDAP 的进阶知识 Access Control 。我们暂且不做深入展开,只需记得:

此配置项决定了客户端可以使用 SASL 机制验证身份后操作LDAP!

{2}mdb.ldif

此配置文件,是具体的配置文件,可以看到与前面文章中最大的区别主要在于以下两项配置:

olcSuffix: dc=my-domain,dc=com
olcRootDN: cn=Manager,dc=my-domain,dc=com

事实上,正是这两项的配置导致了前面的添加不成功。

个性化配置

我们打开任意一个位于 /etc/openldap/slapd.d/ 目录中的配置文件,都会看到文件头两行显著的文字:

# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.
# CRC32 xxxxxxxx

什么意思呢?这是自动生成的文件-不要编辑!!!使用 ldapmodify 命令操作 。所以,正如之前网上那篇文章所说的,只要某个文章开头让你编辑这里面的配置,你基本可以直接关闭该文章了,不必浪费时间了!

配置DN

创建 .ldif 配置文件,编辑如下内容:

# change_domain.ldif
dn: olcDatabase={2}mdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=example,dc=com

dn: olcDatabase={2}mdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=example,dc=com

接下来执行编辑命令:

ldapmodify -Q -Y EXTERNAL -H ldapi:// -f change_domain.ldif

Bingo,添加成功!此时再查看前面的 olcDatabase={2}mdb.ldif 文件时,可以发现已经修改成功。

添加条目

接下来我们再次尝试导入条目:

ldapadd -Q -Y EXTERNAL -H ldapi:// -f add_group.ldif
# 返回
adding new entry "ou=group,dc=example,dc=com"
ldap_add: No such object (32)

WHY?但我们搜索时,会发现是因为父节点不存在:

ldapsearch -LLL  -Q -Y EXTERNAL -H ldapi:// -b 'dc=example,dc=com'

这是因为即便用了YUM安装OpenLDAP,也不会自动创建目录节点,因此,先添加根节点,再添加条目即可:

# add_domain.ldif
dn: dc=example,dc=com
objectClass: dcObject
objectclass: organization
o: Example Company
dc: example

添加根节点之后,再添加分组:

ldapadd -Q -Y EXTERNAL -H ldapi:// -f add_domain.ldif
ldapadd -Q -Y EXTERNAL -H ldapi:// -f add_group.ldif

导入架构

我们深入探究上面的文件,会发现有点问题。我们实际上是想添加一个 Domain Component ,并不是想当做一个 organization 来添加,而且我们在官网中也可以看到有一个值为 domainobjectclass ,于是我们尝试添加一个子域名:

# add_sub_domain.ldif
dn: dc=ldap,dc=example,dc=com
objectClass: domain
domainComponent: ldap

然而我们在添加时,却会返回类似于下面的错误:

ldap_add: Invalid syntax (21)
	additional info: objectClass: value #0 invalid per syntax

这又是为什么呢?当我们查看 /etc/openldap/slapd.d/cn=config/cn=schema/ 目录时,就会发现原因了。这是因为,OpenLDAP 默认只会添加 core.schema ,而 domain 类型,是由 cosine 架构支持的,因此需要手工添加一下:

# 添加架构
ldapadd -Q -Y EXTERNAL -H ldapi:// -f cosine.ldif
# 再次添加子域名
ldapadd -Q -Y EXTERNAL -H ldapi:// -f add_sub_domain.ldif

这回可以看到添加成功了!

新的问题

经过上面的实验,已经把编译安装的坑填上了,但是……当运行下面的命令时,又会发现遇到新的问题:

ldapsearch -x -W -D cn=Manager,dc=example,dc=com -H ldap:// -b 'dc=example,dc=com' -LLL  -s base '(objectclass=*)'

???密码是什么?印象中我们似乎并没有添加什么密码,但是又好像并没有需要添加密码的地方。其实从前面的配置可以看出,yum安装后并没有设置密码的,我们需要手工添加一个密码:

add_passwd.ldif
dn: olcDatabase={2}mdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}H7pqipuCoHbMH+aAAy3i9Y2/zo+IY2ry

然后使用 ldapadd命令添加到配置文件中即可:

ldapadd -Q -Y EXTERNAL -H ldapi:// -f add_passwd.ldif
# 请注意为了测试不同的身份验证方式,使用了不同的协议类型
ldapsearch -x -W -D cn=Manager,dc=example,dc=com  -H ldap:// -b 'dc=example,dc=com' -LLL  -s base '(objectclass=*)'

DONE!

总结

经过前几章的学习,我们已经通过编译安装和YUM安装,掌握了许多LDAP的基本用法,从不知其然进阶到,知其然而不知其所以然。接下来我们继续深入,从配置开始进一步了解前面的暂不解释,以及未能讲述的问题。

文中用到的配置文件,可点击链接下载。

参考文档

posted @ 2022-05-04 19:22  雨帝夜泪  阅读(575)  评论(0编辑  收藏  举报