当我使用chmod运行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*我是不是遗漏了什么?
发布于 2019-08-29 11:04:13
Fakeroot没有执行所有的文件元数据更改,这就是重点:它只是假装在它下面运行的程序。Fakeroot不执行它无法执行的更改,例如更改所有者。它也不会执行会导致故障的改变。例如,以下代码在以根用户身份运行时会成功,因为root始终可以打开文件,而不管权限如何:
chmod 111 a.txt
cp a.txt b.txt但是当以非根用户的身份运行时,cp会失败,因为它无法读取a.txt。为了避免这种情况,fakeroot下的chmod不会从用户那里删除权限。
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调用,它既执行元数据更改,也执行您希望对更改的元数据执行的任何操作(例如打包存档)。
发布于 2019-08-29 10:58:13
这是fakeroot的一个怪癖,实现它的根伪装功能所必需的;作为记录在代码注释中:
如果一个文件是不可写的,那么root仍然可以写入它(不管是谁拥有该文件)。如果我们是fakeroot,唯一的伪造方法是始终使文件可写、可读等为真正的用户(谁启动fakeroot)。也适用于目录的exec位。
因此,fakeroot总是设置u=rwx,并记录在其内部状态下请求的真正权限(您可以将其保存到带有-s选项的文件中;生成的文件是人类可读的)。事实上,
chmod 155 a.txt
fakeroot chmod 111 a.txt将产生一个具有711权限的文件!
https://unix.stackexchange.com/questions/538045
复制相似问题