Ubuntu 的双因素身份验证全盘加密:如何操作?

Ubuntu 的双因素身份验证全盘加密:如何操作?

背景信息

我是一名 Linux 新手,最近刚开始使用 Windows。我目前使用的是 Ubuntu 11.04,没有全盘加密。只有我的主目录是加密的,并且使用了 eCryptFS。最近,我开始注意到加密并不像它应该的那样透明。例如,VMWare 有时会遇到存储在我的加密主目录中的虚拟机的问题,所以我只是将虚拟机移动到未加密的位置并从我的加密主目录链接到它。但这不是重点:我意识到让系统不加密实际上并不是很安全,因为像 Ubuntu 这样的开源操作系统很容易被修改,从而泄露它应该保密的信息。


目标

我希望能够将全盘加密与密钥设备和密码结合使用,以进行预启动身份验证。


要求/详细信息

  1. 整个磁盘必须加密。至少,磁盘由所有加密的单独分区组成。如果可以用加密隐藏分区,我会这么做。加密越透明越好;我不必以任何不同的方式使用我的电脑或配置任何其他东西。
  2. 用于解锁和启动加密分区的设备必须是小型外部便携式设备。这有两个目的:引导加载程序不太可能被恶意更改,因为它在不使用时会留在我身边;解密磁盘的密钥文件不会以任何形式出现在加密磁盘本身的任何地方。
  3. 密钥文件应该用密码加密。如果我的电脑和 USB 设备都丢失了,数据和操作系统仍然是安全的。如果我丢失了 USB 密钥或它被盗用了,我可以从备份中创建另一个干净的密钥。无论哪种情况都不会泄露任何信息。当然,如果我丢失了电脑,那就无关紧要了。

是的,我看过很多地方的指南,但问题是它们没有解决所有要求(尤其是第 3 项)。我很确定我的需求很常见,有人已经尝试并成功实现了这样的设置。如果有 Linux 专业人士可以分享解决方案,我将不胜感激。

答案1

有一种简单的方法可以实现全盘加密,只需要特定的拇指驱动器和您的密码即可启动。

您要做的是,从完全加密的硬盘驱动器中分离 LUKS 标头,并将其存储在拇指驱动器上。

我假设您已经进行了以下设置:

# /dev/sda1 is the boot partition (100MB)
# /dev/sda2 is the encrypted partition
parted /dev/sda mklabel msdos
parted /dev/sda -- mkpart primary ext2 1M 200M
parted /dev/sda -- mkpart primary ext4 200M -100M
cryptsetup luksFormat /dev/sda2

创建 luks 标头的副本并将其从本地设备中删除:

mkdir /media/ramdisk && mount -t tmpfs -osize=20m,rw tmpfs /media/ramdisk
cryptsetup luksHeaderBackup /dev/sda2 --header-backup-file /media/ramdisk/header.img
dd if=/dev/urandom of=/dev/sda2 bs=1M count=2

如果您的目标客户是高预算机构,请多次运行最后一步。我还创建了一个 ramdisk 来临时保存标头,这样它就不会在之后残留。

将你的 USB 设备放在 /dev/sdb 中,创建一个 2MB 的分区并将标题加载到其中:

parted /dev/sdb -- mklabel MSDOS
parted /dev/sdb -- mkpart primary 1M 3M
dd if=/media/ramdisk/header.img of=/dev/sdb1

现在,/dev/sda2 中的所有内容看起来都像随机数据,而您的标头位于 /dev/sdb1 中。要手动访问加密驱动器,请使用:

cryptsetup luksOpen --header /dev/sdb1 /dev/sda2 rootfs
mount /dev/mapper/rootfs /target

下一步是让启动过程要求在启动时插入 U 盘。我发现更容易的方法是假设它会在那里,否则会失败。首先,找出设备的 ID 和 UUID:

find -L /dev/disk/by-id/ -samefile /dev/sdb1
/dev/disk/by-id/usb-Generic-_Compact_Flash-part1
find -L /dev/disk/by-id/ -samefile /dev/sda2
/dev/disk/by-id/scsi-SATA_ST3320820AS_5QF28W6V-part2

blkid /dev/sdb1
/dev/sdb1: UUID="63347546-2db3-4bc1-9414-1142739a4c9f" TYPE="crypto_LUKS"

接下来编辑你的/etc/crypttab行,使其看起来像这样:

root /dev/disk/by-id/scsi-SATA_ST3320820AS_5QF28W6V-part2 none luks,header=/dev/disk/by-id/usb-Generic-_Compact_Flash-part1

(你可能需要此补丁获得对header选项的支持crypttab

最后但同样重要的是,更新你的 initram:

update-initramfs -u

你可以更进一步将整个启动分区加载到 USB 驱动器上。本文作者在这个网站上做了跟进

许多 不同的方法 你可以采取,具有不同程度的安全性和便利性。

关于安全性的特别注意事项:如果您的密码被泄露,任何拥有标头副本的人都能够解密数据,即使您稍后更改密码。

答案2

我知道 TrueCrypt 适用于 OSX、Windows 和 Linux。您可以对整个驱动器进行两级加密。我在 Debian 上使用过 AES 全盘加密。它需要在启动时输入密码才能访问硬盘上的数据。

相关内容