YOGYUI

Linux - USB Device 접근권한 영구변경 (chmod permanently) 본문

Software/Etc

Linux - USB Device 접근권한 영구변경 (chmod permanently)

요겨 2022. 4. 4. 22:01
반응형

Linux - Change permission of USB device permanently

 

리눅스 기반 OS(ex: Ubuntu)에서 USB 기기와 관련된 작업을 하는 경우, 읽기/쓰기 접근권한을 바꿔주지 않으면 에러가 발생하게 된다

Permission denied: '/dev/ttyUSB0'

일반적인 경우 USB device의 접근권한은 user, group은 read + write로 설정되어있지만 others는 아무런 권한이 부여되어 있지 않다

$ ls -l /dev/ttyUSB0
crw-rw---- 1 root dialout 188, 0  4월  4 12:56 /dev/ttyUSB0

 

others 유저클래스에도 read/write 권한을 부여하기 위해 보통 다음의 명령어를 입력한다

$ sudo chmod 666 /dev/ttyUSB0

혹은

$ sudo chmod o=rw /dev/ttyUSB0
$ ls -l /dev/ttyUSB0
crw-rw-rw- 1 root dialout 188, 0  4월  4 12:56 /dev/ttyUSB0

하지만 USB 기기를 다시 뺐다 꽂거나, OS를 재부팅하면 권한은 다시 원상복구되기 때문에 위 명령어를 다시 입력해야하는 번거로움이 있다

(chmod 명령어에 대한 설명은 링크 참고)

 

특정 USB 기기의 권한을 영구적으로 설정하는 방법을 알아보자 (udev 권한규칙 생성)


1. USB 기기의 ID 알아내기

특정 USB 기기가 연결되었을 때, 해당 기기에 자동으로 권한을 부여하는 법칙을 만들기 위해서는 다음 2개 정보가 필요하다

  • Product ID
  • Vendor ID

Product ID와 Vendor ID는 lsusb 명령어로 쉽게 알아낼 수 있다

$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 004: ID 8087:0a2b Intel Corp. 
Bus 001 Device 003: ID 10c4:ea60 Silicon Labs CP210x UART Bridge
Bus 001 Device 005: ID 0c45:6713 Microdia Integrated_Webcam_HD
Bus 001 Device 002: ID 046d:c52f Logitech, Inc. Unifying Receiver
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

이 중 권한을 부여하고자 하는 장치 (여기서는 Silicon Labs CP10X UART Bridge) 정보에서 

Bus 001 Device 003: ID 10c4:ea60 Silicon Labs CP210x UART Bridge

'ID' 뒤에 붙는 4글자:4글자가 각각 Vendor ID, Product ID가 된다

(예시에서는 Vendor ID=10c4, Product ID=ea60)

※ 장치가 무엇인지 모르겠다면 dmesg 등을 통해 USB 접속 시의 커널 로그를 확인해보면 된다

2. 규칙 생성

/etc/udev/rules.d 디렉터리에 .rules 확장자의 파일을 하나 생성해준다 (vi나 nano같은 에디터 활용)

※ 파일명 앞은 두자리 수의 숫자를 기입하게 되는데, 이는 규칙 적용 우선순위를 가리킨다

$ sudo nano /etc/udev/rules.d/50-myusbrules.rules

파일 내용으로 다음 한줄을 작성해준다

SUBSYSTEM=="tty", ATTRS{idVendor}=="xxxx", ATTRS{idProduct}=="yyyy", MODE="0666"

여기서 xxxx, yyyy는 위 1번에서 알아낸 특정 USB 기기의 Vendor ID와 Product ID값으로 대체하면 된다

파일을 저장한 뒤 USB 장치를 다시 뺐다 꽂은 뒤 권한을 확인하면 666 (rw-rw-rw-)로 설정된 것을 확인할 수 있다

위와 같이 작성하면 동일한 제품군은 개별 제품 구별없이 장착되는 순간 모두 동일한 권한이 부여되게 된다
장치 개별로 규칙을 분리하고 싶으면 개별 장치의 시리얼 넘버를 규칙에 추가하면 된다

장치의 시리얼 번호 알아내기 = udevadm 명령어
$ udevadm info -a -n /dev/ttyUSB0 | grep '{serial}' | head -n1
    ATTRS{serial}=="AB0LKCH1"​

 

위 값을 다음과 같이 .rules 파일에 추가해주면, 해당 시리얼넘버를 가진 장치에만 연결 시 권한부여를 할 수 있다
SUBSYSTEM=="tty", ATTRS{idVendor}=="xxxx", ATTRS{idProduct}=="yyyy", ATTRS{serial}="zzzzzzzz", MODE="0666"​

 

끝~!

 

[참고]

https://ahnbk.com/?p=1370

https://www.xmodulo.com/change-usb-device-permission-linux.html

 

 

반응형