Eu tenho uma regra udev que monta automaticamente o dispositivo usb quando conectado
A regra é a seguinte:
# 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"
Esta regra está funcionando bem, porém, gostaria de montar o dispositivo com permissões totais. Para fazer isso, tenho que definir umask = 000
Quando estou tentando manualmente, funciona como esperado
# 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/
Porém quando a montagem é feita pelo udev, a máscara não é aplicada
# 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/
Parece que quando a montagem é feita pelo udev, nenhuma das opções de montagem é aplicada.
uid=1000 e gid=1000 correspondem ao meu usuário
# cat /etc/passwd
[...]
user:x:1000:1000:- Standard user:/home/user:/bin/bash
[...]
Parece que o problema veio da sintaxe da regra do udev.
Depois de usar um script externo em vez de chamar diretamente
/bin/mount
e adicionar alguns logs, observei que a únicarelatime
opção foi passada para o script.Depois de modificar a regra do udev para:
As regras do udev funcionam e montam a unidade USB com as permissões esperadas.
Portanto, parece que não é possível substituir a variável de ambiente na regra do udev depois de definida (ou não estou usando a sintaxe correta).
Se alguém souber como eu poderia manter as opções de montagem específicas do sistema de arquivos, ficaria feliz em vê-lo.
Caso contrário, essa solução alternativa é suficiente para o meu caso, mesmo que não seja ideal.