부팅 시 Ubuntu Linux에서 USB 장치에 대한 사용자 읽기/쓰기 권한 부여
POST
요청을 수신하면 Sinatra 데이터를 인쇄하는 장치에서 부팅 시 실행되는 ESC/POS 서버가 있었습니다.내가 한 방법은 다음 스크립트를 실행하는 부팅 시 자동으로 시작되는 Ubuntu에서 custom service을 만드는 것입니다.
$ su - <NON_ROOT_USER> -l -c \
"cd /path/to/code && \
bundle exec ruby app.rb /dev/usb/lp0"
이 스크립트에서는 파일 경로
/dev/usb/lp0
를 서버에 전달합니다. 이것은 내가 인쇄하려는 열전사 프린터의 파일 설명자입니다.이 모든 설정에서 장치의 전원을 켜고
POST
요청을 보내면 어떻게 됩니까?안타깝게도 파일에 쓸 권한이 없다는 오류가 발생합니다
/dev/usb/lp0
. 하지만 다음 명령을 실행하여 이 문제를 해결할 수 있습니다. $ sudo chown <NON_ROOT_USER> /dev/usb/lp0
일단 입력하면 내 마음의 (그리고 종이 용량의) 내용을 인쇄할 수 있습니다! 그러나 장치가 재부팅되면 파일이 다시 생성되고 내가 할당한 권한이 없습니다. 글쎄, 젠장.
그래도 저를 도울 수 있는 솔루션을 찾았습니다!
사용자 정의 udev 규칙
데비안 시스템에서 장치를 관리하는 시스템 udev
에 대해 배웠습니다. 이를 통해 장치 인식을 위한 특정 규칙을 작성할 수 있습니다.
udev allows for rules that specify what name is given to a device, regardless of which port it is plugged into. For example, a rule to always mount a hard drive with manufacturer “iRiver” and device code “ABC” as /dev/iriver is possible. This consistent naming of devices guarantees that scripts dependent on a specific device’s existence will not be broken.
이것이 바로 나에게 필요한 것입니다! Linux 시스템에 연결된 모든 USB 장치를 NON_ROOT_USER
소유로 지정할 수 있습니다.
지침에 따라 /etc/udev/rules.d
라는 디렉터리99-perm.rules
에 다음 줄을 사용하여 파일을 만들었습니다.
SUBSYSTEM=="usb", OWNER="<NON_ROOT_USER>"
이 규칙이 적용되면 시스템을 즉시 재부팅하면 작동합니다!
보안 강화
당신은 스스로에게 다음과 같이 묻고 있었을 것입니다:
Does this mean all USB devices will be owned by NON_ROOT_USER
?
그리고 당신은 절대적으로 옳을 것입니다. 어쩌면 우리는 그 하나의 장치에 대해서만 권한을 부여하고 싶을 수도 있습니다. 우리는 완전히 할 수 있습니다! 장치의 일련 번호를 기반으로 할 수 있습니다. 예를 들어, 열전사 프린터의 경우 다음 명령으로 이를 찾을 수 있습니다.
$ udevadm -a /dev/usb/lp0
다음 행을 포함한 일부 결과가 출력됩니다.
ATTRS{serial}=="L29955839962630040"
/etc/udev/rules.d/99-perm.rules
를 다시 열고 추가한 줄을 다음으로 교체합니다.
SUBSYSTEM=="usb", ATTRS{serial}=="L29955839962630040", OWNER="<NON_ROOT_USER>"
이를 통해 우리는 이 특정 열전사 프린터를 소유하고 싶다고 구체적으로 말하고 있습니다udev
. 빠른 재부팅 및 점수, 작동합니다!
무엇 향후 계획?
확고한 질문! 이 시스템이 제대로 작동하는지 확인하기 위해 우리가 할 수 있는 일이 더 많습니다.
예를 들어 장치에 여러 개의 열전사 프린터가 있는 경우 이름이 lp0
라고 보장되지 않습니다. 이 경우 SYMLINK+=
속성을 사용하여 항상 확실히 가질 파일 이름을 지정할 수 있습니다. 따라서 lp0
또는 lp1
대신 내 스크립트를 thermal-printer
또는 다음과 같이 가리킬 수 있습니다.
SUBSYSTEM=="usb", ATTRS{serial}=="L72010011070626380", OWNER="<NON_ROOT_USER>", SYMLINK+="usb/thermal-printer"
그러면 내 Ruby 서버를 가리킬 수 있는 /dev/usb/thermal-printer
라는 symbolic link이 생성됩니다!
udev
에 대한 규칙을 작성하는 방법에 대한 이 유용한 가이드를 제공한 Daniel Drake에게 큰 감사를 드립니다!
개선을 위한 여러분의 생각이나 아이디어를 듣고 싶습니다.
Reference
이 문제에 관하여(부팅 시 Ubuntu Linux에서 USB 장치에 대한 사용자 읽기/쓰기 권한 부여), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/hola_soy_milk/granting-user-read-write-permissions-to-a-usb-device-in-ubuntu-linux-on-boot-29b2
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
udev allows for rules that specify what name is given to a device, regardless of which port it is plugged into. For example, a rule to always mount a hard drive with manufacturer “iRiver” and device code “ABC” as /dev/iriver is possible. This consistent naming of devices guarantees that scripts dependent on a specific device’s existence will not be broken.
SUBSYSTEM=="usb", OWNER="<NON_ROOT_USER>"
당신은 스스로에게 다음과 같이 묻고 있었을 것입니다:
Does this mean all USB devices will be owned by
NON_ROOT_USER
?
그리고 당신은 절대적으로 옳을 것입니다. 어쩌면 우리는 그 하나의 장치에 대해서만 권한을 부여하고 싶을 수도 있습니다. 우리는 완전히 할 수 있습니다! 장치의 일련 번호를 기반으로 할 수 있습니다. 예를 들어, 열전사 프린터의 경우 다음 명령으로 이를 찾을 수 있습니다.
$ udevadm -a /dev/usb/lp0
다음 행을 포함한 일부 결과가 출력됩니다.
ATTRS{serial}=="L29955839962630040"
/etc/udev/rules.d/99-perm.rules
를 다시 열고 추가한 줄을 다음으로 교체합니다. SUBSYSTEM=="usb", ATTRS{serial}=="L29955839962630040", OWNER="<NON_ROOT_USER>"
이를 통해 우리는 이 특정 열전사 프린터를 소유하고 싶다고 구체적으로 말하고 있습니다
udev
. 빠른 재부팅 및 점수, 작동합니다!무엇 향후 계획?
확고한 질문! 이 시스템이 제대로 작동하는지 확인하기 위해 우리가 할 수 있는 일이 더 많습니다.
예를 들어 장치에 여러 개의 열전사 프린터가 있는 경우 이름이 lp0
라고 보장되지 않습니다. 이 경우 SYMLINK+=
속성을 사용하여 항상 확실히 가질 파일 이름을 지정할 수 있습니다. 따라서 lp0
또는 lp1
대신 내 스크립트를 thermal-printer
또는 다음과 같이 가리킬 수 있습니다.
SUBSYSTEM=="usb", ATTRS{serial}=="L72010011070626380", OWNER="<NON_ROOT_USER>", SYMLINK+="usb/thermal-printer"
그러면 내 Ruby 서버를 가리킬 수 있는 /dev/usb/thermal-printer
라는 symbolic link이 생성됩니다!
udev
에 대한 규칙을 작성하는 방법에 대한 이 유용한 가이드를 제공한 Daniel Drake에게 큰 감사를 드립니다!
개선을 위한 여러분의 생각이나 아이디어를 듣고 싶습니다.
Reference
이 문제에 관하여(부팅 시 Ubuntu Linux에서 USB 장치에 대한 사용자 읽기/쓰기 권한 부여), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/hola_soy_milk/granting-user-read-write-permissions-to-a-usb-device-in-ubuntu-linux-on-boot-29b2
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
SUBSYSTEM=="usb", ATTRS{serial}=="L72010011070626380", OWNER="<NON_ROOT_USER>", SYMLINK+="usb/thermal-printer"
Reference
이 문제에 관하여(부팅 시 Ubuntu Linux에서 USB 장치에 대한 사용자 읽기/쓰기 권한 부여), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/hola_soy_milk/granting-user-read-write-permissions-to-a-usb-device-in-ubuntu-linux-on-boot-29b2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)