S
下面这个字母是什么意思?有问题的文件是一个文件夹。
我读这里大写字母S
可以表示该setgid
位在某个时间内处于活动状态二进制可执行文件。但这是一个文件夹。这是否仍然意味着该setgid
位已被激活?如果是这样,那意味着什么?
答案1
这意味着放入该文件夹中的任何文件都将属于该文件夹的所属组。
例如:假设您有一个名为“shared”的文件夹,属于用户“intrpc”和组“users”,并且您(作为用户“initrpc”)将一个文件放入其中。因此,该文件将属于用户“intrpc”和组“users”,而不管“initrpc”的主要组如何。
在大多数系统上,如果设置了目录的 set-group-ID 位,则新创建的子文件将继承与该目录相同的组,并且新创建的子目录将继承父目录的 set-group-ID 位。
你可以阅读相关内容这里。
为什么该字母是大写的(来自您提供的链接)?
如果组没有执行权限,则 setgid 无效。 setgid 在 ls 的输出中用小写“s”表示。如果没有影响,则用大写“S”表示。
答案2
大写的S是因为该目录没有该组的执行权限。在某种程度上,这表明一个“错误”,正如您所说:
新创建的子文件继承与目录相同的组,新创建的子目录继承父目录的set-group-ID位。
(来源:https://www.gnu.org/software/coreutils/manual/html_node/Directory-Setuid-and-Setgid.html)
但是,您拒绝组成员进入该目录的权限。
答案3
https://en.wikipedia.org/wiki/Setuid#When_set_on_a_directory
在目录上设置 setgid 权限(“chmod g+s”)会导致在该目录中创建的新文件和子目录继承其组 ID,而不是创建该文件的用户的主组 ID(所有者 ID 永远不会受到影响,仅组 ID)。
's' 如果设置用户 ID 或设置组 ID 位以及相应的可执行位均已设置。
'S' 如果设置了设置用户 ID 或设置组 ID 位,但未设置相应的可执行位。