방금 첫 번째 버전을 완성했어요리눅스 커널 모듈C언어로 작성했습니다. 이 모듈은 /dev/wn0
3개의 LED 조명이 있는 USB 장치를 제어하는 장치 파일( )을 생성합니다 . 예를 들어 루트로 실행하면 다음과 같이 할 수 있습니다.
echo "#ff0000" >/dev/wn0
...장치가 밝은 빨간색으로 빛납니다.
내 문제는 권한이 없는 사용자가 (데이터를 기록하여) 장치에 액세스할 수 있기를 원한다는 것입니다 /dev/wn0
. 이를 수행하는 표준 방법이 있습니까? 파일에 대한 권한을 변경하는 것만큼 간단합니까 /dev/wn0
? 이로 인해 보안 문제가 발생합니까?
답변1
글쎄, 나는 몇 가지 가능성을 본다:
가장 빠른 방법은 POSIX 권한 및 소유권의 요점입니다. 누군가가 읽고 쓸 수 있기를 원하면 이에 따라 권한을 설정하십시오. 이 사람들을 그룹에 넣은 다음 장치 소유권을 해당 그룹으로 변경하고 그룹에 쓰기 권한을 부여하면 됩니다. 서버가 관리되는 경우 이를 규칙에 넣어야 할 수도 있습니다
udev
. 이것이 사용자가 블루투스를 사용할 수 있도록 하는 bluez와 같은 일부 도구의 기능입니다. 또는 "ConsoleKit"을 사용하지 않는 한 적어도 내 배포판에서 사용되는 방법입니다./dev
udev
장비가 간단하고 누구나 문제 없이 사용할 수 있다면 누구나 쓰게 할 수 있습니다.
장치에 쓸 수 있는 일부 사용자로 시작하고 장치를 가져와 UID를 변경하여 권한을 포기한 다음 TCP 등을 통해 모든 사용자의 요청을 처리하는 데몬을 작성합니다.
장치에 쓰기 위한 작은 바이너리를 작성합니다. 즉,
setuid
일부 사용자는 장치에 쓰고 사용자가 이를 사용하여 장치에 쓰도록 할 수 있습니다. 그것이 하는 일입니다 . 허용되는 경우 일반 사용자가 파일 시스템을 마운트 할 수 있도록 루트mount
입니다 .setuid
/etc/fstab
아무 것도 생성되지 않습니다.추가의이러한 사용자가 장치를 사용할 수 있다는 데 동의하는 한 보안 문제. 물론, 장치에 접근할 수 있는 사람은 누구나 모듈의 취약점을 악용할 수 있지만, 이는 사람들에게 접근 권한을 부여하는 방법에 관계없이 가능합니다. 데몬을 작성하면 악용될 수 있습니다. 어쩌면 단순하게 유지하고 코드가 취약하지 않은지 확인하는 것이 더 나을 수도 있습니다.
이를 수행하는 단일 표준 방법은 없다고 말하고 싶습니다. UNIX 시스템의 특정 부분에서 이를 수행하는 방법이 있으며 각 부분은 해결하는 문제에 대해 가장 편리한 방식으로 수행합니다.