为了运行一些测试,我想撤销文件夹的写入权限。这是一个最小的例子:
$ 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
hack 加载一个小型共享库,该库覆盖了一些库函数,例如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