Не удается установить владельца и группу правила udev

Вопрос или проблема

Ниже устройство, для которого я хочу создать символьную ссылку, чтобы дать ему имя.


Udevadm info начинается с устройства, указанного в devpath, и затем
поднимается по цепи родительских устройств. Он выводит для каждого устройства
все возможные атрибуты в формате ключей правил udev.
Правило для сопоставления может быть составлено из атрибутов устройства
и атрибутов от одного единственного родительского устройства.

  рассматривая устройство '/devices/pci0000:00/0000:00:14.0/usb1/1-9/1-9:1.0/ttyUSB0/tty/ttyUSB0':
    KERNEL=="ttyUSB0"
    SUBSYSTEM=="tty"
    DRIVER==""

  рассматривая родительское устройство '/devices/pci0000:00/0000:00:14.0/usb1/1-9/1-9:1.0/ttyUSB0':
    KERNELS=="ttyUSB0"
    SUBSYSTEMS=="usb-serial"
    DRIVERS=="cp210x"
    ATTRS{port_number}=="0"

  рассматривая родительское устройство '/devices/pci0000:00/0000:00:14.0/usb1/1-9/1-9:1.0':
    KERNELS=="1-9:1.0"
    SUBSYSTEMS=="usb"
    DRIVERS=="cp210x"
    ATTRS{authorized}=="1"
    ATTRS{bInterfaceProtocol}=="00"
    ATTRS{bInterfaceSubClass}=="00"
    ATTRS{bInterfaceClass}=="ff"
    ATTRS{bAlternateSetting}==" 0"
    ATTRS{bInterfaceNumber}=="00"
    ATTRS{supports_autosuspend}=="1"
    ATTRS{bNumEndpoints}=="02"

  рассматривая родительское устройство '/devices/pci0000:00/0000:00:14.0/usb1/1-9':
    KERNELS=="1-9"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{bmAttributes}=="80"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{rx_lanes}=="1"
    ATTRS{urbnum}=="18"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{quirks}=="0x0"
    ATTRS{authorized}=="1"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{manufacturer}=="Silicon Labs"
    ATTRS{idVendor}=="10c4"
    ATTRS{tx_lanes}=="1"
    ATTRS{product}=="CP2102N USB to UART Bridge Controller"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{configuration}==""
    ATTRS{removable}=="removable"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{busnum}=="1"
    ATTRS{bDeviceClass}=="00"
    ATTRS{devnum}=="4"
    ATTRS{serial}=="021f39d67f9aea11aa965eb3b9348ba5"
    ATTRS{maxchild}=="0"
    ATTRS{devpath}=="9"
    ATTRS{version}==" 2.00"
    ATTRS{bMaxPower}=="100mA"
    ATTRS{ltm_capable}=="no"
    ATTRS{bcdDevice}=="0100"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{idProduct}=="ea60"
    ATTRS{speed}=="12"

  рассматривая родительское устройство '/devices/pci0000:00/0000:00:14.0/usb1':
    KERNELS=="usb1"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{version}==" 2.00"
    ATTRS{bDeviceProtocol}=="01"
    ATTRS{bmAttributes}=="e0"
    ATTRS{removable}=="unknown"
    ATTRS{maxchild}=="12"
    ATTRS{authorized}=="1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{ltm_capable}=="no"
    ATTRS{quirks}=="0x0"
    ATTRS{configuration}==""
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bcdDevice}=="0504"
    ATTRS{tx_lanes}=="1"
    ATTRS{product}=="xHCI Host Controller"
    ATTRS{speed}=="480"
    ATTRS{devpath}=="0"
    ATTRS{bMaxPower}=="0mA"
    ATTRS{busnum}=="1"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{manufacturer}=="Linux 5.4.0-200-generic xhci-hcd"
    ATTRS{interface_authorized_default}=="1"
    ATTRS{devnum}=="1"
    ATTRS{urbnum}=="140"
    ATTRS{authorized_default}=="1"
    ATTRS{serial}=="0000:00:14.0"
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{idVendor}=="1d6b"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{bDeviceClass}=="09"
    ATTRS{idProduct}=="0002"
    ATTRS{rx_lanes}=="1"
    ATTRS{bDeviceSubClass}=="00"

  рассматривая родительское устройство '/devices/pci0000:00/0000:00:14.0':
    KERNELS=="0000:00:14.0"
    SUBSYSTEMS=="pci"
    DRIVERS=="xhci_hcd"
    ATTRS{device}=="0x9ded"
    ATTRS{d3cold_allowed}=="1"
    ATTRS{index}=="5"
    ATTRS{local_cpulist}=="0-7"
    ATTRS{subsystem_vendor}=="0x1028"
    ATTRS{msi_bus}=="1"
    ATTRS{label}=="Onboard - Other"
    ATTRS{numa_node}=="-1"
    ATTRS{dma_mask_bits}=="64"
    ATTRS{dbc}=="disabled"
    ATTRS{driver_override}=="(null)"
    ATTRS{class}=="0x0c0330"
    ATTRS{broken_parity_status}=="0"
    ATTRS{local_cpus}=="ff"
    ATTRS{consistent_dma_mask_bits}=="64"
    ATTRS{irq}=="130"
    ATTRS{revision}=="0x30"
    ATTRS{subsystem_device}=="0x08af"
    ATTRS{enable}=="1"
    ATTRS{vendor}=="0x8086"
    ATTRS{ari_enabled}=="0"

  рассматривая родительское устройство '/devices/pci0000:00':
    KERNELS=="pci0000:00"
    SUBSYSTEMS==""
    DRIVERS==""

