Linux 安装并配置 OpenLDAP 新编(6)模块管理

本文详细介绍了如何在Linux上安装并配置OpenLDAP,特别是启用memberof功能,以实现优雅的用户权限管理。通过编译时指定模块并启用Overlays,如refint和memberof,实现了N:N的用户组绑定。在导入配置并启动服务后,通过示例展示了成员关系的查询,确保了成员钩子正常工作。
摘要由CSDN通过智能技术生成

Linux 安装并配置 OpenLDAP 新编(6)模块管理

我想全网前搜索最多的关于 OpenLDAP 的文章,多半都是想实现 memberof 功能。

首先解释下何为 memberof ,当我们部署好 OpenLDAP 并创建好用户,准备好了诸如Linux、Jenkins等客户端进行接入时会发现,默认情况下所有用户都具备登入所有客户端节点的功能,显然这不是我们想要的。虽然我们可以通过,比如:限定只属于某个 ou 的用户登录,或者就在客户端依次指定具体的用户,甚至我看见过一个骚操作–通过过滤 homePhone 的方式来限定。 但很显然这些方法都会有或多或少的问题。而 memberof 正是提供了这样一种优雅的管理方式,即我们可以为组的实例化条目添加 groupOfNames 对象,而在创建之后该对象的 member 属性,该属性中所关联的用户对象,会自动绑定到用户的 memberof 属性中,从而实现灵活的 N:N 绑定关系。而实现该功能的技术,在 OpenLDAP 中被称之为 Overlay

Overlay

Overlays 是一种软件组件,它提供了一种类似于钩子的功能, Overlays 是由具体的 modules 所提供的。然而遗憾的是,官网上对模块只是寥寥数笔描述了下名字,以及在 Overlays 章节中简单的说了几句,除此之外的任何文章也只能看到怎么做,确实也无法发现为什么这么做,这不能不说是一种遗憾!

重新部署

我们前面再三强调过,不要把之前的编译安装当做生产环境来部署,原因在于编译安装的默认情况下,是不会编译安装相关模块的,我们必须要在 configure 时,显式指定。

模块编译

在所有的文章中,都会加载模块什么什么的,但实际上这也是 设定先行 的。YUM安装会默认安装全部模块,但是通过编译方式安装的实例 默认情况下,是不安装任何模块的! ,必须要显式配置:

./configure  --prefix=/usr/local/openldap \
--enable-debug --enable-dynamic --enable-syslog --enable-rlookups \
--enable-slapd --enable-crypt --enable-spasswd --enable-modules \
--enable-homedir=mod --enable-memberof=mod  --enable-refint=mod
# 安装
make depend
make
make test
make install

上面的 configure 参数是经过多次安装、卸载后得出至少可以正常使用的选项。大致分为几类选项:

  • --prefix : 指定安装的位置,这样可以集中管理文件,卸载也只需要删除即可;
  • --enable-XXXX : 指定一些启动的功能,尤其是想要动态加载模块,必须添加 --enable-modules ;
  • --enable-XXXX=mod : 指定编译的模块,这里我们由于只实验memberof,因此仅指定相关的模块;
模块位置

在不同的安装方式下,模块所在的位置并不一样,下面的表格仅列出个人实测过的:

安装方式版本路径
symas2.4/opt/symas/lib/openldap/
Source (指定了prefix)2.5PREFIX/libexec/openldap/

启用Overlays

系统初始化

系统初始化这里不再赘述,可以完全沿用第4章所讲述的内容进行配置,但是一定要注意在 config 数据库中,SASL机制的 olcAccessolcRootPW 至少要包含一个。导入原始配置后,启动服务。

由于编译时指定了 prefix ,因此导入和启动的参数也要做相应的调整,例如:

slapadd -n 0 -F /usr/local/openldap/etc/slapd.d -l init.ldif
slapd -F /usr/local/openldap/etc/slapd.d -h "ldap:/// ldapi:///"
启用模块

启用模块,依旧可以沿用之前的常用方式。即编辑文件、导入配置。编辑添加模块文件:

# add_module.ldif
dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
# module directory
olcModulePath: /usr/local/openldap/libexec/openldap

