udevルールによって生成された/dev/ttyACM0シンボリックリンクに無効な権限があります。

udevルールによって生成された/dev/ttyACM0シンボリックリンクに無効な権限があります。

ESXi 6で実行されているUbuntu 17.04 VMのホームオートメーションサーバーで、一部のUSBデバイスに一貫したデバイス名を設定しようとしています。これまで /etc/udev/rules.d/99-usb -serial.rules には次の規則があります。

SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idproduct}=="6001", ATTRS{serial}=="A19DVOA", SYMLINK+="USBrfxcom", MODE="0660", GROUP="dialout"
KERNEL=="ttyACM[0-9]*", SUBSYSTEM=="tty", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", SYMLINK+="USBzwave2", MODE="0660", GROUP="dialout"
KERNEL=="ttyACM[0-9]*", SUBSYSTEM=="tty", ATTRS{idVendor}=="0658", ATTRS{idProduct}=="0200", SYMLINK+="USBzwave5", MODE="0660", GROUP="dialout"
KERNEL=="ttyACM[0-9]*", SUBSYSTEM=="tty", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="204b", SYMLINK+="USBcul",    MODE="0660", GROUP="dialout"

Vendorid 0403とproductid 6001を含む最初のルールは/ dev / ttyUSB *の範囲に現れる唯一のデバイスなので、現在のところ大きな問題ではありません。つまり、将来変更される可能性がありますが、常に/dev/ttyUSB0です。 Iデバイスを追加するとき。規則2-4は問題の規則であり、すべて/ dev / ttyACM *の範囲内の3つのデバイスに対してトリガーされます。再起動後、各USBデバイスは/dev/ttyACM0 /dev/ttyACM1または/dev/ttyACM2として表示されることがあります。私はこれらのデバイスが/dev/USBzwave2、/dev/USBzwave5、および/dev/USBculとして現れることを望みます。

出力sudo udevadm test -a -p $(udevadm 情報 -q パス -n /dev/ttyACM1)私にしてください:

