停止crypttab请求交换密码

我发布了一个新的11.04系统,并使用LUKS设置了全盘加密。 起初它问我三个加密分区的密码:

/ /home swap 

输入密码短语三次令人沮丧,所以我尝试设置/ home并交换来解密存储在/上的密钥文件。 我创建了密钥文件并在两个分区上启用了它。 我的crypttab现在看起来像这样:

 root-root_crypt UUID=13c21bf6-4d92-42a7-877a-87cc31b1aa19 none luks home-home_crypt UUID=ba90ce5b-9df7-4764-8a72-011bbb164db4 /root/keyfile luks home-home_crypt UUID=ba90ce5b-9df7-4764-8a72-011bbb164db4 none luks sda3_crypt UUID=e4677895-2114-4054-9f23-d36f6bb0e6a2 /root/keyfile luks,swap 

这适用于/ home,它可以自动挂载而无需输入密码。 但是cryptsetup仍然要求交换空间的密码。 我甚至尝试将noauto添加到交换空间,因此它根本不会被设置 – 一旦系统启动我可以启用它而没有密码,所以我想我只是添加一个晚期的init脚本来做它,但即使有noauto cryptsetup仍然要求密码短语。

谢谢!

有同样的问题,这是我在ubuntu 12.04.1和12.10上的表现,

– 在开始之前确保你有备份,也可以用ubuntu cd或usb启动你的系统; 好像你犯了一个错误,你的系统可能不再启动,或者你可能会丢失数据。 我假设你有一个带LUKS的加密ubuntu系统,在LUKS内你有3个分区,SYSTEM-BOOT(未加密),SYSTEM-SWAP(加密)和SYSTEM-OS(加密) –

你需要调整UUID,SYSTEM-SWAP_crypt,SYSTEM-OS_crypt,SYSTEM-SWAP,SYSTEM-OS到系统中使用的变体,请参阅我的解决方案下面的参考链接了解更多信息

获取UUID:

 blkid 

准备>

 swapoff /dev/mapper/SYSTEM-SWAP_crypt cryptsetup luksClose SYSTEM-SWAP_crypt 

告诉cryptsetup从持有根文件系统的卷的解密密钥计算交换分区的密码

 /lib/cryptsetup/scripts/decrypt_derived SYSTEM-OS_crypt | cryptsetup luksFormat /dev/mapper/SYSTEM-SWAP --key-file - /lib/cryptsetup/scripts/decrypt_derived SYSTEM-OS_crypt | cryptsetup luksOpen /dev/mapper/SYSTEM-SWAP SYSTEM-SWAP_crypt --key-file - mkswap /dev/mapper/SYSTEM-SWAP_crypt 

告诉系统有关交换分区的信息,编辑crypttab>

 nano /etc/crypttab 

=? 确保两条线匹配

 SYSTEM-OS_crypt UUID=uuid-of-luks-containing-osroot none luks SYSTEM-SWAP_crypt UUID=uuid-of-luks-containing-swap SYSTEM-OS_crypt luks,keyscript=/lib/cryptsetup/scripts/decrypt_derived 

告诉系统有关交换分区的信息,编辑fstab>

 nano /etc/fstab 

=? 确保你有这条线

 /dev/mapper/SYSTEM-SWAP_crypt swap swap sw 0 0 

告诉系统有关交换分区的信息,编辑简历>

 nano /etc/initramfs-tools/conf.d/resume 

=? 确保你有这条线

 RESUME=UUID=uuid-of-encrypted-swap-SYSTEM-SWAP_crypt 

更新启动分区上的initramfs>

 update-initramfs -u -k all 

参考

答案的灵感来自设置加密的Debian系统 (归档链接):

如果您使用的是加密的Debian系统,则可能需要满足一些安全要求。 如果是这种情况,您还必须使用加密的交换分区。

交换分区可以通过两种方式加密:

  • 它可以在每次启动时使用随机密码重新创建,或者
  • 它可以像其他带有持久密码的加密卷一样创建

如果要使用suspend-to-disk,则不能使用第一种方法,因为它会覆盖存储在交换分区中的内存占用。 此外,您不能像其他分区一样使用密钥文件,因为在恢复进程启动时并且需要读取解密的交换分区时,根文件系统不会(并且一定不能)挂载。

我解决这个问题的方法是告诉cryptsetup从持有根文件系统的卷的解密密钥计算交换分区的密码; cryptsetup包使用/lib/cryptsetup/scripts/decrypt_derived 。 因此,为了设置交换分区,我执行以下操作,假设hda2是保存加密交换的分区,而根文件系统位于hda5_crypt

 swapoff /dev/mapper/hda2_crypt cryptsetup luksClose hda2_crypt dd if=/dev/urandom of=/dev/hda2 /lib/cryptsetup/scripts/decrypt_derived hda5_crypt \ | cryptsetup luksFormat /dev/hda2 --key-file - /lib/cryptsetup/scripts/decrypt_derived hda5_crypt \ | cryptsetup luksOpen /dev/hda2 hda2_crypt --key-file - mkswap /dev/mapper/hda2_crypt 

要告诉系统有关此交换分区的信息,我们需要将其添加到/etc/crypttab/etc/fstab ; 确保,这些文件包含如下所示的行:

 /etc/crypttab: hda2_crypt /dev/hda2 hda5_crypt luks,keyscript=/lib/cryptsetup/scripts/decrypt_derived /etc/fstab: /dev/mapper/hda2_crypt swap swap sw 0 0 

有了这个,只要您将系统配置为挂起到磁盘,交换分区将在引导序列期间很早就自动与根文件系统一起设置。 为了确定在那一点上可用的交换分区,cryptsetup会检查以下内容:asfasfafs – /etc/initramfs-tools/conf.d/resume RESUME=/dev/mapper/hda2_crypt这样的行 – 恢复设备设置/etc/uswsusp.conf (参见uswsusp.conf(5) ) – /etc/suspend.conf一个条目 – 内核命令行中的resume=/dev/mapper/hda2_crypt

如果您想了解更多信息,可以检查/usr/share/initramfs-tools/hooks/cryptroot

这可能表示在引导过程的initramfs部分期间正在访问交换分区。 此时尚未挂载根文件系统,因此存储在那里的任何配置文件都不可见。

在根文件系统之后安装交换空间时, initramfs初始化过程有理由访问交换空间:当您hibernate计算机时,内存和系统状态的内容将写入交换。 为了从hibernate状态恢复,有必要检查交换空间是否包含需要密码短语的hibernate图像。

如果您不介意失去从hibernate状态恢复的能力,可以通过编辑/etc/initramfs-tools/conf.d/resume并注释掉以RESUME=开头的行来禁用此行为。 进行更改后,运行update-initramfs -u以更新initramfs映像。

Interesting Posts