考虑一下我有/etc/udev/rules.d/91-checkveracrypt.rules
:
ACTION=="add", ATTRS{idVendor}=="1234", ATTRS{idProduct}=="1234", RUN+="/home/user/tryveracrypt.sh"
/home/user/tryveracrypt.sh
:
reqsubstr="/dev/disk/by-id/usb-AAAAA-0:0-part1"
for word in $DEVLINKS
do
if [ "$word" == "$reqsubstr" ] ; then
/usr/bin/su user -c '/bin/bash /home/user/mountveracrypt.sh'
exit
fi
done
最后mountveracrypt.sh
:
sudo veracrypt -t -k /home/user/key -p "" --pim=0 --protect-hidden=no /dev/disk/by-id/usb-AAAAA-0:0-part1 --slot=1 --verbose --non-interactive > /tmp/mount 2>&1
/usr/bin/veracrypt
是/etc/sudoers
,所以 veracrypt 不要求输入密码。./mountveracrypt.sh
以用户身份调用可以正常工作。我理解tryveracrypt.sh
是以 root 身份运行的,所以我调用的是,mountveracrypt.sh
这样su user
挂载就对用户可用了。
如果我尝试:
sudo su
./mountveracrypt.sh
exit (go back to user)
veracrypt -t -l
我得到:
Error: No volumes mounted.
但sudo veracrypt -t -l
得到:
1: /dev/disk/by-id/usb-AAAAA-0:0-part1 /dev/mapper/veracrypt1 /media/veracrypt1
好的。很好。以 root 身份安装时,该卷仅供 root 使用。让我恼火的是,当我插入 USB 时,它会运行/udev/rules.d/
脚本。
cat /tmp/mount
:
Volume "/dev/disk/by-id/usb-AAAAA-0:0-part1" has been mounted.
veracrypt -t -l
:
Error: No volumes mounted.
sudo veracrypt -t -l
:
Error: No volumes mounted.
为什么??我无法以用户身份访问挂载,甚至无法以 root 身份访问。我遗漏了什么?
编辑:
我无法卸载该卷,veracrypt -d
因为 veracrypt 看不到它。我需要重新启动系统才能拔下它。
udev/rules 是否以不同于 root 的用户身份运行?虽然我曾经使用过它whoami
,并且它显示 root,并按su user -c 'whoami'
预期显示用户。
另外,我在 udev/rules 中编写了一个脚本来挂载 veracrypt、复制一些文件并卸载,它运行正常。我只是无法在从 udev/rules 调用的脚本之外访问文件并卸载 veracrypt。