사용자에게 프로세스 UID 및 GID를 전환할 수 있는 권한 부여

사용자에게 프로세스 UID 및 GID를 전환할 수 있는 권한 부여

다른 사용자의 자격 증명으로 실행되는 작업자 프로세스를 만드는 응용 프로그램을 작성 중입니다. 프로그램은 루트에서 실행됩니다. 그러나 권한이 낮은 계정에서 실행하고 싶습니다.

생성된 프로세스에 UID, GID를 할당할 수 있는 권한을 사용자 계정에 부여할 수 있는 방법이 있습니까?

즉, 특정 시스템 호출에 대한 사용자 권한을 제한/부여하는 방법이 있습니까? 감사해요!

답변1

프로세스에 UID를 변경할 수 있는 권한을 부여하는 것은 UID를 루트로만 변경할 수 있으므로 루트로 실행할 수 있는 권한을 부여하는 것과 동일합니다. 그러니 그렇게 한다고 해도 아무런 유익이 없을 것입니다.

프로그램이 속아서 루트로서 예상치 못한 작업을 수행할 수 있는 위험을 줄임으로써 이 설정을 더욱 안전하게 만들 수 있습니다. 이는 전체 손상의 영향을 줄이지는 않지만(공격자가 프로그램에서 임의의 코드를 실행하도록 할 수 있는 경우), 부분 손상(공격자가 프로그램이 다음과 같은 특정 작업을 수행하도록 설득할 수 있는 경우)의 영향은 줄어듭니다. 읽은 대로 파일을 가져와 표시합니다. 위험을 줄이려면 프로그램이 루트로 실행되는 시간을 줄이십시오. 전용 사용자로 실행하되 실제 UID는 0으로 설정하세요. 프로그램에 루트가 필요한 경우 일시적으로 유효 UID를 0으로 전환한 다음 다시 되돌립니다.

사용자 ID는 각 스레드가 아닌 전체 프로세스에 대한 것이기 때문에 다중 스레드 프로그램에서는 실용적이지 않습니다.

더 나은 견고성과 보안을 위해 권한 분리를 구현합니다. 즉, 프로그램을 두 개의 프로세스로 분할하여 하나는 루트로 실행되고 다른 하나는 전용 사용자로 실행됩니다. 루트로 실행되는 프로세스는 가능한 한 적은 작업을 수행해야 합니다. 다른 프로세스의 요청을 수락하고 가능한 경우 유효성을 검사한 다음 실행합니다. 그러면 다른 프로세스에 오류가 있더라도 최대 유효한 요청만 만들 수 있습니다.

간단한 요구 사항의 경우 루트로 실행되는 프로그램을 작성하는 대신 sudo 규칙을 사용하여 기본 프로그램이 세 번째 사용자로 명령을 실행하도록 직접 허용할 수 있습니다. 유효성 검사를 수행하기 위해 중간 루트 프로그램에 의존하는 대신 sudo 규칙에 유효성 검사를 포함할 수 있습니다.

myapp_user ALL = (ALL:ALL) validate_and_run

이를 통해 myapp_user모든 사용자로 명령을 실행할 수 있지만 명령은 validate_and_run인수와 함께 실행되어야 합니다.

관련 정보