我有一个使用 LUKS 进行全盘加密的 USB 闪存驱动器。我插入驱动器并使用以下命令安装它:
cryptsetup luksOpen /dev/sdb flash
mount /dev/mapper/flash /mnt/flash
如果我物理移除闪存驱动器,我仍然可以访问 /mnt/flash 中的内容。为什么是这样?我认为这是一个安全风险,因为我希望在物理删除闪存驱动器后,我的闪存驱动器内容就变得无法访问。
我能做些什么来实现这一点?它需要是我可以对驱动器执行的操作,因为我在其他计算机上使用它,并且我不想必须更改所有这些以确保驱动器安全。
答案1
您似乎跳过了该过程中的某些步骤。你应该:
- 插入驱动器
cryptsetup luksOpen /dev/sdb flash
mount /dev/mapper/flash /mnt/flash
- 正常使用驱动器
umount /mnt/flash
cryptsetup close flash
- 卸下驱动器
的倒数mount
是umount
。尝试umount
未插入的驱动器可能会挂起,具体取决于系统尝试执行的操作。该cryptsetup close
步骤进一步删除驱动器的映射并从内核内存中擦除加密密钥。
如果您在不调用 的情况下物理删除设备,则无法保证所有(元)数据都正确写入设备umount
。在您致电之前,您的加密密钥仍保留在内存中cryptsetup close
。考虑到这一点,不应跳过这些步骤。
答案2
如果您从 USB 本身运行程序/脚本,您应该能够弄清楚它所在的 LUKS 映射/名称和设备(或者只需告诉脚本设备或映射名称,如果您知道的话)并观察设备何时删除后“消失”。然后卸载它。
我是很确定拔掉 USB 会导致设备 ( /dev/sdXn
) 消失,但如果它没有消失,您就必须查看dmesg
或查看系统日志,或者/sys
也许在某个地方找到它。
这是一个概念验证的 bash 脚本,看起来应该可以工作,但我的 USB 上没有任何 LUKS 分区可供测试,所以我不确定是否umount
需要诸如--lazy
或 之类的选项--force
。
map=$( df --output=source $PWD |tail -n1 )
device=$( sudo cryptsetup status "$map" | grep -o "device:.*"|cut -d' ' -f 3 )
while [ -b "$device" ]
do
sleep 30
done
echo "Device $device is missing, unmounting"
sudo umount -v "$map"
如果它是从已安装的 LUKS 容器内部运行,则$PWD
应该找到它映射的 LUKS 名称,然后是设备,如果设备不再是块特殊文件,则卸载映射的设备。
PS 如果设备以 rw(可写)方式安装,则文件系统可能会因突然拔出而损坏。 FAT 似乎特别容易受到攻击,而日志文件系统应该更强大。如果它安装了 ro (只读)至少你可以避免这个问题, mount 接受-o ro
和 cryptsetup 接受--readonly
(两者可能都不是必需的)