20.3. 在大型机构中使用 volume_key
在大型组织中,使用每位系统管理员知道的单个密码并跟踪各个系统的单独密码是不切实际的,而且存在安全风险。为克服这一点,volume_key 可以使用非对称加密加密来最小化知道访问任何计算机上加密数据所需的密码的人员数量。
本节将涵盖在保存加密密钥前需要准备的流程、如何保存加密密钥、恢复对卷的访问以及设置紧急密码短语。
20.3.1. 准备保存加密密钥
为了开始保存加密密钥,需要进行一些准备。
过程 20.3. 准备
- 创建 X509 证书/专用对。
- 指定信任的用户,这些用户可信,不会泄露私钥。这些用户将能够解密托管数据包。
- 选择将使用哪些系统解密托管数据包。在这些系统上,建立包含私钥的 NSS 数据库。如果没有在 NSS 数据库中创建私钥,请按照以下步骤操作:
- 将证书和私钥存储在
PKCScriu 文件中
。 - 运行:
certutil -d
/the/nss/directory
-N此时,可以选择 NSS 数据库密码。每个 NSS 数据库都有不同的密码,因此如果每个用户使用单独的 NSS 数据库,则指定的用户无需共享单个密码。 - 运行:
pk12util -d
/the/nss/directory
-ithe-pkcs12-file
- 将证书分发给安装系统或将密钥保存在现有系统上的任何人。
- 对于保存的私钥,准备允许按机器和卷查找它们的存储。例如,这可以是一个简单的目录,每台机器有一个子目录,或者用于其他系统管理任务的数据库。
20.3.2. 保存加密密钥
完成所需的准备(请参阅 第 20.3.1 节 “准备保存加密密钥”)后,现在可以使用以下流程保存加密密钥。
注意
对于此文件中的所有示例,
/path/to/volume
是 LUKS 设备,而不是包含的明文设备; blkid -s 类型 /path/to/volume
应报告 type="crypto_LUKS"
。
过程 20.4. 保存加密密钥
- 运行:
volume_key --save
/path/to/volume
-c/path/to/cert
escrow-packet - 将生成的
escrow-packet
文件保存到准备好的存储中,将其与系统和卷相关联。
这些步骤可以手动执行,也可以作为系统安装的一部分编写成脚本。
20.3.3. 恢复对卷的访问
保存加密密钥(请参阅 第 20.3.1 节 “准备保存加密密钥” 和 第 20.3.2 节 “保存加密密钥”)后,可以根据需要恢复对驱动程序的访问。
过程 20.5. 恢复对卷的访问
- 从数据包存储中获取卷的托管数据包,并将其发送到指定用户之一进行解密。
- 指定的用户运行:
volume_key --reencrypt -d
/the/nss/directory
escrow-packet-in -o escrow-packet-out提供 NSS 数据库密码后,指定的用户选择加密 escrow-packet-out 的密码短语。此密语每次都可能会有所不同,且只在加密密钥从指定用户移至目标系统时保护加密密钥。 - 从指定的用户获取
escrow-packet-out
文件和密码短语。 - 在可以运行 volume_key 且可以使用
escrow-packet-out
文件的环境中引导目标系统,比如在救援模式下。 - 运行:
volume_key --restore
/path/to/volume
escrow-packet-out将出现一个提示,提示指定用户所选择的数据包密码,以及卷的新密码。 - 使用所选的卷密语挂载卷。
可以使用 cryptsetup luksKillSlot 删除忘记的旧密码短语,例如,在加密卷的 LUKS 标头中释放密语插槽。这可以通过 cryptsetup luksKillSlot device key-slot 命令完成。如需更多信息和示例,请参阅 cryptsetup --help。
20.3.4. 设置紧急密码
在某些情况下(如业务旅行),系统管理员直接操作受影响的系统是不切实际的,但用户仍需要访问这些系统的数据。在这种情况下,volume_key 可以使用密码短语和加密密钥。
在系统安装过程中,运行:
volume_key --save /path/to/volume
-c /path/to/ert
--create-random-passphrase passphrase-packet
这会生成随机密码短语,将其添加到指定的卷中,并将其保存到
passphrase-packet
中。也可以组合 --create-random-passphrase 和 -o 选项,以同时生成这两个数据包。
如果用户忘记了密码,指定用户运行:
volume_key --secrets -d /your/nss/directory passphrase-packet
这将显示随机密码短语。向最终用户提供此密码短语。