15.7. 备份和恢复证书系统
证书系统不包括备份和恢复工具。但是,证书系统组件仍然可以手动存档和恢复,如果证书或密钥信息丢失,则可能需要访问这些信息。在出现数据丢失或硬件故障时,需要定期备份证书系统的三个主要部分:
- 内部数据库。子系统使用 LDAP 数据库来存储其数据。目录服务器提供自己的备份脚本和步骤。
-
安全数据库。安全数据库存储证书和密钥材料。如果它们存储在 HSM 上,请参阅 HSM 供应商文档来了解如何备份数据。如果信息存储在实例
别名
目录中的默认目录中,则使用实例目录备份。要单独备份,请使用tar
或zip
等实用程序。 -
实例目录。实例目录包含所有配置文件、安全数据库和其他实例文件。这可以通过
tar
或zip
等实用程序备份。
15.7.1. 备份和恢复 LDAP 内部数据库
Red Hat Directory Server 文档 包含有关备份和恢复数据库的更多详细信息。
15.7.1.1. 备份 LDAP 内部数据库
dsctl
命令的两对可用于备份目录服务器实例。每个 back-up 子命令都有一个对应部分来恢复它生成的文件:
-
db2ldif
子命令创建一个 LDIF 文件,您可以使用ldif2db
子命令进行恢复。 -
db2bak
子命令创建一个备份文件,您可以使用bak2db
子命令进行恢复。
15.7.1.1.1. 使用 db2ldif 备份
运行 db2ldif
子命令可备份单个子系统数据库。
因为 db2ldif
子命令使用 dirsrv 用户运行,因此它没有在 /root/
目录下写入的权限,因此您需要提供可以写入的路径。
备份 PKI 子系统使用的每个目录服务器数据库。您可以使用 pki-server ca-db-config-show
命令检查给定子系统的数据库名称。例如,要备份主数据库 userRoot
:
停止实例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow dsctl <instance_name> stop
# dsctl <instance_name> stop
将数据库导出到 LDIF 文件中:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow dsctl <instance_name> db2ldif userroot /tmp/example.ldif
# dsctl <instance_name> db2ldif userroot /tmp/example.ldif OK group dirsrv exists OK user dirsrv exists ldiffile: /tmp/example.ldif [18/Jul/2018:10:46:03.353656777 +0200] - INFO - ldbm_instance_config_cachememsize_set - force a minimal value 512000 [18/Jul/2018:10:46:03.383101305 +0200] - INFO - ldbm_back_ldbm2ldif - export userroot: Processed 160 entries (100%). [18/Jul/2018:10:46:03.391553963 +0200] - INFO - dblayer_pre_close - All database threads now stopped db2ldif successful
启动实例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow dsctl <instance_name> start
# dsctl <instance_name> start
要使用 ldif2db
子命令恢复 LDIF 文件,请参阅 第 15.7.1.2.1 节 “使用 ldif2db 恢复”。
15.7.1.1.2. 使用 db2bak 备份
运行 db2bak
子命令备份该目录服务器的所有证书系统子系统数据库(以及该目录服务器实例维护的任何其他数据库)。例如:
例如:
停止实例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow dsctl <instance_name> stop
# dsctl <instance_name> stop
备份数据库:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow dsctl <instance_name> db2bak
# dsctl <instance_name> db2bak OK group dirsrv exists OK user dirsrv exists [18/Jul/2018:14:02:37.358958713 +0200] - INFO - ldbm_instance_config_cachememsize_set - force a minimal value 512000 ... db2bak successful
启动实例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow dsctl <instance_name> start
# dsctl <instance_name> start
因为 db2bak
子命令使用 dirsrv 用户运行,因此目标目录必须可由 dirsrv 写入。运行不带任何参数的子命令会在 /var/lib/dirsrv/slapd_- <instance_name>_/bak
文件夹中创建备份,其中 db2bak
具有正确的写权限。
要使用 bak2db
恢复 LDIF 文件,请参阅 第 15.7.1.2.2 节 “使用 bak2db 恢复”。
15.7.1.2. 恢复 LDAP 内部数据库
根据您备份目录服务器实例的方式,使用带有对应文件的 ldif2db
或 bak2db
来恢复数据库。
在恢复数据库前,请确保停止实例。
15.7.1.2.1. 使用 ldif2db 恢复
如果您使用 db2ldif
创建 LDIF 文件,请停止 Directory 服务器实例,并使用 ldif2db
子命令导入文件。您可以指定一个数据库来从备份中恢复。例如,对于主数据库,userRoot
:
停止 Directory 服务器实例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow dsctl <instance_name> stop
# dsctl <instance_name> stop
从 LDIF 文件中导入数据:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow dsctl <instance_name> ldif2db userroot /tmp/example.ldif
# dsctl <instance_name> ldif2db userroot /tmp/example.ldif OK group dirsrv exists OK user dirsrv exists [17/Jul/2018:13:42:42.015554231 +0200] - INFO - ldbm_instance_config_cachememsize_set - force a minimal value 512000 ... [17/Jul/2018:13:42:44.302630629 +0200] - INFO - import_main_offline - import userroot: Import complete. Processed 160 entries in 2 seconds. (80.00 entries/sec) ldif2db successful
启动 Directory 服务器实例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow dsctl <instance_name> start
# dsctl <instance_name> start
15.7.1.2.2. 使用 bak2db 恢复
如果您使用 db2bak
创建备份文件,请停止 Directory 服务器并使用 bak2db
子命令导入该文件。例如:
停止 Directory 服务器实例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow dsctl <instance_name> stop
# dsctl <instance_name> stop
恢复数据库:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow dsctl <instance_name> bak2db /var/lib/dirsrv/slapd-<instance_name>/bak/<instance_name>-time_stamp/
# dsctl <instance_name> bak2db /var/lib/dirsrv/slapd-<instance_name>/bak/<instance_name>-time_stamp/ OK group dirsrv exists OK user dirsrv exists [20/Jul/2018:15:52:24.932598675 +0200] - INFO - ldbm_instance_config_cachememsize_set - force a minimal value 512000 ... bak2db successful
启动 Directory 服务器实例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow dsctl <instance_name> start
# dsctl <instance_name> start
15.7.2. 备份和恢复实例目录
实例目录具有子系统实例的所有配置信息,因此备份实例目录会保留不包含在内部数据库中的配置信息。
在备份实例或安全数据库之前,停止子系统实例。
15.7.2.1. 备份实例目录
停止子系统实例。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow pki-server stop <instance_name>
# pki-server stop <instance_name>
将目录保存到压缩文件中:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cd /var/lib/pki/ tar -chvf /export/archives/pki/<instance_name>.tar <instance_name>/
# cd /var/lib/pki/ # tar -chvf /export/archives/pki/<instance_name>.tar <instance_name>/
例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cd /var/lib/pki/ tar -chvf /tmp/test.tar pki-tomcat/ca/
# cd /var/lib/pki/ # tar -chvf /tmp/test.tar pki-tomcat/ca/ pki-tomcat/ca/ pki-tomcat/ca/registry/ pki-tomcat/ca/registry/ca/ ...........
重新启动子系统实例。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow pki-server start <instance_name>
pki-server start <instance_name>
15.7.2.2. 恢复实例目录
如果数据损坏或者硬件损坏,您可以使用证书系统备份文件( 别名
数据库备份和完整实例目录备份)替换当前目录。要恢复数据,请使用 unzip
或 tar
工具解压缩存档文件,并将存档复制到现有文件中。
恢复实例目录:
解压缩存档:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cd /export/archives/pki/ tar -xvf <instance_name>.tar
cd /export/archives/pki/ tar -xvf <instance_name>.tar
例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cd /tmp/ tar -xvf test.tar
# cd /tmp/ # tar -xvf test.tar pki-tomcat/ca/ pki-tomcat/ca/registry/ pki-tomcat/ca/registry/ca/ pki-tomcat/ca/registry/ca/default.cfg .........
如果子系统实例尚未停止,则停止它。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow pki-server stop <instance_name>
pki-server stop <instance_name>
复制存档文件以恢复实例目录:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cp -r /export/archives/pki/<instance_name> /var/lib/pki/<instance_name>
cp -r /export/archives/pki/<instance_name> /var/lib/pki/<instance_name>
例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cp -r /tmp/pki-tomcat/ca/ /var/lib/pki/pki-tomcat/ca/
# cp -r /tmp/pki-tomcat/ca/ /var/lib/pki/pki-tomcat/ca/
确保恢复的文件的所有权和组权限设置为
pkiuser
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow chown -R pkiuser:pkiuser /var/lib/pki/pki-tomcat/ca/
# chown -R pkiuser:pkiuser /var/lib/pki/pki-tomcat/ca/
重新启动子系统实例。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow pki-server start <instance_name>
pki-server start <instance_name>