我有一个在云提供商处运行的 linux 系统,我使用 LUKS 创建了一个加密容器来存储个人数据。
加密容器手动挂载在/srv
; 系统的其余部分未加密,因此服务器,尤其是 ssh 守护程序在系统引导时自动启动。
目前,如果服务器重新启动(由于需要重新启动的更新或因为运行Droplet的主机系统需要重新启动)我需要手动打开LUKS容器并启动将数据存储在加密分区中的服务( dovecot、mysql 等)。当然,这是拥有加密分区的逻辑结果。但我想知道我是否可以以安全的方式自动执行此操作。
出于明显的原因,我不想将密码存储在服务器上。所以我写了一个在家里的 Raspberry Pi 上运行的小脚本:它每 5 分钟 ssh-es 到服务器并检查 Loopback Device 是否已挂载。/srv
如果不是,它会挂载容器(脚本的相关行,仅在未挂载时才执行):
# Mount Srv Container
ssh root@<ip> "echo -n '*** my passphrase ***' | cryptsetup luksOpen /root/srv_container_file container -"
ssh root@<ip> "mount -t ext4 /dev/mapper/container /srv"
# Start Services that store data on /srv
# ...
该方法有效,但感觉超级hacky。不确定持续连接(即主动检查)是否是一个好主意,我也不确定是否通过将我的密码回显到cryptsetup
.
因此我的问题是:
什么是自动打开 LUKS 容器而不将我的密码存储在服务器上并且不打开我的系统漏洞的好/标准方法(与手动打开容器相比)?非常欢迎参考官方文档。
我想保护自己免受什么伤害?
- 我不知道云提供商如何处理旧的和/或有故障的磁盘。我不希望任何人从我的云提供商制作的物理磁盘或备份中读取我的数据。
我不知道我的磁盘映像是否被移动到物理存储上(根据我的提供商的文档,它是冗余存储的),所以我不希望在我之后有权访问这些块的任何人都能够恢复数据.
我知道一旦攻击者对我正在运行的系统进行 shell 访问,它就结束了,因为分区是打开的并且不需要密码。