你如何让 linux 尊重 setuid 目录?

Tak*_*ama 8 linux permissions

前段时间在 IRC 的一次对话中,我所在的频道中的一位用户建议某人设置一个目录,以便它继承文件上的用户 ID 以解决其他人遇到的问题。当时我说“linux 不支持 setuid 目录”。在那之后,给出建议的人向我展示了他的系统的 pastebin ( http://codepad.org/4In62f13 ),以尊重对目录设置的 setuid 权限。

只是为了解释一下,当我说“linux 不支持 setuid 目录”时,我的意思是您可以转到“chmod u+s 目录”,它会在目录上设置位。但是,linux(据我所知)忽略了这一点(在目录上)。

尽我所能,我只是无法完全复制那个 pastebin。曾经有人向我建议,可能可以用 selinux 模拟这种行为 - 并玩弄规则,可以在文件上强制使用 uid,但不能从 setuid 目录权限(我可以看到)。在互联网上阅读相当缺乏信息 - 大多数地方声称“不,目录上的 setuid 不适用于 linux”,偶尔“它可以在特定情况下完成”(例如:http : //arstechnica.com/ etc/linux/2003/linux.ars-12032003.html )

我不记得原来的人是谁,但原来的系统是一个debian 6系统,它运行的文件系统是用“default,acl”挂载的xfs。我试过复制它,但到目前为止没有运气(到目前为止尝试过各种版本的 debian、ubuntu、fedora 和 centos)

任何人都可以告诉我什么或如何让系统尊重目录上的 setuid 吗?

Aar*_*ley 7

目录的 Setuid 与 setgid 的行为不同。除非 shell 输出来自 FreeBSD,否则有人会感到无聊并以您为代价获得一点乐趣。

在 UNIX 和 Linux 系统上,目录上设置的 setuid 权限会被忽略。[4] FreeBSD 可以配置为类似于 setgid 来解释它,即强制所有文件和子目录归顶级目录所有者所有。 [5]

在 FreeBSD 中,目录的行为就像它们的 setgid 位总是被设置一样,不管它的实际值如何。正如 open(2) 中所述,“当创建一个新文件时,它被赋予包含它的目录组。”

http://en.wikipedia.org/wiki/Setuid#setuid_and_setgid_on_directories


One*_*roi -2

来自 RHELman chmod

\n\n
\n

chmod 保留目录\xe2\x80\x99s set-user-ID 和 set-group-ID 位,除非您明确指定。您可以使用 u+s 和 gs 等符号模式设置或清除这些位,\n 并且可以使用数字模式设置(但不能清除)这些位。

\n
\n\n

从数字上来说,如果我没记错的话,chmod 4711 ./dir添加设置 UID 位,chmod 2711 ./dir添加设置 gid 位,以便6711根据 Pastebin 中的演示设置 uid + gid 继承。

\n\n

根据手册页chmod u+s==chmod 4XXXchmod g+s==chmod 2XXX

\n