在很多的网上资料里,只是简单的写了一句 olcModuleLoad 指定模块,然而你首先要知道模块的位置在哪里。这里我们只增加了 olcModulePath 一个属性,用于指定模块的位置,实际上 olcModuleLoad 可以直接指定绝对地址的,这里我们只是为了更细致的描述。接下来导入配置:

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

按照前面的技巧,此时可以前往 slapd.d 目录,看看这一步操作后发生了什么。

Overlay refint

很多人在启用 memberof 时可能会比较纳闷,添加 memberof 为什么还要启用 refint ?添加两者是否有什么顺序要求?

其实从启用 memberof 的语句中可以看出,它依赖于 refint ,因此两者必须都安装,而且还要先安装 refint

# enable_refint.ldif
dn: cn=module{0},cn=config
changetype: modify
add: olcModuleLoad
olcModuleLoad: refint.la

dn: olcOverlay=refint,olcDatabase={1}mdb,cn=config
changetype: add
objectClass: olcOverlayConfig
objectClass: olcRefintConfig
olcOverlay: refint

把上面的 enable_refint.ldif 文件导入后,可以看到在对应的 olcDatabase 数据库目录中,增加了一个同名的目录。里面保存了为该数据库启用的 Overlay 配置信息。

Overlay memberof
# enable_member.ldif
dn: cn=module{0},cn=config
changetype: modify
add: olcModuleLoad
olcModuleLoad: memberof.la

dn: olcOverlay=memberof,olcDatabase={1}mdb,cn=config
changetype: add
objectClass: olcOverlayConfig
objectClass: olcMemberOf
olcOverlay: memberof
olcMemberOfRefint: TRUE
olcMemberOfDangling: ignore
olcMemberOfGroupOC: groupOfNames
olcMemberOfMemberAD: member
olcMemberOfMemberOfAD: memberOf

继续将启用 enable_memberof.ldif 的配置导入,除了又增加了一个 Overlay 配置文件之外,此时再回头去看本章启用模块时生成的 cn=module{0}.ldif 的配置文件,会看到增加了如下内容:

olcModuleLoad: {0}refint.la
olcModuleLoad: {1}memberof.la

至此,我们已经将需要的模块及配置都操作完成了,接下来倒是可以按照官网的示例,导入一些用户进行测试。

添加信息
# add_pure_group_and_group.ldif
dn: dc=example,dc=com
objectclass: domain
dc: example

dn: ou=Group,dc=example,dc=com
objectclass: organizationalUnit
ou: Group

dn: ou=People,dc=example,dc=com
objectclass: organizationalUnit
ou: People

dn: uid=test1,ou=People,dc=example,dc=com
objectclass: account
uid: test1

dn: cn=testgroup,ou=Group,dc=example,dc=com
objectclass: groupOfNames
cn: testgroup
member: uid=test1,ou=People,dc=example,dc=com

最后,导入文件并查询验证:

ldapadd -x -W -D cn=admin,dc=example,dc=com  -f add_pure_group_and_group.ldif

ldapsearch -LLL -x  "(uid=test1)" -b dc=example,dc=com memberOf

# return result
dn: uid=test1,ou=People,dc=example,dc=com
memberOf: cn=testgroup,ou=Group,dc=example,dc=com
虽然但是

经过上面一系列的操作,memberof 钩子已经能正常启动了,但是细心的看客可能会有2个疑问:为什么上面的导入一部分用SASL机制一部分用简单授权,这个就留给看客发现了~另外一个问题,创建的测试账户都是基于 account 类型的,那登录系统常用的 posixAccount 账户是否通用呢?答案算是否定的,因为后者关联的是 groupOfUniqueNames 组对象中的 UniqueMember 属性,而不是这里的 groupOfNames 组对象的 member 属性。但这也并不是大问题,只是再多添加一个 Overlay 配置的问题,我们在后面讲述客户端接入时再行说明。

总结

通过几章的学习,基本算是掌握了一些OpenLDAP的知识,服务端的学习暂时告一段落了,TLS似乎是个更麻烦的东西,我也不太想继续深入了。接下来,基本都是面向应用层面的学习了。

文章内所涉及代码,可以点击这里下载。

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雨帝夜泪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值