특정 그룹 권한으로 애플리케이션을 실행하는 방법은 무엇입니까?

특정 그룹 권한으로 애플리케이션을 실행하는 방법은 무엇입니까?

내 PC가 다음을 통해 통신할 수 있는 3D 프린터가 있습니다 /dev/ttyACM0.

crw-rw---- 1 root uucp 166,  0 16 nov 14:58 ttyACM0

3D 인쇄 애플리케이션이 repetierHost작동하려면 이 장치에 대한 읽기/쓰기 액세스 권한이 필요합니다. 아무 준비 없이 '순진하게' 애플리케이션을 시작하면 애플리케이션이 작동하지 않습니다.

응용 프로그램을 루트로 실행하면 작동합니다.

(보조) group 을 사용하여 일반 사용자로 애플리케이션을 실행해도 uucp여전히 작동하지 않습니다.

/dev/ttyACM0권한 플래그를 지정 rw-rw-rw-하고 일반 사용자로 실행하면 작동합니다.

(왜) 그룹을 통한 허락이 uucp신청에 전달되지 않나요?

단순히 파일 권한을 부여하는 것에 반대하지는 않지만 rw-rw-rw-장치 연결이 끊어졌다가 다시 연결되면 재설정됩니다. 그룹 을 통해 이 작업을 수행할 수 없는 경우 uucp권한 플래그를 지속적으로 변경하려면 어떻게 해야 합니까?

답변1

repetierHost응용 프로그램 그룹을 설정 uucp한 다음 SGID 비트를 설정합니다(스크립트가 아닌 실제 바이너리인 경우).

chgrp uucp repetierHost
chmod g+s repetierHost

repetierHost가 스크립트인 경우 이를 이동하여 호출하는 repetierHost.sh작은 C 프로그래밍 래퍼를 작성할 수 있습니다.repetierHostrepetierHost.sh

예:

#include <stdlib.h>

int 
main(int argc, char *argv[])
{
    system("/path/to/repetierHost.sh");
}

답변2

나는 찾았다sg내가 필요로 했던 바로 그 명령인 것 같습니다.

sg- 다른 그룹 ID로 명령을 실행합니다.

그래서 다음과 같이 최소한의 래퍼를 작성합니다.

#!/bin/bash
sg uucp /usr/bin/repetierHost.sh

이것은 완벽하게 작동합니다.

관련 정보