udev에서 마운트할 때 umask가 적용되지 않음

udev에서 마운트할 때 umask가 적용되지 않음

USB 장치가 연결되면 자동으로 마운트하는 udev 규칙이 있습니다.

규칙은 다음과 같습니다.

# 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
[...]

답변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 규칙으로 재정의하는 것이 불가능합니다.

파일 시스템별 마운트 옵션을 보존하는 방법을 아는 사람이 있다면 기꺼이 알려드리겠습니다.

그렇지 않은 경우에는 최적이 아니더라도 이 해결 방법으로 충분합니다.

관련 정보