OpenLDAP备份恢复核心是分层覆盖与交叉验证:slapcat做含配置和元数据的底层快照,ldapsearch做可协议读写的逻辑校验;备份需清理系统字段后归档,恢复须分步停服、清空、导入、赋权、验证。

搭建 OpenLDAP 备份恢复机制,核心不是“多备几份”,而是分层覆盖、交叉验证。账号安全依赖数据不丢、不乱、可快速回退——这要求备份既包含完整结构(含配置),又能被标准协议读写;恢复时既要准确还原条目,又要确保服务能立即认出并启用这些数据。
用 slapcat 做底层快照:保全结构与元数据
slapcat 直接读取数据库文件(如 /var/lib/ldap/ 下的 MDB 文件),导出的是最接近物理存储的 LDIF,自带 entryUUID、modifyTimestamp、structuralObjectClass 等系统属性,也包含 ACL、索引、schema 等配置信息(尤其是 -n 0 备份 cn=config)。
- 备份配置(必须):sudo slapcat -n 0 -F /etc/openldap/slapd.d -l config_backup.ldif
- 备份用户数据(主库):sudo slapcat -n 1 -l data_backup.ldif(-n 后数字需与实际数据库编号一致,可用 slapcat -? | grep "database number" 查看)
- 建议停服备份或加 -c 参数跳过临时锁冲突,避免 LDIF 中混入不一致状态
用 ldapsearch 做逻辑校验:模拟真实访问视角
ldapsearch 走标准 LDAP 协议,只导出你有权限看到的业务条目(如 dc=example,dc=com 下的 ou、cn、uid),不含内部元数据,也不含 cn=config。它的价值在于:验证数据是否可被正常查询、确认 ACL 是否生效、提供跨版本/跨平台迁移的干净数据源。
- 基础命令:ldapsearch -x -D "cn=admin,dc=example,dc=com" -w "密码" -b "dc=example,dc=com" -LLL > logical_backup.ldif
- 排除系统属性更干净:ldapsearch -x -D "cn=admin..." -w "密码" -b "dc=example,dc=com" -LLL "(objectClass=*)" dn uid cn mail > clean_users.ldif
- 定期跑一次并与 slapcat 结果比对 DN 数量,能快速发现权限配置异常或条目意外隐藏
备份文件要过滤和归档,不能直接拿来恢复
slapcat 导出的 LDIF 包含大量 slapd 自动维护字段(如 entryCSN、entryUUID),这些在用 slapadd 恢复时会引发 Constraint violation 错误。必须提前清理:
- 用 sed 或 awk 删除固定行:sed -e '/^entryUUID:/d' -e '/^entryCSN:/d' -e '/^creatorsName:/d' -e '/^createTimestamp:/d' -e '/^modifiersName:/d' -e '/^modifyTimestamp:/d' -e '/^structuralObjectClass:/d' data_backup.ldif > clean_data.ldif
- 备份文件按日期+类型命名,例如:20260618_config_full.ldif.gz、20260618_data_logical.ldif.gz
- 压缩后异地保存(如 rsync 到另一台服务器 / NAS),避免单点故障
恢复流程必须分步验证,不能一键到底
恢复不是“把文件放回去就完事”。OpenLDAP 对目录权限、数据库初始化状态、配置加载顺序极为敏感:
- 先停服务:sudo systemctl stop slapd
- 清空前先备份旧数据:sudo mv /var/lib/ldap /var/lib/ldap.bak.$(date +%Y%m%d)
- 恢复配置:sudo slapadd -n 0 -F /etc/openldap/slapd.d -l config_backup.ldif,再 sudo chown -R openldap:openldap /etc/openldap/slapd.d
- 恢复数据:sudo slapadd -n 1 -l clean_data.ldif,再 sudo chown -R openldap:openldap /var/lib/ldap
- 启动后立刻验证:ldapsearch -x -b "dc=example,dc=com" "(uid=testuser)" dn,确认能查到且无报错
不复杂但容易忽略:每次备份后手动抽样检查 LDIF 是否含有效条目,每年至少做一次完整恢复演练。账号安全不在备份那一刻,而在它真正能用起来的时候。

















