su는 fakeroot를 어떻게 감지하나요?

su는 fakeroot를 어떻게 감지하나요?

su를 실행하면 대상 사용자의 비밀번호를 묻습니다. 루트로 실행하면 비밀번호를 묻지 않습니다. 하지만 fakeroot에서 실행하면 어떻게 비밀번호를 요청할 수 있나요? fakeroot를 사용하면 모든 프로그램이 사용자를 루트라고 생각하게 해야 하지 않나요? 내 프로그램의 경우 이를 수행하는 유일한 방법은 su를 실행하여 반환 코드를 확인하는 것입니다. 그런데 어떻게 합니까?

답변1

su아무것도 감지되지 않습니다.

에서 man fakeroot:

chmod(2)fakeroot는 파일 조작 라이브러리 함수(등)을 실제 라이브러리 함수의 효과를 시뮬레이션하는 함수 stat(2)(사용자가 실제로 루트인 경우) 로 대체하여 작동합니다 . 이러한 래퍼 함수는 공유 라이브러리 또는 플랫폼의 유사한 위치
에 있습니다 . /usr/lib/*/libfake‐root-\*.so공유 객체는 LD_PRELOAD동적 로더 메커니즘을 통해 로드됩니다. (바라보다 ld.so(8))

su, setuid 실행 파일로서 항상 루트로 실행되지만 상관하지 않습니다 1 LD_PRELOAD. 따라서 "일반" 프로그램은 루트로 실행되고 필요한 기능이 대체된다고 말하지만 su이러한 수정은 전혀 나타나지 않습니다. 그러니 su평소처럼 달리세요.


¹ 이는 끔찍한 보안 허점입니다. 원하는 작업을 수행하도록 포함된 라이브러리를 설정할 수 있으며 LD_PRELOAD, 실행할 수 있으면 자동으로 루트로 수행됩니다.어느setuid 실행 파일

답변2

fakeroot(참조)에 대한 문서가 man fakeroot이 질문에 답하는 것 같습니다.

설명하다 fakeroot파일 작업에 대한 루트 권한이 있는 것으로 보이는 환경에서 명령을 실행하십시오.

그리고,

joost실제로 무슨 일이 일어나든 사용자가 할 수 있는 효과만

마침내,

보안 측면 fakerootsetuid가 아닌 일반 프로그램입니다. 사용자의 권한을 강화하거나 시스템 보안을 저하시키지 않습니다.

첫 번째 블록에서 다음 단어를 확인하세요.나타나다. 발췌된 예시에서는 joost사용자를 본인이라고 생각하세요. 마지막 섹션에는 fakeroot어떤 방식으로든 권한을 높이거나 보안을 저하시키지 않는다는 명확한 설명이 있습니다 . 특히 이는 실제 작동 방식이 변경되지 않음을 의미합니다 su.

관련 정보