Я создаю следующее правило udev:

SUBSYSTEM=="tty",KERNEL=="ttyUSB*",ATTRS{idVendor}=="10c4",ATTRS{idProduct}=="ea60",ATTRS{serial}=="021f39d67f9aea11aa965eb3b9348ba5",MODE="0660",OWNER="user",GROUP="dialout",SYMLINK+="PROG1"

И оно создало символьную ссылку, однако я не могу изменить её владельца и группу.

user@user:/etc/udev/rules.d$ ls -la /dev/ttyUSB0 
crw-rw----+ 1 user dialout 188, 0 дек  3 10:57 /dev/ttyUSB0
user@user:/etc/udev/rules.d$ ls -la /dev/PROG1 
lrwxrwxrwx 1 root root 7 дек  3 10:57 /dev/PROG1 -> ttyUSB0

Ответ или решение

Проблема изменения владельца и группы для udev-правила

При настройке правил udev для замены имени устройств, таких как ttyUSB0, вы столкнулись с проблемой, когда созданный симлинк /dev/PROG1 не наследует указанные вами владельца и группу. Вы создали следующее правило:

SUBSYSTEM=="tty",KERNEL=="ttyUSB*",ATTRS{idVendor}=="10c4",ATTRS{idProduct}=="ea60",ATTRS{serial}=="021f39d67f9aea11aa965eb3b9348ba5",MODE="0660",OWNER="user",GROUP="dialout",SYMLINK+="PROG1"

Анализ проблемы

  1. Создание симлинка и его права доступа: Правило SYMLINK+="PROG1" создает символическую ссылку /dev/PROG1, указывающую на /dev/ttyUSB0. Если вы посмотрите на вывод команды ls -la /dev/PROG1, вы увидите, что у нее установлены права доступа lrwxrwxrwx, а владелец и группа – root.

  2. Почему это происходит:

    • Включение параметров OWNER и GROUP в правило udev влияет на физическое устройство, а не на его символическую ссылку. Символические ссылки создаются с правами, установленными системой, по умолчанию указывая на root:root.
    • Симлинк сами по себе не подлежат изменениям прав доступа в udev, так как они указывают на другое устройство, и для их управления могут требоваться другие подходы.

Решение проблемы

Чтобы изменить владельца и группу для символической ссылки, вам нужно комбинировать несколько решений:

  1. Использование RUN команды: Вы можете добавить команду в правило, которая выполнит изменение владельца и группы после создания симлинка. Пример:

    SUBSYSTEM=="tty",KERNEL=="ttyUSB*",ATTRS{idVendor}=="10c4",ATTRS{idProduct}=="ea60",ATTRS{serial}=="021f39d67f9aea11aa965eb3b9348ba5",MODE="0660",OWNER="user",GROUP="dialout",SYMLINK+="PROG1", RUN+="/bin/chown user:dialout /dev/PROG1"

    Убедитесь, что путь к команде chown корректен и что вы используете правильные права доступа.

  2. Перемещение правила: Иногда udev может не перезапускать правила, если они были изменены после инициализации. Попробуйте:

    sudo udevadm control --reload-rules
    sudo udevadm trigger
  3. Проверка логов: Если команда не выполнилась, проверьте логи системы или udev, чтобы выяснить, произошла ли ошибка. Вы можете использовать команду:

    journalctl -u systemd-udevd

Заключение

Убедитесь, что после выполнения всех вышеуказанных действий, символическая ссылка /dev/PROG1 будет иметь нужные параметры владельца и группы. Одновременно с этим свои дополнительные проверки могут потребоваться в зависимости от вашей конкретной конфигурации системы или окружения. Таким образом, предложенные варианты и рекомендации помогут решить вашу проблему с управлением правами в системе.

Оцените материал
Добавить комментарий

Капча загружается...