Reading rules file: /etc/udev/rules.d/99-usb-serial.rules
Reading rules file: /lib/udev/rules.d/99-vmware-scsi-udev.rules
rules contain 49152 bytes tokens (4096 * 12 bytes), 14768 bytes strings
2093 strings (26721 bytes), 1358 de-duplicated (12689 bytes), 736 trie nodes used
value '[dmi/id]sys_vendor' is 'VMware, Inc.'
value '[dmi/id]sys_vendor' is 'VMware, Inc.'
IMPORT builtin 'hwdb' /lib/udev/rules.d/60-serial.rules:7
IMPORT builtin 'usb_id' /lib/udev/rules.d/60-serial.rules:8
/sys/devices/pci0000:00/0000:00:17.0/0000:13:00.0/usb1/1-3/1-3.2/1-3.2:1.0: if_class 2 protocol 0
IMPORT builtin 'hwdb' /lib/udev/rules.d/60-serial.rules:8
IMPORT builtin 'path_id' /lib/udev/rules.d/60-serial.rules:15
LINK 'serial/by-path/pci-0000:13:00.0-usb-0:3.2:1.0' /lib/udev/rules.d/60-serial.rules:16
IMPORT builtin skip 'usb_id' /lib/udev/rules.d/60-serial.rules:19
LINK 'serial/by-id/usb-busware.de_CUL868-if00' /lib/udev/rules.d/60-serial.rules:23
GROUP 20 /etc/udev/rules.d/99-usb-serial.rules:4
MODE 0660 /etc/udev/rules.d/99-usb-serial.rules:4
LINK 'USBcul' /etc/udev/rules.d/99-usb-serial.rules:4
handling device node '/dev/ttyACM1', devnum=c166:1, mode=0660, uid=0, gid=20
preserve permissions /dev/ttyACM1, 020660, uid=0, gid=20
preserve already existing symlink '/dev/char/166:1' to '../ttyACM1'
found 'c166:1' claiming '/run/udev/links/\x2fUSBcul'
creating link '/dev/USBcul' to '/dev/ttyACM1'
preserve already existing symlink '/dev/USBcul' to 'ttyACM1'
found 'c166:1' claiming '/run/udev/links/\x2fserial\x2fby-id\x2fusb-busware.de_CUL868-if00'
creating link '/dev/serial/by-id/usb-busware.de_CUL868-if00' to '/dev/ttyACM1'
preserve already existing symlink '/dev/serial/by-id/usb-busware.de_CUL868-if00' to '../../ttyACM1'
found 'c166:1' claiming '/run/udev/links/\x2fserial\x2fby-path\x2fpci-0000:13:00.0-usb-0:3.2:1.0'
creating link '/dev/serial/by-path/pci-0000:13:00.0-usb-0:3.2:1.0' to '/dev/ttyACM1'
preserve already existing symlink '/dev/serial/by-path/pci-0000:13:00.0-usb-0:3.2:1.0' to '../../ttyACM1'
created db file '/run/udev/data/c166:1' for '/devices/pci0000:00/0000:00:17.0/0000:13:00.0/usb1/1-3/1-3.2/1-3.2:1.0/tty/ttyACM1'
ACTION=-p
DEVLINKS=/dev/serial/by-id/usb-busware.de_CUL868-if00 /dev/USBcul /dev/serial/by-path/pci-0000:13:00.0-usb-0:3.2:1.0
DEVNAME=/dev/ttyACM1
DEVPATH=/devices/pci0000:00/0000:00:17.0/0000:13:00.0/usb1/1-3/1-3.2/1-3.2:1.0/tty/ttyACM1
ID_BUS=usb
ID_MODEL=CUL868
ID_MODEL_ENC=CUL868
ID_MODEL_FROM_DATABASE=LUFA USB to Serial Adapter Project
ID_MODEL_ID=204b
ID_PATH=pci-0000:13:00.0-usb-0:3.2:1.0
ID_PATH_TAG=pci-0000_13_00_0-usb-0_3_2_1_0
ID_PCI_CLASS_FROM_DATABASE=Serial bus controller
ID_PCI_INTERFACE_FROM_DATABASE=XHCI
ID_PCI_SUBCLASS_FROM_DATABASE=USB controller
ID_REVISION=0000
ID_SERIAL=busware.de_CUL868
ID_TYPE=generic
ID_USB_CLASS_FROM_DATABASE=Communications
ID_USB_DRIVER=cdc_acm
ID_USB_INTERFACES=:020201:0a0000:
ID_USB_INTERFACE_NUM=00
ID_VENDOR=busware.de
ID_VENDOR_ENC=busware.de
ID_VENDOR_FROM_DATABASE=Atmel Corp.
ID_VENDOR_ID=03eb
MAJOR=166
MINOR=1
SUBSYSTEM=tty
TAGS=:systemd:
USEC_INITIALIZED=5912804
Unload module index
Unloaded link configuration context.

これがソリューションの99%のようです。しかし、出力を正しく読み取ると、ルールに従って2つのシンボリックリンクが生成されるようです。

creating link '/dev/USBcul' to '/dev/ttyACM1'
preserve already existing symlink '/dev/USBcul' to 'ttyACM1'

最初の行は大丈夫に見えますが、2番目の行は間違っているようです。

ls -l /dev/USB*以下を提供します。

lrwxrwxrwx 1 root root 7 Oct  1 14:46 /dev/USBcul -> ttyACM1

私の考えでは、次のように変わらなければならないと思います。

lrwxrwxrwx 1 root root 7 Oct  1 14:46 /dev/USBcul -> /dev/ttyACM1

また、ルールで指定されたグループは無視されるようです。ルートではなくダイヤルアウトに設定する必要があり、権限が正しくありません。 660ではなく777です。これらの権限の問題は、間違ったシンボリックリンクによって引き起こされると思います。

それでは、私が何を見逃しているのでしょうか?それは私の顔を見つめているようですが、私はそれを見ることができません。

答え1

あなたの例では、両方のシンボリックリンクは同じものを指しています。 2番目の(/dev/USBcul -> ttyACM)は相対シンボリックリンクです。相対シンボリックリンクは、シンボリックリンクと同じディレクトリにあるファイルを指します(この場合)/dev

シンボリックリンクのない権限:ターゲットファイルへのアクセスは、ターゲットファイルの権限と所有権によって決まります。シンボリックリンクは、リンクを作成したプロセスのuidとgidからユーザーとグループの所有権を取得します。あなたの例では、リンクはルートによって生成されます。繰り返しますが、リンクの所有権はほとんど意味がありません。指定されたファイルへのアクセスは、ターゲットファイルの所有権によって決まります。リンク所有権が重要な状況の1つは、リンクが固定ビットが設定されているディレクトリに含まれている場合、リンク所有者だけが削除できることです。

またどんな問題にぶつかりましたか?

関連情報