我在 Kubuntu 24.04 上用 cryptsetup 加密了一个外部 USB,同时使用了密码和密钥文件,并在 crypttab 中添加了相应的条目,但通过 GUI 安装时仍要求我输入密码。我该如何解决这个问题?
该驱动器使用以下命令加密:
# Preconditions:
# - USB is available as /dev/sda
# - Folder ~/.keyfiles exists
sudo cryptsetup luksFormat /dev/sda
sudo dd if=/dev/urandom of=~/.keyfiles/setup_32g.dat bs=512 count=294
sudo chmod 0400 ~/.keyfiles/setup_32g.dat
sudo chown root:root ~/.keyfiles/setup_32g.dat
sudo cryptsetup luksAddKey /dev/sda ~/.keyfiles/setup_32g.dat
sudo cryptsetup config /dev/sda --label sandisk_32g
sudo cryptsetup luksOpen /dev/sda sandisk_32g
sudo mkfs.ext4 /dev/mapper/sandisk_32g
sudo e2label /dev/mapper/sandisk_32g sandisk_32g
sudo mount /dev/mapper/sandisk_32g /media/$USER/sandisk_32g
sudo chmod 777 /media/$USER/sandisk_32g/.
sudo umount /media/$USER/sandisk_32g
在此之后,我得到了一个密码(keyslot 0)和一个密钥文件~/.keyfiles/setup_32g.dat
(keyslot 1)。luksDump 显示:
$ sudo cryptsetup luksDump /dev/sda
LUKS header information
Version: 2
Epoch: 5
Metadata area: 16384 [bytes]
Keyslots area: 16744448 [bytes]
UUID: 172ea93c-7383-44da-8255-ce7d46856dc8
Label: sandisk_32g
Subsystem: (no subsystem)
Flags: (no flags)
Data segments:
0: crypt
offset: 16777216 [bytes]
length: (whole device)
cipher: aes-xts-plain64
sector: 512 [bytes]
Keyslots:
0: luks2
Key: 512 bits
Priority: normal
Cipher: aes-xts-plain64
Cipher key: 512 bits
PBKDF: argon2id
Time cost: 6
Memory: 1048576
Threads: 4
Salt: d6 0f b7 bc 68 c5 fc 65 14 56 16 b7 3f e8 f2 f6
91 eb d6 ff bf b8 6d eb de bb e9 59 2f 65 35 be
AF stripes: 4000
AF hash: sha256
Area offset:32768 [bytes]
Area length:258048 [bytes]
Digest ID: 0
1: luks2
Key: 512 bits
Priority: normal
Cipher: aes-xts-plain64
Cipher key: 512 bits
PBKDF: argon2id
Time cost: 6
Memory: 1048576
Threads: 4
Salt: ea 01 89 dd 26 ea 45 3b c5 20 90 c9 01 d9 9d 65
3e 56 df e4 28 b4 81 ce ea e0 6e ae f4 0b c1 50
AF stripes: 4000
AF hash: sha256
Area offset:290816 [bytes]
Area length:258048 [bytes]
Digest ID: 0
Tokens:
Digests:
0: pbkdf2
Hash: sha256
Iterations: 260321
Salt: b9 cf bc 7b da 79 0d a3 5a d8 e2 ea 45 32 c1 7a
75 18 a6 2e 66 28 7c 49 c3 10 99 e8 84 05 b2 2f
Digest: b6 7b 7d 94 78 19 41 6c 2a 6c b4 9c e9 e5 47 26
cb ee 19 1d 95 7c d2 d1 97 f6 1f 77 ae 63 38 59
密钥文件具有以下权限:
-r-------- 1 root root 150528 Dez 29 16:16 setup_32g.dat
之后,我在 crypttab 中添加了以下条目:
sandisk_32g UUID=<removed> /home/<myname>/.keyfiles/setup_32g.dat luks,noauto
到目前为止,我还没有在 fstab 中添加任何相关条目。
我可以不用任何密码运行sudo cryptdisks_start sandisk_32g
(假设我已经拥有 sudo 权限)并且驱动器在文件管理器(KDE dolphin)中可用,因此我认为密钥文件使用正确。
但是,当我尝试从文件管理器 (KDE dolphin) 或任务栏中的“磁盘和设备”图标直接访问驱动器时(即无需cryptdisks_start
先调用),系统意外提示我输入密码。如果我输入密码,它会正确打开。
我怎样才能让 GUI 安装过程使用来自 crypttab 的密钥文件而不是提示输入密码?
尝试:密钥文件权限
起初,我怀疑密钥文件缺少权限,但即使给它 777 也没有任何改变。
尝试:fstab
/dev/mapper/sandisk_32g /media/<myname>/sandisk_32g auto noatime,users,nofail 0 0
或者
/dev/mapper/sandisk_32g /media/<myname>/sandisk_32g ext4 noatime,users,nofail,x-systemd.device-timeout=100ms,x-systemd.automount,x-systemd.idle-timeout=20min 0 0
如果我将上述条目之一添加到 fstab,则行为不一致且令人讨厌。连接 USB 驱动器后,每次在 KDE dolphin 文件管理器中第一次尝试时仍会要求我输入密码。有时当我取消对话框并再次访问驱动器时,它会打开而没有任何其他提示(因此使用密钥文件!)。但有时它不起作用,密码对话框会一直显示。此外,任务栏中弹出的“安装和打开”选项总是要求输入密码。当我尝试通过“磁盘和驱动器”任务栏图标卸载驱动器时,由于缺少卸载权限,系统会要求我输入管理员密码。通过 KDE dolphin 卸载有时似乎有效,但它在任务栏中一直显示为已安装,其中“安全删除”按钮似乎不再响应,所以我永远无法确定现在拔下是否安全。
尝试:日志分析
需要此处建议!
我希望使用sudo journalctl --since "1min ago"
或找到任何相关内容sudo dmesg
,但没有找到。
如果有人能告诉我更多相关日志我将非常感激!
解决方法
有趣的是,无论我使用任务栏还是 KDE dolphin,只要我输入密码,一切都会顺利进行,包括卸载权限。我想知道为什么会有区别?我可以激活 KDE 钱包,然后在出现提示时选择“记住密码”,并跳过整个密钥文件操作。当我测试这个时,它一直要求输入密码。此外,我想避免使用 KDE 钱包,并在 Keepass 中管理我的所有密码。