更改存储 LDAP 数据的位置

更改存储 LDAP 数据的位置

我在 CentOS 7 上运行 openLDAP 服务器版本 2.4.40。LDAP 将使用在线配置选项 (olc) 进行配置。感谢这个问题,我知道 slapd 的数据库文件在 中/var/lib/ldap

我正在尝试在 Linux 机器上运行 openLDAP 服务器作为只读操作系统分区,另一个分区用于持久数据。我将能够在操作系统分区上安装和配置 openLDAP,但配置后将无法访问它。

问题:是否可以更改 LDAP 读取/写入数据的位置/var/lib/ldap到持久数据分区的某个地方?

答案1

我习惯在每次新设置后移动 openldap 的默认数据库。

当我想移动数据库时执行的步骤:

  • 停止slapd
sudo service slapd stop
  • slapcatcn=configLDIF 文件中分支的内容
sudo slapcat -b cn=config > /tmp/config.ldif
  • 将目录复制/var/lib/ldap到您想要的位置
  • 确保用户openldap拥有新目录以及其中的所有文件
  • 编辑先前导出的 LDIF,以修改olcDbDirectory到新位置
  • 导入 LDIF(/etc/ldap/slapd.d执行此操作前请确保为空)
sudo rm -r /etc/ldap/slapd.d/*
sudo slapadd -F /etc/ldap/slapd.d -b cn=config -l /tmp/config.ldif
  • 确保/etc/ldap/slapd.d及其所有内容均归openldap
sudo chown -R openldap:openldap /etc/ldap/slapd.d/
  • 编辑所需的配置以允许 Slapd 使用这个新的数据库目录

例如,使用apparmor编辑文件/etc/apparmor.d/usr.sbin.slapd并添加以下行:

/path/to/new/db/ r,
/path/to/new/db/** rwk,
  • 重新启动 apparmor 和 slapd
sudo service apparmor restart
sudo service slapd start

通常它可以解决问题。这也是我备份 openldap 实例配置的方法。

答案2

我把你的问题分为两部分来阅读:

  1. 您希望操作系统为只读,同时保留对 LDAP 数据的写访问权限
  2. 作为 #1 的解决方案,您建议将 LDAP 数据存储在/var/lib/ldap

虽然我怀疑 #2 是可能的,但我没有足够的 OpenLDAP 直接经验来直接解决这个问题。我能做的是为 #1 提出一个替代解决方案。/var/lib/ldap通过mount命令和通过,在 处安装不同的磁盘分区很简单fstab。这应该可以有效地实现您的目标,无论 OpenLDAP 是否原生处理这个问题。您还可以用指向/var/lib/ldap所需位置的符号链接替换文件夹。同样,这会绕过 OpenLDAP 以及该项目中内置或未内置的任何支持。

最后,您还应该考虑保留某些日志区域的写访问权限。上文中的技巧也适用于移动日志文件位置。

答案3

Openldap 似乎不支持在创建数据库、DB 和文件后对其进行移动。Openldap 目前也不支持删除 DB 文件。

可以创建一个新的 DB 文件并将其 olcDbDirectory 属性定义为另一个分区上的路径。

dn: olcDatabase=bdb,cn=config
objectClass: olcBdbConfig
olcDatabase: bdb
olcDbDirectory: /partition/db/new-db-file
olcSuffix: dc=example,dc=net

信息见第 6.1.1.4.5 章使用 OLC 添加/删除数据库

答案4

我已经成功完成了这项工作,并在 AWS 中使用它来在必须刷新机器映像时保留我的数据。如果您已经使用

slaptest -f slapd.conf -F slapd.d 

命令(是的,我们仍在使用旧的配置方式,但使用 -slapd.d我正在研究它)那么实际上你所要做的就是修改 slapd.conf 的数据库配置部分中的目录位置

directory /data/ldap

创建DB_CONFIG文件(chownldap:ldap),/data/ldap因为如果文件不存在,LDAP 就会发出警报。

运行slaptest命令 ( slaptest -f slapd.conf -F slapd.d) 后,您的数据库将在此创建。
您可能需要chown -R ldap:ldap /data/etc/openldap完成命令后执行此slaptest操作。

如果成功,您的数据库将位于/data/ldap

将文件保存slapd.conf在外部分区上,以便在设置另一台服务器时可以将其导入回来。

当您需要启动另一台服务器时,请导入文件slapd.conf并运行 slaptest 命令。您必须chown -R ldap:ldap重复上述/data操作/etc/openldap,但当您启动 openldap 时,它应该会获取外部分区上的数据库。

目前这是一个不稳定的解决方案,但它在云中支持 OpenLDAP 方面为我们提供了很好的帮助。我们显然会简化这个尴尬的过程。我们将编写所有脚本,也许会移动/etc/openldap到符号链接的外部驱动器,并修改只slapd.d使用ldifs而不是依赖已弃用的slapd.conf,但目前它运行良好。

相关内容