"프로세스에 슈퍼유저 권한이 있습니다"는 무엇을 의미합니까?

"프로세스에 슈퍼유저 권한이 있습니다"는 무엇을 의미합니까?

APUE에서

  1. 프로세스에 수퍼유저 권한이 있는 경우 setuid 함수는 실제 사용자 ID, 유효 사용자 ID 및 저장된 set-user-ID를 uid로 설정합니다.
  2. 프로세스에 수퍼유저 권한이 없지만 uid가 실제 사용자 ID 또는 저장된 set-user-ID와 동일한 경우 setuid는 유효 사용자 ID만 uid로 설정합니다. 실제 사용자 ID와 저장된 세트 사용자 ID는 변경되지 않습니다.
  3. 두 조건 모두 참이 아니면 errno가 EPERM으로 설정되고 -1이 반환됩니다.

"프로세스에 슈퍼유저 권한이 있습니다"는 무엇을 의미합니까?

이는 프로세스의 실제 사용자 ID가 0, 즉 루트라는 뜻인가요?

이는 프로세스의 유효 사용자 ID가 0, 즉 루트라는 뜻인가요?

감사해요.

답변1

POSIX에서 프로세스에 슈퍼유저 권한이 있는 경우효과적인사용자 ID는 0입니다.

(일부 Unix 스타일 시스템에는 다른 메커니즘이 있습니다. 예를 들어 기본 액세스 제어 시스템도 기능을 고려하는 Linux에서는 루트 유효 사용자로 실행되지만 기능이 없으므로 별로 할 일이 없는 setuid 바이너리를 생성할 수 있습니다. . 보다setuid맨페이지.)

아푸에지정된 동작 설명setuid. 컨텍스트는 사용자 ID 설정 형식으로 제공됩니다.exec: 실행 파일에 setuid이 비트가 설정되어 있고 해당 파일 시스템이 비활성화되지 않고 마운트된 경우 setuid이를 실행하면 exec유효 사용자가 파일 소유자이고 실제 사용자와 저장된 사용자가 호출 사용자인 프로세스가 생성됩니다.

유효한 루트 사용자로 호출 되면 setuid모든 사용자 ID가 대체됩니다. 그렇지 않으면 유효한 ID만 대체됩니다. 이것은 결국 혼란스럽습니다... 이 동작의 이유는 POSIX 사양의 이론적 근거에 나와 있습니다. login그리고 su취소할 수 없는 방식으로 사용자 ID를 변경할 수 있는 기능이 필요하며 이를 수행하는 유일한 방법은 모든 ID를 바꾸는 것입니다. ID.

관련 정보