fakeroot環境を一時的に残す方法

fakeroot環境を一時的に残す方法

いくつかのテストを実行するためにフォルダへの書き込み権限を取り消したいと思います。以下は最小限の例です。

$ 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

関連情報