我在 RAID-1 系统加密设备(LUKS 上的 LVM)上安装了 Debian Linux 系统 (amd64),并且将有一个大于等于 4 个磁盘的 RAID-6,我将在其中放置我的数据(LUKS,也许还有 LVM)。
我认为基本思想是解锁系统加密分区(在本地启动或通过 ssh 启动时)并将密钥文件存储在 /etc/crypttab 中以用于 RAID-6 加密分区。这会带来安全风险吗?我的意思是……如果任何人都可以本地/远程进入我的系统,那么这是毫无用处的,而且我认为有很多服务在容易受到“root”攻击的服务器上运行(例如 SSH)。是否有其他选择(除了通过 SSH 解锁分区之外,这可能是一个问题,因为例如备份操作甚至在安装数据分区之前就开始了)。
在另一台机器上,我将使用多个带有 LUKS+greyhole(无 RAID-6)的磁盘进行备份,通过输入 10 次相同的密码来解锁 10 个磁盘将是一个真正的痛苦......
答案1
您可以使用自动/lib/cryptsetup/scripts/decrypt_derived
将crypttab
一个磁盘中的密钥用于另一磁盘。
该decrypt_derived
脚本是 Debian 的 cryptsetup 包的一部分。
将密钥从 sda6crypt 添加到 sda5 的小示例:
/lib/cryptsetup/scripts/decrypt_derived sda6crypt > /path/to/mykeyfile
cryptsetup luksAddKey /dev/sda5 /path/to/mykeyfile
ls -la /dev/disk/by-uuid/ | grep sda5
echo "sda5crypt UUID=<uuid> sda6crypt luks,keyscript=/lib/cryptsetup/scripts/decrypt_derived" >> /etc/crypttab
shred -u /path/to/mykeyfile # remove the keyfile
由于现在真正删除文件非常困难,因此请确保 /path/to/mykeyfile 位于加密驱动器上(sda6crypt
在我的示例中将是一个很好的解决方案)。
一般来说,您可以通过使用用户空间文件系统加密(例如通过encfs
.
答案2
考虑使用decrypt_keyctl
代替,因为:
- LUKS2 兼容性。
decrypt_derived
新安装时不要盲目使用。这可能会导致静态错误消息取而代之的是密钥槽中的安全派生密码。 - 默认情况下,密码在 60 秒后超时。 root 始终可以使用派生密码。
- 它几乎具有
decrypt_derived
密钥文件带来的所有优点。缺点是,您无法将其用于稍后连接到系统的磁盘。
答案3
根据 jofels 的回答,这里是相同的示例,但无需将密钥存储在文件中。密钥在命名管道中传递,该管道不会将任何内容存储到磁盘上。
您可以/lib/cryptsetup/scripts/decrypt_derived
在 crypttab 中使用自动将一个磁盘中的密钥用于另一磁盘的密钥。该decrypt_derived
脚本是 Debian 的 cryptsetup 包的一部分。
修改后的示例将密钥从 sda6crypt 添加到 sda5:
mkfifo fifo
/lib/cryptsetup/scripts/decrypt_derived sda6crypt > fifo &
cryptsetup luksAddKey /dev/sda5 fifo
rm fifo
ls -la /dev/disk/by-uuid/ | grep sda5
echo "sda5crypt UUID=<uuid> sda6crypt luks,initramfs,keyscript=/lib/cryptsetup/scripts/decrypt_derived" >> /etc/crypttab
该keyscript
选项仅在crypttab
由 Debian 原始 cryptsetup 工具处理时才有效,systemd 重新实现当前不支持它。如果您的系统使用 systemd(这是大多数系统),则需要initramfs
在 systemd 启动之前选择通过 cryptsetup 工具强制在 initrd 中进行处理。