我想为远程专用服务器设置一个尽可能简单的静态加密解决方案。我使用的主机将提供物理磁盘,并且没有现成的加密块级存储解决方案。
我考虑了以下设置。保持主服务器分区未加密,这样服务器无需提供密钥即可启动。通过 LUK 创建一个加密卷作为附加分区,使用密钥对其进行加密,然后使用密码对该密钥进行加密并将其存储在服务器上。然后,我编写一个脚本,通过 SSH 安装给定密码的卷(使用 nohup 或 screen 确保在 SSH 会话关闭后安装仍然存在),始终将解密的密钥保存在内存中。加密卷将包含所有敏感数据以及运行我的服务所需的软件。
现在令我担心的下一件事是交换,如果启用了交换,那么所有这些秘密都可以以未加密的形式缓存在根分区上,所以一个解决方案是禁用交换,但这对我很有用,因为我的服务需要大量内存,可能会暂时使内存使用量超出物理可用量。
之前我曾使用加密卷并在加密卷上交换文件来解决这个问题,但这是在我具有物理访问权限的服务器上,因此可以利用手动输入 luks 密码或使用 usb 密钥,但对我来说这两种方法都不是可行的解决方案。
我想知道在加密卷上有一个交换文件或整个加密交换卷在启动时未挂载时的行为是什么。当服务器重新启动并且找不到此交换文件/卷时会发生什么。我认为这会阻止它启动,但是是否有一些 fstab 设置(如 nofail 或 noauto)可以使服务器在没有交换的情况下启动,然后使用我的挂载脚本启用它(让它在解密和挂载后打开交换),但以这样的方式,如果该交换文件在启动期间不可用,它仍然可以启动但交换关闭。我希望这有意义。