특정 프로그램에서만 장치에 액세스할 수 있도록 할 수 있습니까?

특정 프로그램에서만 장치에 액세스할 수 있도록 할 수 있습니까?

액세스하려면 두 개의 프로그램(예: 경로로 표시됨)만 필요한 장치(비디오 카드)가 있습니다 /usr/bin/myprogram.

장치에 대한 파일 /dev(예 /dev/mydev1: )이 있지만 필요한 경우 다른 참조(버스 ID, 공급업체/제품 ID 등)를 사용할 수도 있습니다.

udev내가 지정한 프로그램 외에는 어떤 프로그램도 액세스하지 못하도록 하려면 규칙 과 같이 어떻게 해야 합니까 ?

답변1

전통적인 UNIX 솔루션은 시스템 그룹(예: groupadd -r vidcard)을 생성한 다음 루트와 해당 그룹의 구성원만 액세스할 수 있도록 장치의 권한을 설정하는 것입니다. Linux에서는 /dev부팅할 때마다 처음부터 다시 생성되는 udev 규칙의 형태를 취합니다 . 규칙은 다음과 같습니다.

 KERNEL=="mydev[0-9]*", MODE="0660", GROUP="vidcard"

마지막으로 액세스가 필요한 프로그램은 그룹 소유자를 vidcardsetgid 비트로 설정해야 합니다. 그래서:

chown root:vidcard /usr/bin/myprogram
chmod 2711 /usr/bin/myprogram  # this results in permissions -rwx--s--x

일반 사용자는아니요vidcard그룹의 멤버십을 부여받습니다 . 회원 자격을 얻을 수 있는 유일한 방법은 공직에 출마하는 것입니다 myprogram.

myprogram사용자가 선택한 다른 프로그램을 실행할 수 있는 "쉘 실행" 기능이나 다른 방법이 있는 경우 , 해당 사용자가 부여한 추가 권한을 제거하는 단계를 수행하도록 프로그래밍 vidcard되지 않은 한 해당 쉘/다른 프로그램은 그룹 멤버십을 상속할 수 myprogram있습니다. 다른 프로그램을 시작하기 전에 gid 비트를 설정하십시오( setregid()Linux의 경우).

관련 정보