该chown
实用程序的 POSIX 规范在其基本原理部分中提到了有关chown user:group
语法(以前的chown user.group
)(强调我的):
POSIX.1-2008 的这一卷中包含了 4.3 BSD 指定所有者和组的方法,因为:
- 在某些情况下,使用 chgrp 和 chown(仅更改用户 ID)实用程序无法实现所需的结束条件。(如果当前所有者不是所需组的成员,并且所需所有者不是当前组的成员,则除非所有者和组同时更改,否则 chown() 函数可能会失败。)
我认为user:group
语法是一个方便的东西。现在,上述暗示有事情可以做chown user:group
,你不能用chgrp group; chown user
现在那个文本对我来说没有意义。在 4.3BSD 中,只有 root 可以更改文件的所有者,因此在任何情况下他都可以做什么没有限制。
SysV 和其他一些系统允许(或曾经允许)文件的所有者将文件的用户和组更改为任何内容,但即使在这些系统中,上面的文本对我来说也没有意义。好的,如果有人做了 a chown someone-else the-file
,chgrp something-else the-file
之后就不能再做,因为他不再是文件的所有者,但是没有什么可以阻止他/她做第chgrp
一个(保持文件的所有者)和chown
之后的事情,这不是上面的文字正是说。
我不明白什么和所需的所有者不是当前组的成员与问题有什么关系。
那么在什么情况下chown() 函数可能会失败,除非所有者和组同时更改,以及在什么系统上?
我们有基于 RH 的 Linux 镜像;我必须“应用”一些“特殊档案”,以便将它们升级到我们产品的最新开发版本。
创建档案的人认为在我们的基础映像中,某些权限是错误的;所以我们被告知要跑
sudo chgrp -R nobody /whatever
Run Code Online (Sandbox Code Playgroud)
我们做到了;后来,当我们的应用程序运行时,出现了一些晦涩的问题。
我后来发现:调用chgrp将清除/whatever 中二进制文件的 setuid 位信息。
实际问题是:我们的一些二进制文件必须设置 setuid 位才能正常运行。
长话短说:有没有办法在不杀死我的 setuid 位的情况下运行“chgrp”命令?
我只是在本地 Ubuntu 上运行了以下命令;导致相同的结果:
mkdir sticky
cd sticky/
touch blub
chmod 4755 blub
ls -al blub
Run Code Online (Sandbox Code Playgroud)
--> 显示红色背景的文件名 --> 所以,是的,setuid
chgrp -R myuser .
ls -al blub
Run Code Online (Sandbox Code Playgroud)
--> 显示没有红色背景的文件名 --> setuid 消失了