当前位置: 首页 > 科技观察

使用Stratis进行网络绑定磁盘加密

时间:2023-03-13 03:05:47 科技观察

在具有许多加密磁盘的环境中,解锁所有磁盘是一项艰巨的任务。网络绑定磁盘加密(NBDE)有助于自动化解锁Stratis卷的过程。这是大型环境中的关键要求。Stratis2.1版本增加了对加密的支持,这在文章《Stratis 加密入门》中有介绍。Stratis2.3版本最近在使用加密的Stratis池时引入了对网络绑定磁盘加密(NBDE)的支持,这是本文的主题。Stratis网站将Stratis描述为“易于使用的Linux本地存储管理器”。短视频《使用 Stratis 管理存储》给出了基础知识的快速演示。该视频是在RedHatEnterpriseLinux8系统上录制的,但是,视频中显示的概念也适用于FedoraLinux上的Stratis。先决条件本文假定您熟悉Stratis和Stratis池加密。如果您不熟悉这些主题,请参阅本文和前面提到的Stratis概述视频。NBDE需要Stratis2.3或更高版本。本文中的示例使用FedoraLinux34的预发布版本。FedoraLinux34的最终版本将包括Stratis2.3。网络绑定磁盘加密(NBDE)概述加密存储的主要挑战之一是在系统重启后以安全的方式再次解锁存储。在大型环境中,手动输入加密密码的效果不佳。NBDE解决了这个问题,允许以自动方式解锁加密存储。在较高级别,NBDE需要环境中有一个Tang服务器。客户端系统(使用ClevisPin)只要与Tang服务器建立网络连接,就可以自动解密存储。如果网络未连接到唐服务器,则必须手动解密存储。这背后的想法是Tang服务器只能在内网使用,所以如果加密设备丢失或被盗,将无法再访问内网连接到Tang服务器,因此不会自动解密。有关Tang和Clevis的更多信息,请参阅手册页(mantang,manclevis)、Tang的GitHub页面和Clevis的GitHub页面。搭建Tang服务器本例中使用另一个FedoraLinux系统作为Tang服务器,主机名为tang-server。首先安装tang包。dnfinstalltang然后使用systemctl启用并启动tangd.socket。systemctlenabletangd.socket--nowTang使用TCP端口80,因此您也需要在防火墙中打开该端口。firewall-cmd--add-port=80/tcp--permanentfirewall-cmd--add-port=80/tcp最后,运行tang-show-keys以显示输出签名密钥指纹。稍后您将需要它。#tang-show-keysl3fZGUCmnvKQF_OA6VZF9jf8z2s创建加密的StratisPool之前关于Stratis加密的文章详细介绍了如何设置加密的Stratispool,本文不再深入。第一步是捕获将用于解密Stratis池的密钥。即使使用NBDE,也需要进行设置,因为它可用于在无法访问NBDE服务器的情况下手动解锁池。使用以下命令捕获pool1密钥。#stratiskeyset--capture-keypool1keyEnterkeydatafollowedbythereturnkey:然后我将使用/dev/vdb设备创建一个加密的Stratis池(使用刚刚创建的pool1key),命名为pool1。#stratispoolcreate--key-descpool1keypool1/dev/vdb。接下来,在这个Stratispool中创建一个名为filesystem1的文件系统,创建一个挂载点,挂载文件系统,并在其中创建一个测试文件:#stratisfilesystemcreatepool1filesystem1#mkdir/filesystem1#mount/dev/stratis/pool1/filesystem1/filesystem1#cd/filesystem1#echo"thisisatestfile">testfile将Stratis池绑定到Tang服务器至此,我们已经创建了一个加密的Stratis池并创建了一个文件系统。下一步是将您的Stratis池绑定到您刚刚设置的Tang服务器。使用stratispoolbindnbde命令。Tang绑定时,需要给命令传递几个参数:池名(本例中为pool1)Key描述符名(本例中为pool1key)Tang服务器名(本例中为http://tang-server)记得之前在Tang服务器上运行过tang-show-keys,显示Tang输出的签名密钥指纹是l3fZGUCmnvKQF_OA6VZF9jf8z2s。除了前面的参数,还需要使用参数-thumbprintl3fZGUCmnvKQF_OA6VZF9jf8z2s来传递这个指纹,或者使用-trust-url参数跳过指纹的验证。使用-thumbprint参数更安全。例如:#stratispoolbindnbdepool1pool1keyhttp://tang-server--thumbprintl3fZGUCmnvKQF_OA6VZF9jf8z2s使用NBDE解锁Stratis池接下来重新启动主机并验证您是否可以使用NBDE解锁Stratis池而不使用密钥密码。重新启动主机后,池不再可用:#stratispoollistNameTotalPhysicalProperties要使用NBDE解锁池,请运行以下命令:#stratispoolunlockclevis请注意,您不需要使用密钥密码。该命令可以在系统启动时自动运行。此时,Stratis池可以使用了:#stratispoollistNameTotalPhysicalPropertiespool14.98GiB/583.65MiB/4.41GiB~Ca,Cr您可以挂载文件系统并访问之前创建的文件:#mount/dev/stratis/pool1/filesystem1/filesystem1/#cat/filesystem1/testfile这是一个测试文件轮换Tang服务器密钥定期轮换Tang服务器密钥并更新Stratis客户端服务器以使用新的Tang密钥是个好主意。要生成新的Tang密钥,首先登录到Tang服务器并检查/var/db/tang目录的当前状态。然后,运行tang-show-keys命令:#ls-al/var/db/tangtotal8drwx-----。1唐唐124年3月15日15:51.drwxr-xr-x。1rootroot16Mar1515:48..-rw-r--r--.1唐唐3613月15日15:51hbjJEDXy8G8wynMPqiq8F47nJwo.jwk-rw-r--r--。1tangtang367Mar1515:51l3fZGUCmnvKQF_OA6VZF9jf8z2s.jwk#tang-show-keysl3fZGUCmnvKQF_OA6VZF9jf8z2s要生成新密钥,请运行tangd-keygen并将其指向/var/db/tang目录:#/usr/libexec/tangd-keygen/var/db/tang如果您随后查看/var/db/tang目录,您将看到两个新文件:#ls-al/var/db/tangtotal16drwx------。1唐唐248年3月22日10:41.drwxr-xr-x。1rootroot16Mar1515:48..-rw-r--r--.1唐唐3613月15日15:51hbjJEDXy8G8wynMPqiq8F47nJwo.jwk-rw-r--r--。1根3543月22日10:41iyG5HcF01zaPjaGY6L_3WaslJ_E.jwk-rw-r--r--。1rootroot349Mar2210:41jHxerkqARY1Ww_H_8YjQVZ5OHao.jwk-rw-r--r--。1tangtang367Mar1515:51l3fZGUCmnvKQF_OA6VZF9jf8z2s.jwk如果你运行tang-show-keys将显示Tang发布的密钥:#tang-show-keysl3fZGUCmnvKQF_OA6VZF9jf8z2siyG5HcF01zaPjaGY6JL_E3Was可以重命名两个原始文件,以防止发布旧密钥(以l3fZ开头)。这样,旧密钥将不再被发布,但它仍然可以被任何尚未更新为使用新密钥的现有密钥使用。客户端使用。一旦所有客户端都更新为使用新密钥,就可以删除旧密钥文件。#cd/var/db/tang#mvhbjJEDXy8G8wynMPqiq8F47nJwo.jwk.hbjJEDXy8G8wynMPqiq8F47nJwo.jwk#mvl3fZGUCmnvKQF_OA6VZF9jf8z2s.jwk.l3fZGUCmnvKQF_OA6VZF9jf8z2s.jwk此时,如果再运行tang-show-keys,Tang只公布新钥匙:#tang-show-keysiyG5HcF01zaPjaGY6L_3WaslJ_E接下来,切换到您的Stratis系统并更新它以使用新的Tang密钥。当文件系统在线时,Stratis支持这一点。首先,取消绑定池:#stratispoolunbindpool1接下来,使用创建加密池时使用的原始密码设置密钥:#stratiskeyset--capture-keypool1keyEnterkeydatafollowedbythereturnkey:最后,绑定使用更新的密钥指纹将Stratis池连接到Tang服务器:#stratispoolbindnbdepool1pool1keyhttp://tang-server--thumbprintiyG5HcF01zaPjaGY6L_3WaslJ_EStratis系统现在配置为使用更新的Tang密钥。一旦使用旧唐密钥的任何其他客户端系统更新,可以备份和删除唐服务器上/var/db/tang目录中重命名为存储文件的两个原始密钥文件。唐服不可用怎么办?接下来,关闭Tang服务器,模拟其不可用,重启Stratis系统。重新启动后,Stratispool再次不可用:#stratispoollistNameTotalPhysicalProperties如果您尝试使用NBDE解锁,它将失败,因为Tang服务器不可用:#stratispoolunlockclevisExecutionfailed:Aniterativecommandgeneratedoneormoreerrors:对池类型资源的“解锁”操作失败。发生以下错误:UUID为4d62f840f2bb4ec9ab53a44b49da3f48的池的部分操作“解锁”失败:Cryptsetup错误:失败错误:错误:命令失败:cmd:“clevis”“unlock”“-d”“/dev/vdb”“-n““stratis-1-private-42142fedcb4c47cea2e2b873c08fcf63-crypt”,退出原因:1stdout:stderr:/dev/vdb无法打开。此时,在Tang服务器无法访问的情况下,解锁池的唯一选择是使用原始密钥密码:#stratiskeyset--capture-keypool1keyEnterkeydatareturnkey:然后就可以使用解锁池的密钥:#stratispoolunlockkeyring接下来,验证池是否已成功解锁:#stratispoollistNameTotalPhysicalPropertiespool14.98GiB/583.65MiB/4.41GiB~Ca,Cr