공유 객체를 강제로 루트로 실행하거나 공유 객체의 호출자가 이들 중 하나가 아닌 경우 setuid 또는 setgid를 사용할 수 있습니까?

공유 객체를 강제로 루트로 실행하거나 공유 객체의 호출자가 이들 중 하나가 아닌 경우 setuid 또는 setgid를 사용할 수 있습니까?

내 애플리케이션에는 /dev/input/event*에 대한 쓰기 권한이 필요합니다. 내 Ubuntu 시스템에서 /dev/input/event*는 root:input에 속합니다. sudo를 사용하면 내 애플리케이션이 제대로 실행되지만 이를 방지하려고 합니다. 그래서 내 애플리케이션을 "입력" 그룹으로 설정하고 setgid를 사용하여 실행했습니다. 하지만 이러한 상황을 감지하고 비활성화할 수 있는 것은 크로스 플랫폼 애플리케이션(GTK)입니다. (말 그대로 의미하는 바는 GTK가 setgid 또는 setuid로 실행하려고 시도하고 있음을 감지했지만 이를 허용하지 않는다는 것입니다.) 그러나 실제로 /dev/input/event*에 기록하려는 것은 .so 파일입니다. 이 .so(상태가 양호하고 자주 변경되지 않음)가 루트로 실행되도록 허용하면 기분이 훨씬 나아질 것입니다. 또는 .so 파일을 setgid로 실행해야 하는 경우 GTK 환경이 이를 감지하지 못할 수도 있습니다. .so 파일에 특수 비트를 설정하려고 시도했지만 응용 프로그램을 실행할 때 /dev/input/event*에 동일한 권한 문제가 있습니다.

답변1

권한은 실행 중인 프로세스에 로드된 개체 파일별로 추적되는 것이 아니라 프로세스별로(실제로 Linux에서는 스레드별로) 추적됩니다. 따라서 .so파일에 서로 다른 권한을 연결할 수 없습니다.

~처럼제안통과앤디 달튼, 이를 처리하는 일반적인 방법은 작은 도우미 바이너리를 갖고 적절한 권한이 있는지 확인하는 것입니다(권한 사용 또는능력, 등. ).

udev또 다른 가능성은 사용자 또는 콘솔의 모든 사람에게 이벤트 장치에 대한 권한을 부여하는 규칙을 추가하는 것입니다 .

관련 정보