关于如何在 Stack\xc2\xa0Exchange 上为 LUKS 加密磁盘设置 \xe2\x80\xafup 分离标头\n的信息分散。\xc2\xa0\n通过使用 Google 搜索网络,我发现了有限的信息。\ xc2\xa0\n我发现的一些最好的信息\nis链接到问题的底部。\xc2\xa0\n其中一些很有帮助,甚至对像我这样的\xc2\xa0新手也很有帮助。\xc2\xa0\n但是有些似乎不完整,因此我有动力写这个。\xc2\xa0\n请看看你是否可以帮助解决下面的问题,\n使其完整并正常工作。
\n我假设读者曾经lsblk发现应分离的标头驱动器是sdb,并存储在其他驱动器上sda。
方法一:将header制作成分区
\n找出标头的大小,并将分区设置为正确的大小。\xc2\xa0\n\xc2\xa0以下命令将为您提供大量信息。\xc2\xa0\n记下下面旁边的offset数字Data\xc2\xa0segments:
$ cryptsetup luksDump /dev/sdb\n...\nData segments:\n 0: crypt\n offset: 16777216 [bytes]\n length: (whole device)\n cipher: aes-xts-plain64\n sector: 512 [bytes]\n...\nRun Code Online (Sandbox Code Playgroud)\n执行fdisk(如果没有则安装)\n与$\xc2\xa0fdisk\xc2\xa0/dev/sda.
给它命令n并按 Enter。\xc2\xa0\n使用默认分区号创建一个主分区;假设它是X。\xc2\xa0\n选择并记下默认第一个扇区的值\n(假设它是数字M)。\xc2\xa0\n它将提示您输入最后一个扇区;我们称之为K。\xc2\xa0\n要\xc2\xa0找到一个合适的数字K进入(并假设一个扇区的大小为 512\xe2\x80\xafbytes),计算K \xe2\x80\ xaf=\xe2\x80\xaf M \xe2\x80\xaf+\xe2\x80\xaf偏移量/512; 其中offsetluksDump是您在上面使用 .\xc2\xa0 \n命令找到的数字cryptsetup …
这有效:
密码表:
sda2_crypt UUID=6bbba323-ddad-479d-863e-4bd939b46f96 none luks,swap
sda3_crypt UUID=3087cec6-dcc9-44ee-8a08-5555bb2ca566 none luks
Run Code Online (Sandbox Code Playgroud)
文件系统表:
/dev/mapper/sda3_crypt / ext4 errors=remount-ro 0 1
/dev/mapper/sda2_crypt none swap sw 0 0
Run Code Online (Sandbox Code Playgroud)
但是当我尝试将其更改为此并运行时update-initramfs -u -k all,它给了我这个错误:cryptsetup: WARNING: failed to determine cipher modules to load for part_root_crypt
密码表:
part_swap_crypt UUID=6bbba323-ddad-479d-863e-4bd939b46f96 none luks,swap
part_root_crypt UUID=3087cec6-dcc9-44ee-8a08-5555bb2ca566 none luks
Run Code Online (Sandbox Code Playgroud)
文件系统表:
/dev/mapper/part_root_crypt / ext4 errors=remount-ro 0 1
/dev/mapper/part_swap_crypt none swap sw 0 0
Run Code Online (Sandbox Code Playgroud)
我想更改此设置,因为当我安装操作系统时,该磁盘是sda,但后来我添加了更多磁盘,现在它是sdb,我想将其名称更改为与磁盘无关的名称。
我在这里缺少什么?
我正在设置一个加密的根文件系统,我之前已经这样做过,但这次我使用带有对称密码的 PGP 加密密钥文件来熟悉该过程。
有两个地方似乎会发生加密根的配置,在cryptopts和下的内核 init 选项中/etc/crypttab,这似乎用于mkinitramfs将某些内容烘焙到 initramfs 中。
两个地方都更新有点麻烦;毕竟,如果一个地方就足够了,那么把它放在两个地方又有什么意义呢?我确实看到了将东西放在 中的价值/etc/crypttab,因为如果存在 LUKS 卷,则可以使用不同的挂钩和脚本以不同的方式生成 initramfs。
使用之前针对此问题修正的示例,这是我的 crypttab:
picrypt /dev/mmcblk0p2 /boot/diskkey.gpg luks,keyscript=/lib/cryptsetup/scripts/decrypt_gnupg
Run Code Online (Sandbox Code Playgroud)
据推测,这告诉 initramfs/dev/mmcblk0p2应该解密以使用 name picrypt,指定我们要使用该文件luks并将其传递/boot/diskkey.gpg给/lib/cryptsetup/scripts/decrypt_gnupg脚本以生成卷的密码。
接下来,这是我的内核 init 行中的加密选项:
cryptopts=target=picrypt,source=/dev/mmcblk0p2,lvm=pi
Run Code Online (Sandbox Code Playgroud)
再次,我们重新指定/dev/mmcblk0p2create picrypt,在这种情况下,我们还告诉它内部有一个名为 call 的 LVM 卷,pi在尝试挂载内核参数指定的根文件系统之前,它应该等待该卷root=/dev/mapper/pi-root。
奇怪的是,这个设置不起作用,因为它似乎忽略了 crypttab 的密钥文件和密钥脚本参数,并且不提示输入 GPG 对称密钥密码,而是直接输入密钥。我将修改我的脚本以包含keyscriptand keyfilein cryptopts,但为什么我必须这样做呢?
有没有一种方法可以将所有这些(或至少大部分)包含在内核初始化行中/etc/crypttab,并且不重复内核初始化行中的所有内容?必须将所有内容更改两次,这有点荒谬。这些不同的源是否只是提供不同的功能,crypttab 以钩子的形式,cryptopts 以 cryptsetup 的实际参数的形式?
设置:我使用的是一个USB硬盘树莓PI,运行拱Linux和syncthing为自己的“云”同步。
问题:如果发生物理入侵,其中 HDD pi 和 HDD 被盗,我想确保 HDD 上的文件保密。
当前的高级想法:加密硬盘,将密钥存储在网络服务器上。在启动时,下载密钥、解密和挂载。不要将密钥存储在 HDD/SD 卡上。如果被盗,请停止从网络服务器提供密钥。
问题:如何去实现这个?
(crypttab 可以解决这个问题吗?编写我自己的 systemd 单元是要走的路吗?任何其他想法,甚至可能的解决方案都是受欢迎的)
我新安装了 ubuntu 22.04,并从 ubuntu 安装程序选项中选择了全磁盘加密 (LUKS) 和 ZFS。
我需要进行一些编辑,/etc/crypttab以便以自动方式解锁我的驱动器(花式 USB 自动解锁),但我所做的编辑/etc/crypttab不会保留到 initramfs 中。
我正在做的是:
/etc/crypttabupdate-initramfs -u/etc/但不存在 cryptotab。我对它的工作原理的理解是否错误?我需要将某些版本的 crypttab 保留到加载程序,但它不起作用。
有任何指示我做错了什么吗?
crypttab ×5
luks ×3
arch-linux ×1
cryptsetup ×1
debian ×1
encryption ×1
header-file ×1
initramfs ×1
linux-kernel ×1
ubuntu ×1
zfs ×1