지금까지 내가 수집 할 수있는 것은 fakeroot가 압축을 풀거나 tar 할 때 루트가되어야하는 파일에 소유권을 부여하는 데 사용된다는 것입니다. 내 질문은 왜 chown으로 그렇게 할 수 없습니까?
chown
적어도 루트 사용자가 아닌으로 만 할 수 있기 때문입니다 . 루트로 실행하는 경우에는 필요하지 않습니다 fakeroot
. 요점은 fakeroot
루트로 실행될 것으로 예상되는 프로그램을 일반 사용자로 실행하고 루트 요구 작업이 성공한 것처럼 만드는 것입니다.
패키지를 빌드 할 때 일반적으로 사용되므로 설치중인 패키지의 설치 프로세스가 오류없이 진행될 수 있습니다 ( chown root:root
또는 install -o root
등을 실행하는 경우에도 ). fakeroot
파일을 제공하는 것처럼 위장한 가짜 소유권을 기억하므로 소유권을 살펴 보는 후속 작업에서 실제 소유권 대신이를 볼 수 있습니다. 이것은 tar
예를 들어 루트가 소유 한 파일을 저장하는 후속 실행을 허용 합니다.
Linux에서 fakeroot는 원하지 않는 권한 에스컬레이션을 어떻게 중지합니까? fakeroot가 tar가 root가 소유 한 파일을 만들도록 속일 수 있다면 SUID와 비슷한 것을 시도해보십시오.
fakeroot
tar
아무것도 하지 않더라도 빌드를 호스팅하는 시스템에 이러한 변경 사항을 적용하지 않고 빌드하려는 변경 사항을 유지합니다. fakeroot
root와 suid가 소유 한 파일을 포함하는 tarball을 생성 할 필요가 없습니다 . 바이너리가있는 경우 일반 사용자로을 evilbinary
실행 tar cf evil.tar --mode=4755 --owner=root --group=root evilbinary
하면 evilbinary
root 소유의 su 및 suid를 포함하는 tarball이 생성됩니다 . 그러나 루트로 그렇게하지 않으면 해당 tarball을 추출하고 해당 권한을 보존 할 수 없습니다. 여기에는 권한 에스컬레이션이 없습니다. fakeroot
특권입니다 드-에스컬레이션 도구 : 일반 사용자로 빌드를 실행할 수 있으며, 루트로 실행했을 때의 빌드 효과를 유지하여 나중에 해당 효과를 재생할 수 있습니다. "실제로"효과를 적용하려면 항상 루트 권한이 필요합니다. fakeroot
그것들을 얻는 방법을 제공하지 않습니다.
fakeroot
보다 자세한 사용법을 이해하려면 일반적인 배포 빌드에는 다음과 같은 작업이 포함된다는 점을 고려하십시오.
- 루트가 소유 한 설치 파일
- ...
- 루트가 소유 한 파일을 아카이브하여 압축을 풀면 루트가 소유하게됩니다.
루트가 아닌 경우 첫 번째 부분은 분명히 실패합니다. 그러나에서 fakeroot
일반 사용자로 실행 하면 프로세스가
- 루트가 소유 한 파일 설치 — 실패하지만
fakeroot
성공한 척 하고 변경된 소유권을 기억합니다.
- ...
- 루트가 소유하고있는 파일을 아카이브합니다.
tar
(또는 어떤 아카이버가 사용 중인지) 파일 소유권이 무엇인지 시스템에 묻 으면 fakeroot
이전에 기록 된 소유권과 일치하도록 응답이 변경됩니다.
따라서 루트가 아닌 패키지 빌드를 실행할 수 있으며 실제로 루트로 실행하는 경우와 동일한 결과를 얻을 수 있습니다. 사용하는 fakeroot
것이 더 안전합니다 : 시스템은 여전히 사용자가 할 수없는 일을 할 수 없으므로, 악성 설치 프로세스는 파일을 건드리지 않고 시스템을 손상시킬 수 없습니다.
데비안에서는 빌드 도구가 더 이상 필요하지 않도록 개선되었으며, 없이 패키지를 빌드fakeroot
할 수 있습니다 . 이것은 지시문 으로 dpkg
직접 지원됩니다 Rules-Requires-Root
(참조 rootless-builds.txt
).
fakeroot
루트로 실행 의 목적 과 보안 측면 을 이해하려면 패키징의 목적을 고려하는 것이 도움이 될 수 있습니다. 시스템 전체에서 사용하기 위해 소스에서 소프트웨어를 설치할 때 다음과 같이 진행하십시오.
- 소프트웨어 빌드 (권한없이 수행 가능)
- 소프트웨어 설치 (루트로 또는 최소한 사용자가 적절한 시스템 위치에 쓸 수 있도록해야 함)
소프트웨어를 패키징하면 두 번째 부분이 지연됩니다. 그러나 그렇게하려면 소프트웨어를 시스템이 아닌 패키지에 "설치"해야합니다. 따라서 소프트웨어를 패키지하면 프로세스가 다음과 같이됩니다.
- 특별한 권한없이 소프트웨어 구축
- 소프트웨어를 설치하는 척 (특별한 권한이없는 경우)
- 소프트웨어 설치를 패키지로 캡처 (ditto)
- 패키지를 사용 가능하게하십시오 (ditto)
이제 사용자는 루트 (또는 적절한 위치에 쓸 수있는 적절한 권한을 가진 사용자)로 수행해야하는 패키지를 설치하여 프로세스를 완료합니다. 지연된 특권 프로세스가 실현되는 곳이며 특수 특권이 필요한 프로세스의 유일한 부분입니다.
fakeroot
루트로 실행하지 않고 소프트웨어 설치 프로세스를 실행하고 동작을 캡처 할 수 있도록함으로써 위의 2 단계와 3 단계를 도와줍니다.