umask не применяется при монтировании из udev

У меня есть правило 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
[...]
0
04.04.2019, 19:50
1 ответ

Похоже, проблема возникла из-за синтаксиса правила 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 после того, как она была определена (или я использую неправильный синтаксис ).

Если кто-то знает, как сохранить параметры монтирования файловой системы, я был бы рад увидеть это.

В противном случае этого обходного пути достаточно для моего случая, даже если он не оптимален.

0
28.01.2020, 03:51

Теги

Похожие вопросы