udev 규칙은 사용자에게 네트워크 인터페이스 can0에 대한 모든 액세스 권한을 부여합니다.

udev 규칙은 사용자에게 네트워크 인터페이스 can0에 대한 모든 액세스 권한을 부여합니다.

can0네트워크 장치를 켜거나 끄는 등 네트워크 장치에서 루트와 동일한 작업을 수행할 수 있는 권한을 사용자에게 부여하려고 합니다 . 내 첫 번째 생각은 장치의 그룹 및/또는 소유자를 내 사용자와 내가 속한 그룹으로 설정하는 것이었습니다.

udevadm info -ap $(udevadm info -q path -p /sys/class/net/can0)udev 규칙을 설정하기 전에 표시되는 내용은 다음과 같습니다 .

$ udevadm info -ap $(udevadm info -q path -p /sys/class/net/can0)
  looking at device '/devices/platform/soc/3f204000.spi/spi_master/spi0/spi0.0/net/can0':
    KERNEL=="can0"
    SUBSYSTEM=="net"
    DRIVER==""
    ATTR{netdev_group}=="0"
...
  looking at parent device '/devices/platform/soc/3f204000.spi/spi_master/spi0/spi0.0':
    KERNELS=="spi0.0"
    SUBSYSTEMS=="spi"
    DRIVERS=="mcp251x"

내가 시도한 규칙은 다음과 같습니다( /etc/udev/rules.d/50-can.rules).

KERNELS=="spi0.0", SUBSYSTEMS=="spi", DRIVERS=="mcp251x", GROUP="can", OWNER="<myuser>"

보고서 udevadm test $(udevadm info -q path -p /sys/class/net/can0)소유자 및 그룹이 올바르게 설정되어야 합니다.

...
OWNER 1001 /etc/udev/rules.d/50-can.rules:7
GROUP 1003 /etc/udev/rules.d/50-can.rules:7
...

그러나 규칙( )을 다시 로드하고 재부팅한 후에도 여전히 사용자로 시작하거나 종료 udevadm control -R할 수 없습니다 .can0

$ ip link set can0 down
RTNETLINK answers: Operation not permitted

속성을 설정하여 인터페이스 이름을 변경할 수 있기 때문에 이 규칙이 올바르게 일치한다는 것을 알고 있습니다 NAME.

can0문제가 에서 인터페이스를 찾을 수 없다는 사실과 관련이 있을 수 있다고 생각합니다 /dev. 이는 문자/블록 장치가 없고 프로그램(예: ip)이 해당 장치에 액세스할 수 없음 을 나타낼 수 있습니다. 전통적인 UNIX 소유권/권한을 통해. 이것이 맞다면 udev를 사용하여 이 작업을 어떻게 수행할 수 있습니까(예: 내 사용자에게 전체 권한 부여 can0)?

참고: 다음과 같은 비슷한 질문을 본 적이 있습니다.일반 사용자에게 네트워크 인터페이스에 대한 쓰기 권한을 부여하는 방법은 무엇입니까?, 그러나 그들의 해결책은 sudo를 사용하는 것입니다. 차라리 udev를 사용하여 이 작업을 수행하고 싶지만 최후의 수단으로 사용하겠습니다.

답변1

@AB의 지시에 따라 libpam( )를 사용하여 pam_cap.so로그인(및 ssh) 중에 CAP_NET_ADMIN사용자 세트에 기능을 추가한 inheritable다음 동일한 기능을 /bin/ip및 세트에 추가했습니다. 이제 종속성 없이 사용자로서 네트워크 인터페이스를 열거나 닫을 수 있습니다.inheritablepermittedsudo

이를 수행하는 방법은 다음과 같습니다.https://stackoverflow.com/questions/1956732/is-it-possible-to-configure-linux-capability-per-user

관련 정보