*BSD 和 Linux 中 SGID 的不同行为

*BSD 和 Linux 中 SGID 的不同行为

我遇到了一件有趣的事情:在 BSD 系统上,新文件的组将设置为目录的组。在 System V 系统上,它将具有创建文件的用户的主组。至于 BSD 系统,这种行为的目的是什么?这是否意味着新加坡身份证那里没啥用处吗?

答案1

这可能是也可能不是一个依赖于操作系统的功能,您没有提供足够的细节来说明。

可执行文件上的 sgid 位使其在文件组中运行,即使运行它的用户不在该组中。(设置组 ID)如果它不可执行,则 sgid 位基本上没有意义。

在目录中,sgid 位已被重新用于控制目录内的组继承。如果在目录中设置了 sgid 位,则目录中创建的文件将继承该组(但不继承组权限)。这样做的目的是,如果您有一个由组中的用户使用的共享目录,那么他们都可以将他们的 umask 设置为 002 而不是 022,并且都可以编辑目录中的文件,而无需不断修复组权限。(如果没有 umask 更改,这没什么用。)

因此,在您查看的两个系统中,可能一个在您测试的目录中设置了 sgid 位,而另一个没有。此功能并非永远存在,因此如果其中一个系统足够老旧,它可能不支持 sgid 目录继承。(但它一直存在几乎永远,所以这种情况不太可能发生。

这绝不意味着 sgid 毫无用处,我不确定你为什么会这么想,你没有解释你认为什么毫无用处。请注意,如果某个文件的组所有者不是你所在的组,则在不先更改组所有者的情况下,你将无法使文件成为 sgid,并且如果非 root 用户复制该文件,则 sgid 将被删除。

相关内容