Mount
從 udev 安裝時未應用 umask
我有一個 udev 規則,它在連接時自動安裝 USB 設備
規則如下:
# cat /etc/udev/rules.d/10-usbdetectd.rules KERNEL!="sd[a-z]*", GOTO="media_by_label_auto_mount_end" # Import FS infos IMPORT{program}="/sbin/blkid -o udev -p %N" # Global mount options ACTION=="add", ENV{mount_options}="relatime" # Filesystem-specific mount options ACTION=="add", ENV{ID_FS_TYPE}=="vfat|ntfs", ENV{mount_options}="$env{mount_options},utf8,uid=1000,gid=1000,umask=022" # Mount the device ACTION=="add", RUN+="/bin/mount -o $env{mount_options} /dev/%k /media/usb" # Clean up after removal ACTION=="remove", RUN+="/bin/umount -l /media/usb" # Exit LABEL="media_by_label_auto_mount_end"
此規則執行良好,但是,我想以完全權限安裝設備。為此,我必須設置 umask=000
當我手動嘗試時,它按預期工作
# ls -dl /media/usb/ drwxr-xr-x 2 root root 4096 Jan 29 2019 /media/usb/ # mount -o relatime,utf8,uid=1000,gid=1000,umask=000 /dev/sda1 /media/usb/ # df Filesystem 1K-blocks Used Available Use% Mounted on /dev/root 6643016 86356 6199492 1% / devtmpfs 223204 0 223204 0% /dev tmpfs 256484 0 256484 0% /dev/shm tmpfs 256484 48 256436 0% /tmp tmpfs 256484 132 256352 0% /run /dev/mmcblk0p1 20185 2854 17331 14% /boot /dev/sda1 1957600 96 1957504 0% /media/usb # ls -dl /media/usb/ drwxrwxrwx 2 user user 16384 Jan 1 1970 /media/usb/
但是,當安裝由 udev 完成時,不會應用遮罩
# ls -dl /media/usb/ drwxr-xr-x 2 root root 4096 Jan 29 2019 /media/usb/ [USB drive plug] # df Filesystem 1K-blocks Used Available Use% Mounted on /dev/root 6643016 86356 6199492 1% / devtmpfs 223204 0 223204 0% /dev tmpfs 256484 0 256484 0% /dev/shm tmpfs 256484 52 256432 0% /tmp tmpfs 256484 132 256352 0% /run /dev/mmcblk0p1 20185 2854 17331 14% /boot /dev/sda1 1957600 96 1957504 0% /media/usb # ls -dl /media/usb/ drwxr-xr-x 2 root root 16384 Jan 1 1970 /media/usb/
似乎當安裝由 udev 完成時,沒有應用任何安裝選項。
uid=1000 和 gid=1000 對應我的使用者
# cat /etc/passwd [...] user:x:1000:1000:- Standard user:/home/user:/bin/bash [...]
似乎問題來自 udev 規則語法。
在使用外部腳本而不是直接呼叫
/bin/mount
和添加一些日誌之後,我指出只有relatime
選項被傳遞給腳本。修改udev規則後:
[...] # Global mount options ACTION=="add", ENV{mount_options}="relatime,utf8,uid=1000,gid=1000,dmask=0000,fmask=0000" # Mount the device ACTION=="add", RUN+="/bin/mount -o $env{mount_options} /dev/%k /media/usb" [...]
udev 規則有效,並以預期的權限安裝 USB 驅動器。
因此,一旦定義了環境變數(或者我沒有使用正確的語法),似乎就不可能將環境變數覆蓋到 udev 規則中。
如果有人知道我如何保留文件系統特定的掛載選項,我會很高興看到它。
否則,即使不是最佳解決方法,這種解決方法對我的情況也足夠了。