停止 crypttab 要求交换密码

Bra*_*rad 10 luks

我在发布时安装了一个全新的 11.04 系统,并使用 LUKS 设置了全盘加密。起初它要求我输入三个加密分区的密码:

/
/home
swap
Run Code Online (Sandbox Code Playgroud)

输入密码短语 3 次令人沮丧,因此我尝试设置 /home 和 swap 以从存储在 / 上的密钥文件解密。我创建了密钥文件并在两个分区上启用了它。我的 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
Run Code Online (Sandbox Code Playgroud)

这适用于 /home,它会在不要求密码的情况下自动挂载。但是 cryptsetup 仍然要求提供交换空间的密码。我什至尝试将 noauto 添加到交换空间,所以它根本不会被设置——一旦系统启动,我可以在没有密码的情况下启用它,所以我想我只需要添加一个后期初始化脚本来做它,但即使使用 noauto cryptsetup 仍然要求输入密码。

谢谢!

小智 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
Run Code Online (Sandbox Code Playgroud)

准备 >

swapoff /dev/mapper/SYSTEM-SWAP_crypt
cryptsetup luksClose SYSTEM-SWAP_crypt
Run Code Online (Sandbox Code Playgroud)

告诉 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
Run Code Online (Sandbox Code Playgroud)

告诉系统关于交换分区,编辑 crypttab>

nano /etc/crypttab
Run Code Online (Sandbox Code Playgroud)

=?确保两行匹配

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
Run Code Online (Sandbox Code Playgroud)

告诉系统关于交换分区,编辑 fstab>

nano /etc/fstab
Run Code Online (Sandbox Code Playgroud)

=?确保你有这条线

/dev/mapper/SYSTEM-SWAP_crypt swap swap sw 0 0
Run Code Online (Sandbox Code Playgroud)

告诉系统关于交换分区,编辑简历>

nano /etc/initramfs-tools/conf.d/resume
Run Code Online (Sandbox Code Playgroud)

=?确保你有这条线

RESUME=UUID=uuid-of-encrypted-swap-SYSTEM-SWAP_crypt
Run Code Online (Sandbox Code Playgroud)

更新引导分区上的 initramfs >

update-initramfs -u -k all
Run Code Online (Sandbox Code Playgroud)

参考

设置加密的 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
Run Code Online (Sandbox Code Playgroud)

要告诉系统这个交换分区,我们需要将它添加到 /etc/crypttaband /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
Run Code Online (Sandbox Code Playgroud)

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

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


Jam*_*dge 5

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

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

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


归档时间:

查看次数:

15331 次

最近记录:

7 年,6 月 前