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