dm-crypt 目前有两个可用的前端:cryptsetup 和 cryptmount。谁知道cryptmount和cryptsetup的区别?
我有一个新的联想ideapad 5 14AR05。我成功安装了带有加密硬盘的 Ubuntu 20.04 LTS。然后我将内核升级到 5.8.13,因为我无法使用带有默认内核的外接显示器。它起作用了,我很确定我成功地重新启动了几次,试图让我的触控板工作。然后我安装了统一,我无法再在新内核中启动,它卡在 cryptsetup 上(在输入密码之前)并给出以下错误:
volume group vgubuntu not found
在启动的早些时候,我还得到:
initramfs unpacking failed: Decoding failed
但我不确定这是否相关。我可以在默认内核中启动,因为添加统一是我做的最后一件事,所以我再次将其删除,但这可能与它无关,它仍然无法启动。
我确实看过其他几个提到这一点的问题,但我无法弄清楚在我的情况下究竟应用了什么。
eta:我确认 /etc/crypttab 中的 uuid 与 /dev/disk/by-uuid/ 中的 uuid 相同,并且是 cryptsetup 试图加载的。
在引导屏幕上,我收到消息:
cryptsetup: waiting for encrypted source device /swapfile...
然后让我挂了大约 2 分钟,然后
Initramfs unpacking failed: Decoding failed.
然后我被丢到 Initramfs。
这是在带有加密主文件夹的 Ubuntu 20.04 上。切换回 nouveau 驱动程序以安装 cuda-10 后出现错误(它抱怨 nvidia 驱动程序已在使用中)
其他建议涉及使用/etc/crypttab
,但我的系统上不存在该文件。cat /etc/fstab
还显示一个空文件。一些阅读表明在这种情况下它将使用默认设置,但如果是这样,它如何知道应该将哪个磁盘用作交换空间?或者有什么我可以用live usb做的吗?
mount 的输出是
none on / type rootfs (rw)
sysfs on /sys type sysfs (rw,nosuid, nodev, noexec, relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
udev on /dev type devtmpfs (rw,nosuid, noexec,relatime,size=32840428k,nr_inodes=8210107,mode=755)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on/run type tmpfs (rw,nosuid,nodev,noexec,relatime,size=6583428k,mode=755)
lsblk 返回一个未找到的错误(这是在 inframs 中,因此可能无法正常工作)
在 life usb 上的 /mnt 上安装 sdc1 时,我可以得到以下结果:
cat /mnt/etc/fstab
看起来像
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/sdc1 during installation
UUID=5df229c0-be7c-43d7-b616-67ec15e2a6d3 / ext4 errors=remount-ro 0 1
# /boot/efi was on /dev/nvme0n1p2 during installation
UUID=D23D-B0F6 /boot/efi vfat umask=0077 0 1
#/swapfile none swap sw 0 0
/dev/mapper/cryptswap1 none swap sw 0 0
. 猫 /mnt/etc/crypttab
好像
# <target name> <source device> <key file> <options>
cryptswap1 /swapfile /dev/urandom swap,offset=1024,cipher=aes-xts-plain64
看起来lsblk -o name, type, uuid, label
像
NAME TYPE UUID LABEL
loop0 loop
loop1 loop
loop2 loop
loop3 loop
loop4 loop
loop5 loop
sda disk
└─sda1 part 8C45-E3AC UBUNTU 20_0
sdb disk
├─sdb1 part
└─sdb2 part
sdc disk
└─sdc1 part 5df229c0-be7c-43d7-b616-67ec15e2a6d3
nvme0n1 disk
├─nvme0n1p1 part 60FC3C5FFC3C3220 Recovery
├─nvme0n1p2 part D23D-B0F6
├─nvme0n1p3 part
└─nvme0n1p4 part
我正在尝试更新我的 initramfs,但出现此错误:
cryptsetup: WARNING: could not determine root device from /etc/fstab
我不太确定为什么会这样,因为这是我的 fstab:
UUID=0a2cb47d-20dc-467e-9360-38a2e898379e /boot ext2 defaults 0 1
UUID=a97179ea-3a70-4ab8-b6e7-1b76a049dc0e / btrfs defaults,subvol=root 0 1
UUID=a97179ea-3a70-4ab8-b6e7-1b76a049dc0e /home btrfs defaults,subvol=home 0 2
UUID=a97179ea-3a70-4ab8-b6e7-1b76a049dc0e /tmp btrfs defaults,subvol=tmp 0 2
UUID=189d2112-c85b-4bb9-8a91-682df21b52fe none swap sw 0 0
并且有一个 / 的条目。
对于背景:
我在 chroot 环境中使用 Ubuntu 18.04。此外,我有一个 btrfs 文件系统,它是使用 LUKS 加密的。
我的密码表:
root UUID=1bc78817-271a-46b3-a51a-1b6013744a7c none luks
我的设备:
/dev/nvme0n1p2: UUID="189d2112-c85b-4bb9-8a91-682df21b52fe" TYPE="swap" PARTUUID="80cd5dee-02"
/dev/nvme0n1p3: UUID="1bc78817-271a-46b3-a51a-1b6013744a7c" TYPE="crypto_LUKS" PARTUUID="80cd5dee-03"
/dev/nvme0n1p1: UUID="0a2cb47d-20dc-467e-9360-38a2e898379e" TYPE="ext2" PARTUUID="80cd5dee-01"
/dev/mapper/root: UUID="a97179ea-3a70-4ab8-b6e7-1b76a049dc0e" UUID_SUB="ed244bff-3e1a-4442-8426-9d478ad2ba35" TYPE="btrfs"
/dev/nvme0n1: PTUUID="80cd5dee" PTTYPE="dos"
我的坐骑:
/dev/mapper/root on / type btrfs (rw,relatime,ssd_spread,space_cache,subvolid=520,subvol=/root_ubuntu)
/dev/nvme0n1p1 on /boot type ext2 (rw,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
udev on /dev type devtmpfs (rw,nosuid,relatime,size=7721800k,nr_inodes=1930450,mode=755)
希望有人能够帮助我。
我正在尝试在 LUKS 加密设备上启动 Ubuntu - 在以前的生活中,我将 UUID 指定为内核 cmdline 选项,然后 initramfs 使用我提供的凭据打开了该设备。
从我看到的所有文档来看,在我看来,我必须使用我想事先解锁的设备构建 initramfs。
所以,假设我有 3 个要启动的 USB 设备。我不会保持所有内容相同并调整内核命令行,而是保持所有内容相同,但是更改每个内容的 initramfs 以正确引用设备?对我来说,问题是当我的根 FS 是 squashfs 映像时,如何轻松生成 initramfs?
参考:
https://www.pavelkogan.com/2014/05/23/luks-full-disk-encryption/
原帖:
我已经使用命令备份了一个驱动器及其所有分区
dd if=/dev/sda of=/media/oshirowanen/external-drive/backups-2019/ubuntu.img
/dev/sda
是一个安装了完全加密的 Ubuntu 18.04 的 ssd。
在我擦除这个驱动器并重新使用它之前,我想确保备份已经工作。
我通过搜索 askubuntu 和其他 stackexchange 站点尝试了以下操作:
sudo losetup -P /dev/loop0 /media/oshirowanen/external-drive/backups-2019/ubuntu.img
[sudo] password for oshirowanen: [password goes here]
losetup: /media/oshirowanen/external-drive/backups-2019/ubuntu.img: failed to set up loop device: Device or resource busy
sudo losetup -P /dev/loop100 /media/oshirowanen/external-drive/backups-2019/ubuntu.img
sudo cryptsetup luksOpen /dev/loop100p5 img5
Enter passphrase for /dev/loop100p5: [password goes here]
cd /mnt
mkdir img5
sudo mount /dev/mapper/img5 img5
mount: /mnt/img5: unknown filesystem type 'LVM2_member'.
我究竟做错了什么?两者cryptsetup
和lvm2
都已安装。
如果这不是备份驱动器的最佳方法,请建议其他更好的方法。
更新 1:
oshirowanen@desktop:~$ sudo pvscan
[sudo] password for oshirowanen:
WARNING: PV udJ9tW-vls3-YQOz-cLkW-lTsh-DMCF-zrfLD0 on /dev/mapper/img5 was already found on /dev/mapper/sda5_crypt.
WARNING: Disabling lvmetad cache which does not support duplicate PVs.
WARNING: Not using lvmetad because duplicate PVs were found.
WARNING: PV udJ9tW-vls3-YQOz-cLkW-lTsh-DMCF-zrfLD0 on /dev/mapper/img5 was already found on /dev/mapper/sda5_crypt.
WARNING: PV udJ9tW-vls3-YQOz-cLkW-lTsh-DMCF-zrfLD0 prefers device /dev/mapper/sda5_crypt because device is used by LV.
PV /dev/mapper/sda5_crypt VG ubuntu-vg lvm2 [232.16 GiB / 0 free]
Total: 1 [232.16 GiB] / in use: 1 [232.16 GiB] / in no VG: 0 [0 ]
oshirowanen@desktop:~$ sudo vgscan
WARNING: PV udJ9tW-vls3-YQOz-cLkW-lTsh-DMCF-zrfLD0 on /dev/mapper/img5 was already found on /dev/mapper/sda5_crypt.
WARNING: Disabling lvmetad cache which does not support duplicate PVs.
WARNING: Not using lvmetad because duplicate PVs were found.
Reading all physical volumes. This may take a while...
WARNING: PV udJ9tW-vls3-YQOz-cLkW-lTsh-DMCF-zrfLD0 on /dev/mapper/img5 was already found on /dev/mapper/sda5_crypt.
WARNING: PV udJ9tW-vls3-YQOz-cLkW-lTsh-DMCF-zrfLD0 prefers device /dev/mapper/sda5_crypt because device is used by LV.
Found volume group "ubuntu-vg" using metadata type lvm2
oshirowanen@desktop:~$ sudo vgs
WARNING: Not using lvmetad because duplicate PVs were found.
WARNING: Use multipath or vgimportclone to resolve duplicate PVs?
WARNING: After duplicates are resolved, run "pvscan --cache" to enable lvmetad.
WARNING: PV udJ9tW-vls3-YQOz-cLkW-lTsh-DMCF-zrfLD0 on /dev/mapper/img5 was already found on /dev/mapper/sda5_crypt.
WARNING: PV udJ9tW-vls3-YQOz-cLkW-lTsh-DMCF-zrfLD0 prefers device /dev/mapper/sda5_crypt because device is used by LV.
VG #PV #LV #SN Attr VSize VFree
ubuntu-vg 1 2 0 wz--n- 232.16g 0
oshirowanen@desktop:~$ sudo lvs
WARNING: Not using lvmetad because duplicate PVs were found.
WARNING: Use multipath or vgimportclone to resolve duplicate PVs?
WARNING: After duplicates are resolved, run "pvscan --cache" to enable lvmetad.
WARNING: PV udJ9tW-vls3-YQOz-cLkW-lTsh-DMCF-zrfLD0 on /dev/mapper/img5 was already found on /dev/mapper/sda5_crypt.
WARNING: PV udJ9tW-vls3-YQOz-cLkW-lTsh-DMCF-zrfLD0 prefers device /dev/mapper/sda5_crypt because device is used by LV.
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root ubuntu-vg -wi-ao---- <231.21g
swap_1 ubuntu-vg -wi-ao---- 980.00m
oshirowanen@desktop:~$ ls /dev/mapper/
control img5 sda5_crypt ubuntu--vg-root ubuntu--vg-swap_1
oshirowanen@desktop:~$
更新 2:
ubuntu@ubuntu:~$ sudo losetup -P /dev/loop100 /media/ubuntu/external-drive/backups-2019/ubuntu.img
ubuntu@ubuntu:~$ sudo cryptsetup luksOpen /dev/loop100p5 img5
Enter passphrase for /dev/loop100p5:
ubuntu@ubuntu:~$ cd /mnt
ubuntu@ubuntu:/mnt$ sudo mkdir img5
ubuntu@ubuntu:/mnt$ sudo mount /dev/mapper/img5 img5
mount: /mnt/img5: unknown filesystem type 'LVM2_member'.
ubuntu@ubuntu:/mnt$ sudo pvscan
PV /dev/mapper/img5 VG ubuntu-vg lvm2 [232.16 GiB / 0 free]
Total: 1 [232.16 GiB] / in use: 1 [232.16 GiB] / in no VG: 0 [0 ]
ubuntu@ubuntu:/mnt$ sudo vgscan
Reading volume groups from cache.
Found volume group "ubuntu-vg" using metadata type lvm2
ubuntu@ubuntu:/mnt$ sudo vgs
VG #PV #LV #SN Attr VSize VFree
ubuntu-vg 1 2 0 wz--n- 232.16g 0
ubuntu@ubuntu:/mnt$ sudo lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root ubuntu-vg -wi-a----- <231.21g
swap_1 ubuntu-vg -wi-a----- 980.00m
ubuntu@ubuntu:/mnt$ ls /dev/mapper/
control img5 ubuntu--vg-root ubuntu--vg-swap_1
ubuntu@ubuntu:/mnt$
解决了
除了不注释 /etc/sudoers 中的 #includedir 行之外,使用 进行编辑
sudoers.d/myOverrides
,sudo visudo -f /etc/sudoers.d/myOverrides
并使用我第一次尝试的语法,就可以了。
而且,如果您不想像我一样成为白痴,请确保在保存 visudo 时通过删除 .tmp 来覆盖文件,并且您确定您的语法是正确的。虽然这不是这里的问题,但很容易就可以了 ;-)
我想编写一个 shell 脚本,它应该卸载并关闭一个运行sudo cryptsetup luksClose XYZ
.
它的特别之处cryptsetup
在于它使用内核模块
device-mapper
来管理 luks 容器。我可以从手册中得到的是:它依赖于这个内核模块,没有办法绕过它。
这意味着它必须以 sudo 运行,因此程序可以稍后以 root 身份调用 device-mapper。但是你也可以在没有错误的情况下运行它,直到设备映射器被调用。
我尝试使用visudo
停止 sudo 请求密码,只要sudo cryptsetup
被调用。
首先通过使用
user ALL=(ALL) NOPASSWD: /sbin/cryptsetup
但我意识到这并不意味着 cryptsetup 作为 sudo 运行,而只是不再需要调用 sudo。它首先不是。
然后我尝试使用 /sbin/cryptsetup 作为 /bin/sudo 的参数来欺骗它
user ALL=(ALL) NOPASSWD:/bin/sudo /sbin/cryptsetup
(始终将该行附加到 sudoers 文件的底部以使其成为最后解释的行)
是否有另一种方法可以让我的用户帐户在没有 PW 的情况下按原样运行“sudo cryptsetup luksClose XYZ”?(或者我在 cryptsetup 手册中缺少的东西)
编辑: 我通常使用 PCManFM 来管理容器,它不需要我输入 PW 来关闭容器(仅用于解密 ofc)这是什么巫术?
编辑 2:如果没有一个简单的答案,我将在启动时以 root 身份运行脚本并使其等待用户的键输入,而不是使用键盘快捷键来运行两个单独的打开/关闭脚本。我想这样我就不必做任何 NOPASSWD 了,这很好。
但无论如何我都想知道。
提前致谢
进行搜索时,由于密码设置,其他人似乎遇到了更复杂的问题,但我的问题是在做一些简单的事情时。
使用 Lubuntu 18.10 32bit 的最新安装(内核已更新),我可以创建一个加密分区:
cryptsetup --verbose --verify-passphrase luksFormat /dev/mmcblk0
WARNING: Device /dev/mmcblk0 already contains a 'crypto_LUKS' superblock signature.
WARNING!
========
This will overwrite data on /dev/mmcblk0 irrevocably.
Are you sure? (Type uppercase yes): YES
Enter passphrase for /dev/mmcblk0:
Verify passphrase:
Existing 'crypto_LUKS' superblock signature on device /dev/mmcblk0 will be wiped.
Key slot 0 created.
Command successful.
如果给定的密码是 letter a
,我无法解锁它:
cryptsetup --verbose luksOpen /dev/mmcblk0 crypt
Enter passphrase for /dev/mmcblk0:
No key available with this passphrase.
Enter passphrase for /dev/mmcblk0:
(我也尝试了 zulucrypt,结果相同)
由于我使用其安装程序的加密功能安装了 Lubuntu,我可以在我的系统本机使用的内容和cryptsetup
我的 mmc 驱动器上制作的内容之间进行比较。
cryptsetup luksDump /dev/sda1
相关部分似乎是:
Version: 1
Cipher name: aes
Cipher mode: xts-plain64
Hash spec: sha256
Payload offset: 4096
MK bits: 512
我看到的两个转储之间的唯一区别是,对于我的本地驱动器,底部的“MK 位”是 512,但对于 mmc,它是 256。
我不知道这是否相关,但我也看到我的本地驱动器有两个键槽,而 mmc 只有一个。(我的本地驱动器有两个密钥槽这一事实让我希望/怀疑安装程序是否放入了重复的密钥以防第一个密钥损坏。)
一位评论者要求我尝试以这种方式提供密码:
echo -n 'a' | cryptsetup --verbose luksOpen /dev/mmcblk0 crypt
Can't do passphrase verification on non-tty inputs.
No key available with this passphrase.
Command failed with code -2 (no permission or bad passphrase).
另一种提供密码的方法:
echo 'a' > interactive_pass
cat interactive_pass | cryptsetup luksAddKey /dev/mmcblk0
No key available with this passphrase.
使用密钥文件。
我无法理解这一点。我摸索了一会儿,但停了下来,因为我分不清使用错误和它有自己的问题之间的区别。
zulucrypt 有一种创建密钥文件的方法,但它只是说Failed To Generate Key
. 这很简单,所以我确定我使用它正确(以 root 身份运行,对我要创建的文件具有写权限)
我想知道如何在新安装的 Ubuntu Server 18.10 上加密我的硬盘。我在 Arch 上试过这个,它似乎工作正常,因为我在安装过程中已经完成了。但是对于 Ubuntu,我必须在启动新安装的系统后设置 cryptsetup。
我遵循了以下说明https://www.cyberciti.biz/hardware/howto-linux-hard-disk-encryption-with-luks-cryptsetup-command/
但是每次我尝试配置 cryptsetup 时,都会出现以下错误:
$ sudo cryptsetup -y -v luksFormat /dev/sda3
WARNING: Device /dev/sda3 already contains a 'LVM2_member' superblock signature.
WARNING!
========
This will overwrite data on /dev/sda3 irrevocably.
Are you sure? (Type uppercase yes): YES
Enter passphrase for /dev/sda3:
Verify passphrase:
Device /dev/sda3 is in use. Can not proceed with format operation.
Command failed with code -1 (wrong or missing parameters).
$_
我的设置:
Device Start End Sectors Size Type
/dev/sda1 2048 4095 2048 1M BIOS boot
/dev/sda2 4096 2101247 2097152 1G Linux filesystem
/dev/sda3 2101248 209713151 207611904 99G Linux filesystem
任何帮助表示赞赏。我怀疑问题出在我的 LVM 设置上,但谁知道呢。我找不到说明此错误的网站或博客。只需在分区或硬盘上输入 cryptsetup 命令,它们似乎都可以正常工作。
还有一个问题,想知道是否可以(并建议)在整个硬盘上运行 cryptsetup 而不是只在分区上运行。
我正在尝试将我的 SSD 克隆到更大的设备,因此我将有一个可引导的备份,以期在多个桌面客户端上进行系统升级。我还想模拟一个已知正确的过程,看看我是否可以可靠地将我的系统驱动器克隆到更大的 HDD/SSD 上(到目前为止,过去这样做的所有尝试都失败了)。当前运行 16.04,它是使用完全加密的磁盘选项构建的。正在使用的测试系统运行良好。
我遵循了我在这个网站上找到的几个程序,但没有一个有效。我在每个过程中都遇到了死胡同,所以为了简化事情,我做了以下事情:
sudo dd if=/dev/sda of=/dev/sdd bs=64k
打开 GParted 并删除 /dev/sdd 上的旧 crypt-luks 分区,如将加密的 SSD 克隆到更大的 SSD中发布的过程中所述。这是一个错误,从这里开始我就死在了水里。我无法创建新的 crypt-luks 分区。
因此,解释如何在新目标驱动器上[重新]创建/调整 crypt-luks 分区大小的答案将非常有帮助。
我重复了 dd 并尝试使用以下命令(使用 live CD)扩展目标文件系统:
sudo cryptsetup luksOpen /dev/sda5 sda5_crypt
sudo cryptsetup resize sda5_crypt
sudo modprobe dm-crypt
sudo vgscan --mknodes
sudo vgchange -ay
sudo pvresize /dev/mapper/sda5_crypt
sudo lvresize -l +100%FREE /dev/ubuntu-vg/root
返回:新大小(7020 个范围)与现有大小(7020 个范围)匹配。
sudo pvchange -x n /dev/mapper/sda5_crypt
回报:
Physical volume "/dev/mapper/sda5_crypt" is already unallocatable.
Physical volume /dev/mapper/sda5_crypt not changed
0 physical volumes changed / 1 physical volume not changed
sudo e2fsck -f /dev/mapper/ubuntu--vg-root
回报:
Pass 5: Checking group summary information
/dev/mapper/ubuntu--vg-root: 296641/1798720 files (0.8% non-contiguous), 3525828/7188480 blocks
源 SSD 为 32GB,我尝试扩展的 HDD 为 80GB。
sudo resize2fs -f /dev/mapper/ubuntu--vg-root
回报:
resize2fs 1.44.1 (24-Mar-2018)
The filesystem is already 7188480 (4k) blocks long. Nothing to do!
因此,该程序似乎没有扩展分区。这通过重新启动并运行 GParted 来验证,它显示了相同的分区之前和之后:
我已经在这方面做了很多天的研究,并试图让它发挥作用,我开始有了狭隘的视野。我非常感谢有人发布一个防弹程序,该程序已知可用于将加密的 HDD/SSD 克隆到更大的存储设备。
目标 dd 驱动器确实会在不扩展任何分区的情况下启动。
我的主要问题实际上更多是关于扩展加密文件系统,而不是关于克隆它们。尽管这两个任务显然是密切相关的。一个防弹的、可扩展的、可靠的可重复的过程来解释如何做到这两点将非常有帮助。尽管我相信我正确地运行了该程序,但程序https://help.ubuntu.com/community/ResizeEncryptedPartitions对我来说有点太复杂了。它可能非常接近我的需要,但可能缺少一两步。
在我看来,简单地在正确克隆的设备上扩展加密分区不需要超过几个命令。理想情况下,使用 GParted 很容易做到这一点。