我在 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
slapcat
cn=config
LDIF 文件中分支的内容
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
我把你的问题分为两部分来阅读:
- 您希望操作系统为只读,同时保留对 LDAP 数据的写访问权限
- 作为 #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
文件(chown
到ldap: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
,但目前它运行良好。