答案1
我删除了之前的答案,因为它不充分。
警告:我在 openwrt 的 virtualbox 映像上尝试了此解决方案(姿态调整(12.9,r36088)),可能在路由器上略有不同。
我假设密钥文件是 /root/keyfile 并且使用的密码是 aes-xts-plain。您必须根据您的设置更改这些值。
如果你愿意,我可以告诉你如何在 openwrt 上启用 luks 扩展。
假设你的系统已经支持 cryptsetup 和所有各种密码,你必须在 hotplug 级别上操作,因为 openwrt 的 cryptosetup 实现似乎不支持 /etc/crypttab (可能应该重新编译启动映像)
安装热插拔支持
root@OpenWrt:~# opkg install block-mount
打开/etc/hotplug.d/usb/10-usb,在我的系统中该文件如下所示:
#!/bin/sh
# Copyright (C) 2009 OpenWrt.org
case "$ACTION" in
add)
# update LEDs
;;
remove)
# update LEDs
;;
esac
我已经编辑了该文件:
#!/bin/sh
# Copyright (C) 2009 OpenWrt.org
case "$ACTION" in
add)
# update LEDs
exec logger "PRD:" ${PRODUCT};
;;
remove)
# update LEDs
;;
esac
在插入光盘之前,从连接到路由器的终端跟踪日志:
root@OpenWrt:~# logread -f|grep PRD
连接 USB 磁盘,您应该看到类似以下的行:
Oct 29 10:43:48 OpenWrt user.notice root: PRD: 13fe/3600/100
记下PRD后面的字符串:它用于识别要解密的磁盘
现在,热插拔机制首先调用位于 /etc/hotplug.d/usb 中的脚本,然后调用 /etc/hotplug.d/block 中的 40-mount 脚本。设备和挂载点的数据通过环境变量传递,但我无法理解如何与 40-mount 脚本通信,我们想要使用环境变量挂载加密分区。所以我选择了不太优雅但仍然实用的。我修改了文件/etc/hotplug.d/usb/10-usb
#!/bin/sh
# Copyright (C) 2009 OpenWrt.org
PRODID="13fe/3600/100"
case "$ACTION" in
add)
# update LEDs
if [ "${PRODUCT}" = "${PRODID}" ];
then
touch /tmp/crypt
fi
;;
remove)
# update LEDs
if [ "${PRODUCT}" = "${PRODID}" ];
then
rm /tmp/crypt
fi
;;
esac
当插入加密光盘时,将创建文件 /tmp/cryp,当取出光盘时,该文件将被删除。所以我编辑了文件/etc/hotplug.d/block/40-mount:
case "$ACTION" in
add)
### AUTO DECRYPT
if [ -e /tmp/crypt ];
then
/usr/sbin/cryptsetup -c aes-xts-plain create -d /root/keyfile cryptousb /dev/$device;
device="mapper/cryptousb"
mountpoint="/mnt/cryptousb"
sleep 10
fi
#### END AUTO DECRYPT
和:
remove)
### AUTO DECRYPT
if [ -e /tmp/crypt ];
then
/usr/sbin/cryptsetup remove cryptousb;
device="mapper/cryptousb"
mountpoint="/mnt/cryptousb"
sleep 10
rm /tmp/crypt
fi
#### END AUTO DECRYPT
当插入光盘并识别其 PRODID 时,在安装之前打开并映射加密卷,然后更改设备名称和安装点。睡眠是等待密码设置过程完成所必需的。当您卸载卷时,/dev/mapper 中的映射将被删除。
希望这对你有用