10使用加密目录cryptctl
#
cryptctl
由两部分组成:
客户机是具有一个或多个加密分区,但不永久存储解密这些分区所需的密钥的机器。例如,客户端可以是云或其他托管的机器。
服务器持有加密密钥,客户端可以请求这些密钥来解锁加密的分区。
您还可以设置
cryptctl
服务器在KMIP 1.3兼容(密钥管理互操作性协议)服务器上存储加密密钥。在这种情况下,cryptctl
服务器将不存储客户端的加密密钥,并依赖于与kmip兼容的服务器来提供这些密钥。
cryptctl
服务器维护的cryptctl
服务器管理加密磁盘的超时时间。根据配置,它还可以保存加密密钥。因此,它应该在您的直接控制下,并仅由可信的人员管理。
此外,还应定期备份。丢失服务器数据意味着失去对客户机上加密分区的访问权。
要处理加密,cryptctl
使用带有aes-xts-256加密和512位密钥的LUKS。加密密钥使用带有证书验证的TLS传输。
cryptctl
(未连接KMIP服务器的型号)
#
cryptctl
在继续之前,请确认包装cryptctl将安装在您打算设置为服务器或客户端的所有计算机上。
10.1建立cryptctl
服务器#
才能将机器定义为cryptctl
客户端,您需要设置一台机器作为cryptctl
服务器。
在开始之前,请选择是否使用自签名证书来保护服务器和客户端之间的通信。如果不是,请为服务器生成TLS证书,并由证书颁发机构对其进行签名。
此外,您可以让客户端使用由证书颁发机构签署的证书向服务器进行身份验证。要使用这种额外的安全措施,请确保在开始此过程之前手头有CA证书。
作为
根
运行:#
cryptctl init-server
回答以下每个提示并按下输入每次回答之后。如果有默认答案,则在提示符的末尾用方括号显示。
选择至少10个字符的密码并确认。此密码承担主密码的角色,能够解锁在服务器上注册的所有分区。
请指定pem编码的TLS证书或证书链文件的路径,或将该字段留空以创建自签名证书。如果指定路径,请使用绝对路径。
如果您希望服务器由显示的默认主机名以外的主机名标识,请指定主机名。
cryptctl
将生成包含主机名的证书。指定属于要侦听来自客户机的解密请求的网络接口的IP地址,然后设置一个端口号(默认为端口3737)。
默认IP地址设置,
0.0.0.0
意味着cryptctl
将在所有网络接口上监听使用IPv4的客户端请求。在服务器上指定存放客户端解密密钥的目录。
指定客户端是否需要使用TLS证书向服务器进行身份验证。如果你愿意
,这意味着客户端仅使用磁盘uuid进行身份验证。(但是,在任何情况下,通信都将使用服务器证书进行加密。)如果你愿意
,选择一个pem编码的证书颁发机构用于签署客户端证书。指定是否使用兼容KMIP 1.3的服务器(或多个这样的服务器)存储客户端的加密密钥。如果选择此选项,请为一个或多个与kmip兼容的服务器提供主机名和端口。
此外,为KMIP服务器提供用户名、密码、CA证书和客户机身份证书
cryptctl
服务器。重要:不容易重新配置KMIP设置以后不能轻易更改使用KMIP服务器的设置。要更改此设置,请同时使用
cryptctl
服务器及其客户端需要重新配置。最后,为加密和解密请求的电子邮件通知配置一个SMTP服务器,或者将提示符保留为空以跳过设置电子邮件通知。
注意:密码保护服务器cryptctl
目前无法使用身份验证保护的SMTP服务器发送电子邮件。如果有必要,可以设置一个本地SMTP代理。当问到是否开始时
cryptctl
服务器,输入y
.
查询服务状态
cryptctl-server
使用:#
Systemctl status cryptctl-server
如果稍后要重新配置服务器,请执行以下操作之一:
执行命令
cryptctl init-server
再一次。cryptctl
然后将现有的设置建议为默认值,这样您只需要指定您想要更改的值。直接在配置文件中进行更改
/etc/sysconfig/cryptctl-server
.但是,为了避免出现问题,请不要更改设置
AUTH_PASSWORD_HASH
而且AUTH_PASSWORD_SALT
手动。需要正确计算这些选项的值。
10.2建立cryptctl
客户端#
下面的交互设置cryptctl
是目前唯一的设置方法。
确保满足以下先决条件:
一个
cryptctl
服务器可通过网络访问。有一个要加密的目录。
客户端机器有一个可用的空分区,其大小足以容纳要加密的目录。
使用自签署证书时,证书(
* .crt
在服务器上生成的文件)在客户端本地可用。否则,客户端必须信任服务端证书的颁发机构。如果您将服务器设置为要求客户端使用客户端证书进行身份验证,请为客户端准备TLS证书。它必须由您为服务器选择的CA证书进行签名。
作为
根
运行:#
cryptctl加密
回答以下每个提示并按下输入每次回答之后。如果有默认答案,则在提示符的末尾用方括号显示。
上指定要连接的主机名和端口
cryptctl
服务器。如果您将服务器配置为让客户端使用TLS证书向其进行身份验证,请为客户端指定证书和密钥文件。客户端证书必须由设置服务器时选择的证书颁发机构签名。
指定服务器证书的绝对路径
* .crt
文件)。输入设置服务器时指定的加密密码。
指定要加密的目录的路径。指定将包含目录加密内容的空分区的路径。
指定允许同时解密该分区的计算机数量。
然后指定在从客户机接收到最后一个生命体征后允许其他计算机解密该分区之前的超时时间(以秒为单位)。
当一台机器意外地停止工作,然后重新启动时,它需要能够再次解锁其分区。这意味着,这个超时时间应该设置为略短于客户机重启时间的时间。
重要:超时长度如果时间设置得太长,机器无法在第一次尝试时解密加密分区。
cryptctl
然后将继续定期检查加密密钥是否可用。然而,这将导致延迟。如果超时设置得太短,那么拥有加密分区副本的计算机首先解锁该分区的机会就会增加。
开始加密,输入
是的
.cryptctl
现在将指定的目录加密到以前的空分区,然后挂载新加密的分区。文件系统类型将与原始的未加密文件系统类型相同。在创建加密分区之前,
cryptctl
将原始目录的未加密内容移动到前缀为cryptctl-moved -
.要检查目录是否正确挂载,请使用:
>
lsblk -o名称,挂载点,UUID
命名挂载点uuid[…]] SDC├─sdc1PARTITION_UUID└─cryptctl-unlocked-sdc1 / secret-partitionUNLOCKED_UUIDcryptctl
通过其UUID标识加密分区。对于前面的示例,这就是旁边显示的UUIDsdc1
.在服务器端,可以查看该目录是否被解密
cryptctl
:#
cryptctl list-keys
2016/10/10 10:00:00 ReloadDB: successfully loaded database of 1 records Total: 1条记录(date and time are in zone EDT) Used By When UUID Max。Users Num.Users挂载点IP_ADDRESS2016-10-10 10:00:00UUID1 1 /secret-partition验证显示的UUID是之前加密分区的UUID。
在确认加密分区工作正常后,从客户端删除未加密的内容。例如,使用
rm
.为了更加安全,请在删除文件之前覆盖它们的内容,例如使用分解- u
.重要的是:分解
不能保证数据被完全擦除根据存储介质的类型,使用
分解
并不能保证所有数据都被完全删除。具体地说,ssd通常采用磨损均衡策略分解
无效的。
从客户端到服务器的连接的配置存储在/etc/sysconfig/cryptctl-client
并且可以手动编辑。
服务器为客户端分区存储加密密钥/var/lib/cryptctl/keydb/PARTITION_UUID
.
10.3使用服务器端命令检查分区解锁状态#
当一个cryptctl
客户端是活动的,它将发送一个”心跳”到cryptctl
服务器每10秒。如果在客户端设置期间配置的超时时间内,服务器没有从客户端接收到心跳,则服务器将假定客户端处于脱机状态。然后,它将允许另一个客户端连接(或允许同一客户端在重新启动后重新连接)。
要查看所有键的使用状态,请使用:
#
cryptctl list-keys
以下资料Num。用户
显示该键当前是否正在使用。要查看单个键的更多细节,请使用:
#
cryptctl关键UUID
这个命令将显示有关挂载点、挂载选项、使用选项、密钥的最后一次检索以及来自客户端的最后三次心跳的信息。
此外,您可以使用journalctl
查找检索密钥时间的日志。
10.4手动解锁加密分区#
手动解锁分区有两种方式,都在客户端上运行:
在线解锁。在线解锁可以规避超时或用户限制。当客户端和服务器之间有网络连接,但客户端(还)不能自动解锁分区时,可以使用这种方法。此方法将解锁机器上的所有加密分区。
要使用它,运行
cryptctl online-unlock
.请准备输入设置服务器时指定的密码。离线解锁。当客户机不能或必须不能联机以与其服务器通信时,可以使用此方法。来自服务器的加密密钥必须仍然可用。这种方法只能作为最后的手段,一次只能解锁一个分区。
要使用它,运行
cryptctl offline-unlock
.必需分区的服务器密钥文件(/var/lib/cryptctl/keydb/PARTITION_UUID
)需要在客户端上可用。
10.5维护停机处理#
为确保在维护停机期间不能解密分区,请关闭客户端并禁用cryptctl
服务器。你可以通过以下方式:
停止服务
cryptctl-server
:#
Systemctl stop cryptctl-server
断开
cryptctl
服务器从网络。
10.6更多信息#
有关更多信息,请参见项目主页https://github.com/HouzuoGuo/cryptctl/.