有没有办法在启动时自动解锁 LUKS 驱动器,密钥文件存储在远程机器上。这个想法是为了确保服务器可以在没有任何用户输入的情况下重新启动。服务器在公共云上,我无法加密根分区。将密钥文件留在机器上只会破坏加密的目的。
因此,我们的想法是将密钥文件放在通过 ssh 等安全通道连接的远程机器上。
曼陀罗似乎可以满足我的要求,但我有两个问题。-
所有文档都提到了根文件系统。它可以与任何驱动器一起使用吗?
- 文档指出它只能在内部网上使用,如果本地和远程服务器通过 VPN 连接,那么它可以工作吗?
这是最好的解决方案吗?还是唯一的解决方案?
答案1
答案2
网上有各种解决方案(例如这里) 其中 initrd 中包含一个小型 ssh 服务器(busybox+dropbear),以便在文件系统挂载之前在启动时运行它,并让它联系以提供密码作为输入。
您可以采取一些措施来解决此问题:在 initrd 中,启动sshd
服务器以等待远程连接,ssh
使用特定的 ssh 密钥启动与存储密钥的远程主机的连接,以获取密钥文件(执行 scp),然后使用 LUKS 密钥解锁本地文件系统。
但是,它并非没有缺点:您当然需要确保在解锁完成后立即删除下载的 LUKS 密钥,否则您将一无所获。如果您找到一种方法,让它只在需要的时间内保留在 RAM 中,而不是存储在任何地方,那就更好了。此外,“任何”能够读取您的 initrd 内容的攻击者都可以找到 ssh 连接及其 ssh 密钥,与他们联系您的远程主机并下载 LUKS 密钥。但是,如果发生这种情况,则意味着您的攻击者显然是以您为目标,并花时间研究您的特定设置,这显然超出了脚本小子的范围。您至少应该仔细检查下载密钥的所有连接,事件应该与您的其他监控警报相关联,显示给定的服务器确实正在重新启动(这再次无法保护您免受能够修改您的 initrd 的攻击者的攻击)。
您还必须考虑此时网络出现故障、scp
无法连接等情况...因此,同时选择sshd
能够连接并调试的小型服务器并不是一个坏主意。或者看看您的云提供商可以提供哪种带外解决方案。
答案3
我已使用 Mandos 来存储和检索密码以解锁根文件系统,以允许无人值守重启,并简单地将该系统使用的所有其他卷的密钥存储在该加密根卷上的文件中。
我已经通过 WAN 连接使用了 mandos(通过在客户端系统中配置 DHCP 和 mandos 服务器的 IP 地址,而不是依赖仅在本地 LAN 中工作的 Zeroconf),而无需担心 VPN 连接。
答案4
Mandos 似乎可以满足我的需求,但我对此有两个问题。- 所有文档都涉及根文件系统。它可以在任何驱动器上使用吗?
好吧,mandos-client 包假设你想用它来解密根文件系统,并且它的所有二进制文件都有默认值,这使得它们在 initramfs 环境中最容易使用。但它肯定可能的在其他地方运行它。要从正常系统环境运行“mandos-client”二进制文件,需要以下选项:--seckey=/etc/keys/mandos/seckey.txt --pubkey=/etc/keys/mandos/pubkey.txt --network-hook-dir=/etc/mandos/network-hooks.d
- 文档指出它只能在内部网上运行,如果本地和远程服务器通过 VPN 连接,它可以运行吗?
是的,使用--connect
mandos-client 选项,并将 Mandos 服务器配置为使用静态端口号(使用文件port
中的选项mandos.conf
)。通常,当想要使用非内网服务器时,在客户端配置 IP 地址和路由也是一个问题,但由于你是不加密根分区,您就不会遇到这个问题。