권한이 없는 사용자 계정에서 실행되는 사용자 공간 애플리케이션에 장치 파일을 노출하는 표준 방법은 무엇입니까?

권한이 없는 사용자 계정에서 실행되는 사용자 공간 애플리케이션에 장치 파일을 노출하는 표준 방법은 무엇입니까?

방금 첫 번째 버전을 완성했어요리눅스 커널 모듈C언어로 작성했습니다. 이 모듈은 /dev/wn03개의 LED 조명이 있는 USB 장치를 제어하는 ​​장치 파일( )을 생성합니다 . 예를 들어 루트로 실행하면 다음과 같이 할 수 있습니다.

echo "#ff0000" >/dev/wn0

...장치가 밝은 빨간색으로 빛납니다.

내 문제는 권한이 없는 사용자가 (데이터를 기록하여) 장치에 액세스할 수 있기를 원한다는 것입니다 /dev/wn0. 이를 수행하는 표준 방법이 있습니까? 파일에 대한 권한을 변경하는 것만큼 간단합니까 /dev/wn0? 이로 인해 보안 문제가 발생합니까?

답변1

글쎄, 나는 몇 가지 가능성을 본다:

  • 가장 빠른 방법은 POSIX 권한 및 소유권의 요점입니다. 누군가가 읽고 쓸 수 있기를 원하면 이에 따라 권한을 설정하십시오. 이 사람들을 그룹에 넣은 다음 장치 소유권을 해당 그룹으로 변경하고 그룹에 쓰기 권한을 부여하면 됩니다. 서버가 관리되는 경우 이를 규칙에 넣어야 할 수도 있습니다 udev. 이것이 사용자가 블루투스를 사용할 수 있도록 하는 bluez와 같은 일부 도구의 기능입니다. 또는 "ConsoleKit"을 사용하지 않는 한 적어도 내 배포판에서 사용되는 방법입니다./devudev

  • 장비가 간단하고 누구나 문제 없이 사용할 수 있다면 누구나 쓰게 할 수 있습니다.

  • 장치에 쓸 수 있는 일부 사용자로 시작하고 장치를 가져와 UID를 변경하여 권한을 포기한 다음 TCP 등을 통해 모든 사용자의 요청을 처리하는 데몬을 작성합니다.

  • 장치에 쓰기 위한 작은 바이너리를 작성합니다. 즉, setuid일부 사용자는 장치에 쓰고 사용자가 이를 사용하여 장치에 쓰도록 할 수 있습니다. 그것이 하는 일입니다 . 허용되는 경우 일반 사용자가 파일 시스템을 마운트 할 수 있도록 루트 mount입니다 .setuid/etc/fstab

아무 것도 생성되지 않습니다.추가의이러한 사용자가 장치를 사용할 수 있다는 데 동의하는 한 보안 문제. 물론, 장치에 접근할 수 있는 사람은 누구나 모듈의 취약점을 악용할 수 있지만, 이는 사람들에게 접근 권한을 부여하는 방법에 관계없이 가능합니다. 데몬을 작성하면 악용될 수 있습니다. 어쩌면 단순하게 유지하고 코드가 취약하지 않은지 확인하는 것이 더 나을 수도 있습니다.

이를 수행하는 단일 표준 방법은 없다고 말하고 싶습니다. UNIX 시스템의 특정 부분에서 이를 수행하는 방법이 있으며 각 부분은 해결하는 문제에 대해 가장 편리한 방식으로 수행합니다.

관련 정보