Linux下如何让系统自动挂载加密设备

Linux下如何让系统自动挂载加密设备

当我插入外部存储时,我需要自动将其安装为加密设备。

我怎样才能做到这一点?

答案1

问题是,为了让系统自动安装加密设备,该设备的密钥必须存储在同一系统的某个位置。因此,如果您的系统被盗,密钥可能会被泄露。如果这适合您,请继续阅读。

udev是Linux的即插即用管理器;每当硬件连接(断开)时,它都会通过udevudev负责将其放入/dev目录中的某个位置或执行任何需要执行的操作以使其被 Linux 的其余部分识别。通过深入研究其udev工作原理,您会发现在连接 USB 大容量存储设备时可以运行脚本。

基本上你需要去/etc/udev/rules.d。这里的所有文件都会在(重新)启动时进行解析udev,并且这些文件可用于在连接某些设备时触发脚本。不要更改您在此处看到的任何内容,但我添加了z60_usbmount.rules包含以下内容的内容:

KERNEL=="sd*", BUS=="usb", ACTION=="add", RUN+="/etc/local/usbmountcheck udev add $kernel $parent"

KERNEL=="sd*", ACTION=="remove", RUN+="/etc/local/usbmountcheck udev remove $kernel $parent"

因此,当通过 USB 连接任何外部驱动器时,该 usbmountcheck 脚本将运行,并udev放弃有关该设备的所有信息。

usbmountcheck脚本有点复杂,因为您想要唯一地标识驱动器,而sdasdb等名称、名称$kernel无法做到这一点。以下是我在脚本中包含的用于执行此操作的逻辑:

ACTION=$2
KVOL=$3
KVROOT=$4
# correlate volume name in /dev/disk/by-id with $KVOL, if we can
VNAME="`/bin/ls -l /dev/disk/by-id | /bin/grep $KVOL | /usr/bin/tr -s [[:space:]] ' ' | /usr/bin/cut -f 9 -d ' '`"
if [ "$?" != 0 ]; then
 die "error in pipeline that tries to get volume name, return code $?"
 fi

此时$VNAME就会有 USB 识别的设备名称。然后,您可以测试它是否是已知的加密卷,并编写适当的命令脚本来安装它。您还必须编写一个 umount 处理程序脚本,以便在断开连接后自动清理。

编写 udev 脚本存在很多危险,因为如果它们失败,可能会阻止 udev 工作并识别进一步的硬件更改。谨慎行事。

相关内容