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

관련 정보