파일에 액세스할 때 유효 또는 실제 uid 루트가 있는 프로세스가 여전히 파일 권한 비트에 의해 바인딩되어 있습니까?

파일에 액세스할 때 유효 또는 실제 uid 루트가 있는 프로세스가 여전히 파일 권한 비트에 의해 바인딩되어 있습니까?

디디 코헨의 답변 역량 기반 보안인가요 sudo?su

Unix와 Linux에는 표준 사용자와 수퍼유저(종종 루트라고 함)라는 두 가지 수준의 권한이 있습니다.

표준 사용자는 소유권, 그룹 멤버십 또는 권한을 통해 액세스할 수 있는 파일에만 액세스할 수 있습니다.전방십자인대.

수퍼유저는 모든 것을 갖고 있으며(이 답변에서는 SELinux와 같은 것을 무시합니다) 제한이 없습니다.사용자 공간에서.

프로세스의 유효 또는 실제 uid가 루트이고 파일에 액세스하려고 하면 여전히 파일의 권한 비트에 묶여 있습니까? 아니면 인용문에서 알 수 있듯이(제가 올바르게 이해한 경우) euid 루트를 사용하면 파일의 권한 비트가 무시됩니까?

예를 들어,

  • 소유자가 루트가 아니고 해당 그룹이 프로세스의 유효 또는 보충 그룹과 일치하지 않는 경우 파일의 "기타" 권한 비트가 프로세스에 적용됩니까? 파일이 다른 사람의 읽기, 쓰기 또는 실행을 허용하지 않는 경우에도 프로세스는 여전히 파일을 읽고 쓰거나 실행할 수 있습니까?

  • 파일 소유자가 루트이고 "사용자" 파일 권한 비트가 읽기, 쓰기 또는 실행을 허용하지 않는 경우에도 프로세스가 파일을 읽고 쓰거나 실행할 수 있습니까?

유효 또는 실제 uid가 루트인 프로세스가 파일에 액세스할 수 없도록 만드는 것이 가능합니까? 예를 들어, 파일의 권한 비트를 변경함으로써?

답변1

전통적인 유닉스에서는 root무엇이든 할 수 있다.

그러나 최신 Linux(및 아마도 다른 Unix)에서는 이제 작동합니다. 여기서 설명하는 기능은 CAP_DAC_OVERRIDE이 기능을 사용하는 모든 프로세스가 파일 권한을 무시한다는 것입니다(예외 x, 다른 답변 참조).

대부분의 시스템은 프로세스가 변경될 때 이전 버전과의 호환성 모드로 설정됩니다.효과적인사용자 ID는 루트이며 모든 기능을 얻게 됩니다.효과적인사용자 ID가 루트에서 변경되면 기능이 손실됩니다.

루트가 아닌 프로세스에 특정 기능을 전달하는 데 사용할 수 있는 기능 삭제를 방지하는 방법이 있습니다. 루트가 되지 않고도 기능을 얻을 수 있는 방법도 있습니다. 이는 프로세스가 루트가 되는 방식과 유사하게 작동합니다.

중요한 것은 유효한 사용자 ID입니다. 실제 사용자 ID와 저장된 사용자 ID를 사용하면 이 ID를 다른 ID 중 하나(예: 유효한 사용자 ID)에만 복사할 수 있습니다.

SE_linux 및 네임스페이스/cgroups는 루트가 수행할 수 있는 작업을 제한할 수 있습니다.

답변2

루트는 권한 비트에 관계없이 모든 것에 액세스할 수 있습니다. 한 가지 예외는 실행 비트가 설정되지 않고 SELinux가 제한을 설정하는 경우 루트 프로세스가 파일 실행을 시도하지 않는다는 것입니다.

그러나 루트는 여전히 필요한 실행 비트를 설정하고 SELinux 규칙을 변경할 수 있으므로 루트가 파일에 액세스하는 것을 막을 수는 없습니다.

편집하다

"인간 경로 분석"에서

기존 UNIX 시스템에서는 수퍼유저(루트, 사용자 ID 0)가 모든 권한을 가지며 파일에 액세스할 때 모든 권한 제한을 우회할 수 있습니다.

답변3

프로세스에유효하거나 실제uid가 루트이고 파일에 액세스하려고 합니다...

파일 시스템 액세스의 경우 실제 UID가 아닌 유효 UID만 중요합니다. 권한 있는 UID를 보유하는 프로세스는 권한을 일시적으로 포기하기 위해 실제적이고 유효한 UID를 뒤섞을 수 있습니다.

# perl -MEnglish -e '$EUID = 65534; system "id"; system "cat /etc/shadow"'
uid=0(root) gid=0(root) euid=65534(nobody) groups=0(root)
cat: /etc/shadow: Permission denied

하지만 그 외에는 당신 말이 맞습니다. 권한이 있으면 권한 비트에 관계없이 파일에 액세스할 수 있습니다. (게다가 1비트라도 설정하지 않으면 파일 실행이 안되는데 x그건 정말 편의일 뿐입니다. 권한이 있으면 보통 파일을 복사해서 실행하거나 권한을 먼저 변경하면 됩니다.)

Linux에 대한 마지막 섹션을 참조하세요.매뉴얼 페이지path_resolution(7)("권한 확인 우회: 수퍼유저 및 기능") 또는POSIX의 텍스트(“4.5 파일 접근 권한”).

후자에 대한 힌트와 전자에 대한 간략한 설명과 마찬가지로 실제 권한 확인은 UID 그 이상일 수 있습니다. Linux에서는 실제로CAP_DAC_OVERRIDE능력(또는 CAP_DAC_READ_SEARCH그 이하로). 다른 시스템에 대해서는 자세히 모르겠습니다.

답변4

권한이 있는 사용자의 경우 x이 비트만 평가됩니다.

이는 슈퍼유저가 파일을 실행할 수 있도록 하려면 x최소한 1비트가 설정되어야 함을 의미합니다.

슈퍼유저의 다른 모든 권한은 무시됩니다.

관련 정보