全磁盘加密是个好东西——直到你在凌晨3点重启一台无头服务器,才发现需要输入密码,而机架上根本没有键盘。每次重启都要手动输入密码,这很麻烦,尤其是当你的服务器是一台无头虚拟机,放在另一个城市的数据中心机架上时。
这就是Clevis和Tang的用武之地。它们配合起来,让服务器在启动时自动解锁LUKS2加密卷,但前提是服务器能够通过网络访问到你的Tang服务器。连不上Tang服务器?那就无法解锁。这种设计很优雅:即使有人把物理服务器搬走,你的数据依然是安全的。
![]()
Clevis和Tang的通信机制很有意思。启动时,Clevis联系Tang并发起JOSE/JWK密钥交换。安全的关键在于"什么没有发生"——你的LUKS密码从未被传输,Tang对磁盘密钥一无所知,派生密钥只在内存中存在足够长的时间来解锁卷。网络流量对攻击者毫无价值,Tang服务器也永远看不到你的LUKS密码,它只是参与数学运算。
如果Tang服务器不可达,Clevis就收不到响应,密钥交换失败,磁盘保持锁定状态。你仍然可以回退到手动密码,这是作为备份保留的独立LUKS密钥槽。
务必保留这个备份密码密钥槽!Clevis会添加自己的密钥槽,但不会触碰你现有的密码。保留它,存进你的密码管理器。如果Tang永久下线,你会需要它的。LUKS支持多个密钥槽正是为了这种情况。
在位于不同位置的安全密钥服务器上安装Tang。Tang作为简单的systemd套接字服务运行,非常轻量——它仅作为密钥交换端点,不需要数据库,除了自动生成密钥材料外也不需要配置文件。密钥材料自动生成在/var/db/tang/目录下。仅此而已,无需配置。
安装命令如下:先更新软件包列表,然后安装tang和jose。启用并启动tangd.socket服务。可以更改端口,比如改成9102。修改/lib/systemd/system/tangd.socket文件后重新加载systemd。用curl 127.0.0.1:9102/adv验证服务是否运行。
通过独立网段和随机高位端口加固服务器安全。/adv端点以JSON格式返回Tang的公钥广告。如果你能curl通,Clevis启动时就能连上;如果连不上,Clevis也一样——先修防火墙。
在LUKS加密服务器上安装Clevis:更新软件包列表,安装clevis、clevis-luks、clevis-initramfs、clevis-systemd。找到你的LUKS2设备,用cryptsetup luksDump查看分区信息。
重启前务必测试手动密码:cryptsetup --test-passphrase --key-slot 0 open /dev/sda3。然后将LUKS2设备绑定到Tang密钥服务器,命令会要求输入现有LUKS密码,然后获取Tang公钥并为LUKS分区添加新密钥槽。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.