首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用fakeroot更改权限问题

使用fakeroot更改权限问题
EN

Unix & Linux用户
提问于 2019-08-29 10:27:03
回答 2查看 1.5K关注 0票数 6

当我使用chmod运行fakeroot命令时,我不明白为什么用户的权限不会改变。

最初,该文件具有以下权限:

代码语言:javascript
复制
-rwxr-xr-x  a.txt*

当我试图使用chmod更改文件的权限时,效果很好:

代码语言:javascript
复制
chmod 111 a.txt

---x--x--x  a.txt*

当我使用fakeroot运行它时,它似乎做得并不好。它正确设置组和其他权限,但不为用户设置权限。无论chmod命令中的第一个值是什么,都设置了读写权限。

代码语言:javascript
复制
fakeroot chmod 111 a.txt

-rwx--x--x  a.txt*

我是不是遗漏了什么?

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2019-08-29 11:04:13

Fakeroot没有执行所有的文件元数据更改,这就是重点:它只是假装在它下面运行的程序。Fakeroot不执行它无法执行的更改,例如更改所有者。它也不会执行会导致故障的改变。例如,以下代码在以根用户身份运行时会成功,因为root始终可以打开文件,而不管权限如何:

代码语言:javascript
复制
chmod 111 a.txt
cp a.txt b.txt

但是当以非根用户的身份运行时,cp会失败,因为它无法读取a.txt。为了避免这种情况,fakeroot下的chmod不会从用户那里删除权限。

Fakeroot确实假装为它正在运行的程序执行更改。

代码语言:javascript
复制
$ 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调用,它既执行元数据更改,也执行您希望对更改的元数据执行的任何操作(例如打包存档)。

票数 5
EN

Unix & Linux用户

发布于 2019-08-29 10:58:13

这是fakeroot的一个怪癖,实现它的根伪装功能所必需的;作为记录在代码注释中

如果一个文件是不可写的,那么root仍然可以写入它(不管是谁拥有该文件)。如果我们是fakeroot,唯一的伪造方法是始终使文件可写、可读等为真正的用户(谁启动fakeroot)。也适用于目录的exec位。

因此,fakeroot总是设置u=rwx,并记录在其内部状态下请求的真正权限(您可以将其保存到带有-s选项的文件中;生成的文件是人类可读的)。事实上,

代码语言:javascript
复制
chmod 155 a.txt
fakeroot chmod 111 a.txt

将产生一个具有711权限的文件!

票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/538045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档