Linux:LUKS 和多个硬盘驱动器

Linux:LUKS 和多个硬盘驱动器

我在 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_derivedcrypttab一个磁盘中的密钥用于另一磁盘。

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代替,因为:

  1. LUKS2 兼容性。decrypt_derived新安装时不要盲目使用。这可能会导致静态错误消息取而代之的是密钥槽中的安全派生密码。
  2. 默认情况下,密码在 60 秒后超时。 root 始终可以使用派生密码。
  3. 它几乎具有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 中进行处理。

相关内容