我想通过使用加密分区和存储在网络上另一台服务器上的密钥文件来保护 Linux 服务器上的数据免遭物理盗窃。另一台服务器实际上是我的路由器,它非常小,与服务器位于不同的物理位置,并且可以通过 ssh 访问。
我认为有人从一个位置窃取服务器,闯入第二个位置,找到并窃取路由器,然后将它们设置在同一网络中的可能性非常小。这意味着只要我的服务器连接到我的网络,它就会始终重新启动并启动所有服务,但如果我的重要数据离开建筑物,它就会受到保护。
启动顺序类似于:
- 挂载非加密逻辑分区(
/
、/var
等/tmp
) - 开始联网
- 通过 ssh 从另一台服务器获取密钥
- 解锁加密的物理分区
- 挂载加密逻辑分区(
/home
等/opt
) - 启动其他已配置为使用加密分区的服务 - 例如 Docker
我不知道如何连接 LVM/加密启动序列以插入脚本来获取密钥,也不知道如何更改启动序列以便在该步骤之前启动网络。
Linux 机器上的 root 用户将在路由器上设置一个 ssh 密钥,这样它就可以在没有密码的情况下进行 ssh,如下所示:
PASSPHRASE=$(ssh router cat /config/disk-passphrase.txt)
cryptsetup luksOpen /dev/sda6 sda6_crypt <<< $PASSPHRASE
这是我到目前为止的磁盘布局,尽管我愿意在必要时更改它:
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda2
├─sda5 LVM2_memb fjRt18-XKFm-z3RN-1D7t-zkuw-sMal-KyOZ6Z
│ ├─garage--main--vg-tmp ext4 e90a6186-bf09-41f7-b8bc-392e0fba2207 /tmp
│ ├─garage--main--vg-var ext4 ee878d29-3b44-463f-adba-083155ea29da /var
│ └─garage--main--vg-root ext4 f4fa0962-3c2c-456c-9ee0-84c47d6c12c9 /
├─sda1 ext4 60d06dea-a07b-4af3-bf30-70fa3f82267d /boot
└─sda6 crypto_LU 31b7b643-188c-4ae9-bac6-75316b37d562
└─sda6_crypt LVM2_memb ynUOJB-iRsP-djql-Tzrl-nfHh-Smga-ji4OcT
├─garage--enc--vg-opt ext4 2f149989-f64c-4cab-8a47-fea80ebf4c8e /opt
├─garage--enc--vg-swap_0 swap bab96476-7209-42c7-9f2a-113dd5c4da67 [SWAP]
└─garage--enc--vg-home ext4 c73b9432-ec32-412c-baa4-1329adef9c56 /home