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
실제로 무슨 일이 일어나든 사용자가 할 수 있는 효과만
마침내,
보안 측면
fakeroot
setuid가 아닌 일반 프로그램입니다. 사용자의 권한을 강화하거나 시스템 보안을 저하시키지 않습니다.
첫 번째 블록에서 다음 단어를 확인하세요.나타나다. 발췌된 예시에서는 joost
사용자를 본인이라고 생각하세요. 마지막 섹션에는 fakeroot
어떤 방식으로든 권한을 높이거나 보안을 저하시키지 않는다는 명확한 설명이 있습니다 . 특히 이는 실제 작동 방식이 변경되지 않음을 의미합니다 su
.