일부 테스트를 실행하기 위해 폴더에 대한 쓰기 권한을 취소하고 싶습니다. 다음은 최소한의 예입니다.
$ mkdir test
$ chmod a-w test
$ touch test/test || printf '%s\n' "write permissions successfully revoked"
touch: cannot touch 'test/test': Permission denied
write permissions successfully revoked
그러나 fakeroot로 실행하면 작동하지 않습니다.
$ fakeroot sh
# mkdir test
# chmod a-w test
# touch test/test || printf '%s\n' "write permissions successfully revoked"
# ls test
test
설명이 필요하다왜이것은 작동하지 않습니다. 예를 들어 다음 질문을 참조하십시오.권한 변경 관련 문제
하지만 내 질문은: 이 문제를 어떻게 해결할 수 있습니까? chmod
이 명령에 대해 fakeroot를 일시적으로 비활성화할 수 있습니까 ? 아니면 fakeroot 권한을 영구적으로 변경할 수 있나요?
답변1
fakeroot
등과 LD_PRELOAD
같은 일부 라이브러리 기능을 다루는 작은 공유 라이브러리를 로드하는 데 해킹이 사용되고 있습니다 chmod(2)
. chown(2)
보다ld.so(8)
자세한 내용은 맨페이지를 참조하세요(사이트에도 많은 예제가 있습니다).
LD_PRELOAD
환경 변수를 설정하지 않거나 빈 문자열로 설정하지 않고 명령을 실행하면 라이브러리가 로드되지 않습니다.
$ fakeroot sh
$ chown root:root fo.c
$ LD_PRELOAD= chown root:root fo.c
chown: changing ownership of 'fo.c': Operation not permitted