fakeroot를 사용하여 권한을 변경할 때 문제가 발생합니다.

fakeroot를 사용하여 권한을 변경할 때 문제가 발생합니다.

chmodrun 명령을 사용할 때 왜 사용자 권한이 변경되지 않는지 이해할 수 없습니다 fakeroot.

처음에 파일에는 다음과 같은 권한이 있습니다.

-rwxr-xr-x  a.txt*

chmod를 사용하여 파일의 권한을 변경하려고 하면 정상적으로 작동합니다.

chmod 111 a.txt

---x--x--x  a.txt*

같이 실행해 보니 fakeroot별 효과가 없는 것 같습니다. 그룹 및 다른 사용자에 대한 권한은 올바르게 설정되지만 사용자에 대한 권한은 올바르게 설정되지 않습니다. chmod명령의 첫 번째 값 에 관계없이 읽기 및 쓰기 권한이 설정됩니다.

fakeroot chmod 111 a.txt

-rwx--x--x  a.txt*

내가 뭐 놓친 거 없니?

답변1

Fakeroot는 모든 파일 메타데이터 변경을 수행하지 않으며 이것이 핵심입니다. 즉, Fakeroot는 그 아래에서 실행되는 프로그램인 척만 합니다. Fakeroot는 소유자 변경과 같이 수행할 수 없는 변경 작업을 수행하지 않습니다. 또한 실패를 유발할 수 있는 변경도 수행하지 않습니다. 예를 들어, 루트는 권한에 관계없이 항상 파일을 열 수 있으므로 루트로 실행하면 다음 코드가 성공합니다.

chmod 111 a.txt
cp a.txt b.txt

그러나 루트가 아닌 사용자로 실행하면 cp읽을 수 없기 때문에 실패합니다 a.txt. 이를 방지하기 위해 chmodfakeroot에서 사용자의 권한이 제거되지 않습니다.

Fakeroot는 실행 중인 프로그램을 변경하는 척합니다.

$ stat -c "Before: %A" a.txt; fakeroot sh -c 'chmod 111 a.txt; stat -c "In fakeroot: %A" a.txt'; stat -c "After: %A" a.txt
Before: -rwx--x--x
In fakeroot: ---x--x--x
After: -rwx--x--x

일반적으로 fakeroot 내부에서 수행된 파일 메타데이터 변경은 fakeroot 호출 후에도 유지된다는 보장이 없습니다. 그게 요점입니다. 메타데이터 변경 사항과 변경된 메타데이터에 대해 수행하려는 작업(예: 아카이브 패키징)을 모두 수행하는 fakeroot 호출을 만듭니다.

답변2

fakeroot이는 루트 위장 기능을 구현하는 데 필요한 특이한 점입니다 .코드 주석에 문서화됨:

파일에 쓸 수 없는 경우에도 루트는 파일 소유자에 관계없이 파일에 쓸 수 있습니다. 우리가 fakeroot라면 이를 속이는 유일한 방법은 실제 사용자(fakeroot를 시작한 사용자)가 항상 파일을 쓰기, 읽기 가능하게 만드는 것입니다. 디렉토리의 exec 비트도 적용됩니다.

따라서 내부 상태에서 요청된 실제 권한은 fakeroot항상 설정되고 기록됩니다(이 옵션을 사용하여 이를 파일에 저장할 수 있으며 결과 파일은 사람이 읽을 수 있습니다). 실제로,u=rwx-s

chmod 155 a.txt
fakeroot chmod 111 a.txt

711권한이 있는 파일이 생성됩니다 !

관련 정보