停止crypttab询问交换密码


10

发布时,我安装了新的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添加到交换空间中,因此根本不会设置它—一旦启动系统,我就可以在没有密码的情况下启用它,所以我想我只想添加一个延迟初始化脚本即可它,但是即使没有设置nocrypt,setup仍然会要求输入密码。

谢谢!


4
因此,如果有多个分区,建议使用LVM + LUKS。可以在LVM层的上方或下方(在->文件系统上方,在->磁盘下方)使用Crypsetup。在LVM之下使用cryptsetup的优点是您只需要一个加密分区(LVM一个)。
Lekensteyn 2011年

Answers:


10

遇到相同的问题,这是我在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系统,则可能需要满足一些安全要求。在这种情况下,还必须使用加密的交换分区。

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

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

如果要使用磁盘暂挂,则不能使用第一种方法,因为它将覆盖存储在交换分区中的内存占用量。此外,您不能像其他分区一样使用密钥文件,因为在恢复过程开始时尚未(并且一定不能)挂载根文件系统,并且需要读取解密的交换分区。

我解决这个问题的方法是,告诉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 -一行像RESUME=/dev/mapper/hda2_crypt/etc/initramfs-tools/conf.d/resume -简历设备设置在/etc/uswsusp.conf(见uswsusp.conf(5)) -中的条目/etc/suspend.conf 一个- resume=/dev/mapper/hda2_crypt在内核命令行

您可以检查/usr/share/initramfs-tools/hooks/cryptroot是否要了解更多信息。


欢迎来到Ask Ubuntu!如果不简单地复制/粘贴而不考虑格式设置(我刚刚做过的话),就可以+1。我喜欢这里的“可以在每次启动时使用随机密码重建它”的方法。
gertvdijk 2013年

在答案中添加了我实际使用的命令,我也将在12.10上对其进行测试,稍后将更新答案
王子

好的。我以为您完全复制/粘贴了它。请对其进行更改,以明确您对其进行了哪些更改才能使其正常工作。会有所帮助,谢谢!
gertvdijk

当我遇到阻止启动的错误时,请不要在12.10上尝试使用,我得到“ cryptsetup lvm is not available”,Google搜索返回错误报告。需要更深入地研究它,但没有时间,稍后会通知您。
亲王

更新了答案,我的12.10系统现在可以正常运行,只要求输入一个密码,最后我没有全部更新-initramfs -u -k,这造成了我在前面的评论中提到的问题。@gertcdijk格式化了所有内容,希望您现在快乐
王子

4

这可能表明initramfs在引导过程的一部分中正在访问交换分区。此时,根文件系统尚未挂载,因此存储在其中的任何配置文件将不可见。

当交换空间安装在根文件系统之后时,有一个initramfs初始化过程可以访问交换空间的原因:当您使计算机休眠时,内存和系统状态的内容将被写入交换空间。为了从休眠状态恢复,必须检查交换空间是否包含需要密码的休眠图像。

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


啊,谢谢你!我不确定是否要牺牲冬眠。我不经常使用它,但是当电池没用完就没用时,它就派上用场了。您知道是否有办法让cryptsetup为/重新使用相同的密码吗?
布拉德(Brad)

我不知道这样做的方法。在您提出要求之前,请勿尝试将密钥文件的副本放入initramfs。尽管它可以消除密码提示,但它也可以使对磁盘有物理访问权限的任何人都可以使用。
詹姆斯·亨斯特里奇
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.