udevは、ユーザーがログインしたときにデバイスにACLを適用しません。

udevは、ユーザーがログインしたときにデバイスにACLを適用しません。

USBスキャナーがあります。

Bus 001 Device 003: ID 055f:021e Mustek Systems, Inc. BearPaw 1200 TA/CS

loginctlに登録されたログインユーザー:

[mk@linux ~]$ loginctl session-status
1 - mk (1000)
           Since: Sat 2020-10-24 09:57:45 CEST; 8s ago
          Leader: 530 (lxdm-session)
            Seat: seat0; vc1
             TTY: tty1
         Service: lxdm; type x11; class user
           State: active
            Unit: session-1.scope
                  ├─530 /usr/lib/lxdm/lxdm-session
                  ├─539 xfce4-session
                  ├─625 /usr/bin/ssh-agent -s
                  ├─630 xfwm4
[...]

スキャナを使用できるように、スキャナデバイスファイルは自分のユーザーに対してACLを有効にする必要があります。

getfacl  /dev/bus/usb/001/003
getfacl: Removing leading '/' from absolute path names
# file: dev/bus/usb/001/003
# owner: root
# group: scanner
user::rw-
user:mk:rw- <<<<<<<< HERE
group::rw-
mask::rw-
other::r--

これは、udevがこのデバイスで次のルールを実行しているという事実に由来します(私が想定したように実際に確認する方法がわかりません)。

udevadm info --query=path --name=/dev/bus/usb/001/003
/devices/pci0000:00/0000:00:02.1/0000:01:00.0/usb1/1-6

udevadm test  /devices/pci0000:00/0000:00:02.1/0000:01:00.0/usb1/1-6
[...]
Reading rules file: /usr/lib/udev/rules.d/49-sane.rules
# Mustek BearPaw 1200 CS | Mustek BearPaw 1200 TA
ATTRS{idVendor}=="055f", ATTRS{idProduct}=="021e", MODE="0664", GROUP="scanner", ENV{libsane_matched}="yes"
[...]
Reading rules file: /usr/lib/udev/rules.d/70-uaccess.rules
# SCSI and USB scanners
ENV{libsane_matched}=="yes", TAG+="uaccess"

Reading rules file: /usr/lib/udev/rules.d/73-seat-late.rules
TAG=="uaccess", ENV{MAJOR}!="", RUN{builtin}+="uaccess"
[...]

DEVPATH=/devices/pci0000:00/0000:00:02.1/0000:01:00.0/usb1/1-6
DEVNAME=/dev/bus/usb/001/003
DEVTYPE=usb_device
DRIVER=usb
PRODUCT=55f/21e/100
[...]
ACTION=add
[...]
ID_MODEL_FROM_DATABASE=BearPaw 1200 TA/CS
[...]
run: '/bin/sh -c 'if test -e /sys//devices/pci0000:00/0000:00:02.1/0000:01:00.0/usb1/1-6/power/control; then echo on > /sys//devices/pci0000:00/0000:00:02.1/0000:01:00.0/usb1/1-6/power/control; elif test -e /sys//devices/pci0000:00/0000:00:02.1/0000:01:00.0/usb1/1-6/power/level; then echo on > /sys//devices/pci0000:00/0000:00:02.1/0000:01:00.0/usb1/1-6/power/level; fi''
run: 'uaccess' <<<<<<<<<<<<<<<<< HERE ACLs should be applied >>>>>>>>>>>>>>>>>>>>>>>>>
Unload module index
Unloaded link configuration context.

問題は、起動してログインした後、権限が次のようになることです。

getfacl  /dev/bus/usb/001/003
getfacl: Removing leading '/' from absolute path names
# file: dev/bus/usb/001/003
# owner: root
# group: scanner
user::rw-
group::rw-
other::r--

書き込み権限を持つユーザーmkがなく、スキャナーが検出されません。

私が実行した場合: sudo udevadm trigger -c add /dev/bus/usb/001/003

これで権限が正しく設定されます。

getfacl  /dev/bus/usb/001/003
getfacl: Removing leading '/' from absolute path names
# file: dev/bus/usb/001/003
# owner: root
# group: scanner
user::rw-
user:mk:rw- << IT IS HERE AS IT'S SUPPOSED TO BE
group::rw-
mask::rw-
other::r--

デバイスを物理的に再挿入しても同じことが起こります。

問題は、ユーザーがログインしたときに自動的に発生しないことです。

ベストアンサー1

自分で答えてください:これは "ACTION!="add", GOTO="libsane_rules_end" 行にある SANE ルールのバグです。私はバグレポートと MR を作成しました。 https://gitlab.com/sane-project/backends/-/issues/371 https://gitlab.com/sane-project/backends/-/merge_requests/541

おすすめ記事