如果我不属于某个组,chmod 总是会取消设置目录上的 setgid 位

如果我不属于某个组,chmod 总是会取消设置目录上的 setgid 位

场景如下:我正在使用 Ubuntu Linux(如果重要的话,是 12.10),并且我有一个目录,其权限如下:

drwxrws--- paul www-data    myfolder/

您可以看到setgid位已设置。如果我更改此文件夹的任何权限(例如chmod o+x myfolder),它会取消设置setgid位。

根据chmod的手册页:

修改模式保留目录set-user-IDset-group-ID位,除非您明确指定其他内容。

在其他地方,它表示setgid如果文件组与用户的有效组 ID 不匹配,它将取消设置该位,但仅限于常规的文件(即,不是文件夹)。因此,由于我的组是paul而不是www-data,因此我预计如果是常规文件,上述情况就会发生myfolder/,但事实并非如此——它是一个目录。

所以要么是我理解错了手册,要么chmod就是没有遵守手册本身的说明。有人知道是哪一种吗?

答案1

在您引用的手册页的同一节中对此进行了解释chmod

SETUID 和 SETGID 位

[...]

这种行为依赖于取决于 政策和功能底层 chmod 系统调用. 如有疑问,请检查底层系统行为。

跟踪时chmod它尝试设置 setgid 位但底层chmod()系统调用会忽略它。

fchmodat(AT_FDCWD, "b", 02755)          = 0

如您所见,S_ISGID (02000)它是由chmod命令设置的,而不是由chmod() [here: fchmodat()] 系统调用设置的:

drwxr-xr-x 2 me notmygrp 16 Mar 19 12:37 b

因此,如果您不是该组的成员,则删除目录的 setgid 位同样适用。

相关内容