Bob*_*ina 7 encryption usb luks zfs cryptsetup
我刚刚安装了 Ubuntu 22.04 并使用了安装程序中的 ZFS+LUKS 全驱动器加密选项。
我一直在网上搜索一种方法,将驱动器配置为在检测到 USB 密钥(USB 记忆棒上的 LUKS 解锁密钥)时在启动时自动解锁,而不是每次启动系统时输入解密密码。
我找到了大量的指南,但它们的说明似乎都不适用于 22.04 在使用 ZFS 和 LUKS 时在驱动器上设置分区结构的方式。
我关注的最接近的指南在这里: https ://tqdev.com/2022-luks-with-usb-unlock
一切似乎都很顺利,直到我必须将密钥添加到 LUKS 驱动器(第六步) - 因为有两个驱动器被列为 LUKS 驱动器。
root@bob-home-linux:~# sudo blkid --match-token TYPE=crypto_LUKS -o device
/dev/sdc2
/dev/zd0
Run Code Online (Sandbox Code Playgroud)
我不知道如何从这里继续!
视频演练:
\n更新:2023 年 11 月 30 日:更新到 22.04.3 后,zfs 脚本似乎已重置为其默认值。如果您受到影响,请再次运行步骤 13。
\n更新:2023 年 2 月 23 日:从 22.04.1 更新到 22.04.2 后,zfs 脚本似乎已重置为默认值。如果使用此解决方案,请记住这一点。
\n使用 ZFS 安装 Ubuntu 22.04 桌面并使用 Ubuntu 安装程序进行加密。确保安全地记录加密密码以供后续步骤使用。我没有在安装程序中设置恢复密钥,因此我不知道使用恢复密钥时这些步骤是否有效。YMMV。
\n安装后,格式化 USB 驱动器并使用 ext4 标准创建一个新分区(我在 Ubuntu 中使用磁盘实用程序)。将该分区命名为“linux-key”。
\n确保 USB 驱动器已安装。使用“文件”应用程序验证 USB 是否已安装在文件窗口的左侧栏中。
\n启动终端并键入以下命令切换到 root,然后切换到 USB 驱动器:
\nsudo su\ncd /media/<yourusername>/linux-key\nls -la\nRun Code Online (Sandbox Code Playgroud)\n您应该列出一个空目录,显示 USB 驱动器是空的。
\nroot@ubuntu:/media/bob/linux-key$ ls -la\ntotal 29\ndrwx------ 3 bob bob 4096 Jan 25 15:07 .\ndrwxr-x---+ 3 root root 3 Jan 25 15:08 ..\ndrwx------ 2 root root 16384 Jan 25 15:07 lost+found\nRun Code Online (Sandbox Code Playgroud)\n键入以下命令以显示系统中的 LUKS 分区。我们需要修改的默认分区通常是/dev/zd0。确保运行以下命令时显示它。
\n$ blkid --match-token TYPE=crypto_LUKS -o device\n/dev/sdc2\n/dev/zd0\nRun Code Online (Sandbox Code Playgroud)\n创建新的加密密钥文件。
\ndd if=/dev/urandom bs=1 count=256 > linux.key\nRun Code Online (Sandbox Code Playgroud)\n确保密钥文件存在 \xe2\x80\x93 您应该在列表中看到该文件。
\n$ ls -la\n-rw-rw-r-- 1 root root 256 Jan 25 15:10 linux.key\nRun Code Online (Sandbox Code Playgroud)\n配置密钥文件以与分区配合使用,然后输入之前在安装程序中配置的解密密码。
\ncryptsetup luksAddKey /dev/zd0 linux.key\nRun Code Online (Sandbox Code Playgroud)\n通过确保键槽 1 已填充来检查钥匙插入是否成功。
\ncryptsetup luksDump /dev/zd0;\nRun Code Online (Sandbox Code Playgroud)\n ...\n Area offset:32768 [bytes]\n Area length:258048 [bytes]\n Digest ID: 0\n 1: luks2 <------------- the key you just added\n Key: 512 bits\n Priority: normal\n Cipher: aes-xts-plain64\n Cipher key: 512 bits\n PBKDF: argon2id\n ...\nRun Code Online (Sandbox Code Playgroud)\n调整密钥文件权限
\nchmod 400 linux.key\nRun Code Online (Sandbox Code Playgroud)\n接下来,导航到 initramfs 脚本文件夹并打开名为“zfs”的文件。您可以使用任何您想要的文本编辑器。(我nano在这个例子中使用)
cd /usr/share/initramfs-tools/scripts\nnano zfs\nRun Code Online (Sandbox Code Playgroud)\n找到以下行,并将其替换为以下文本。
\n找到这一行
\necho "keystore-${pool} ${ks} none luks,discard" >> "${TABFILE}"\nRun Code Online (Sandbox Code Playgroud)\n替换为这个
\necho "keystore-${pool} ${ks} none luks,discard,tries=10,keyscript=/scripts/usb-unlock" >> "${TABFILE}"\nRun Code Online (Sandbox Code Playgroud)\n保存并关闭文件。
\n在同一目录中创建一个名为“usb-unlock”的新文件。
\nnano usb-unlock\nRun Code Online (Sandbox Code Playgroud)\n粘贴此要点中的脚本 - 这会检查名为“linux-key”的 USB 驱动器分区,搜索名为 linux.key 的文件并尝试使用该文件来解密该分区。
\n\n保存并关闭文件。
\n调整usb-unlock脚本的权限
\nchmod 755 usb-unlock\nRun Code Online (Sandbox Code Playgroud)\n列出脚本的目录。确保您刚刚使用的两个文件属于具有 755 权限集的 root 用户。
\nsudo su\ncd /media/<yourusername>/linux-key\nls -la\nRun Code Online (Sandbox Code Playgroud)\n最后,更新 initramfs,以便它在启动时运行脚本。
\nupdate-initramfs -u\nRun Code Online (Sandbox Code Playgroud)\n重新启动计算机,确保 USB 驱动器已插入。如果插入,您不需要输入解密密码。如果丢失,脚本将回退到要求您输入密码。
\n| 归档时间: |
|
| 查看次数: |
5171 次 |
| 最近记录: |