前一段时间,在IRC中的一个对话中,我在一个频道中的一个用户build议有人设置一个目录,以便它inheritance文件上的用户ID,以解决别人遇到的问题。 当时我说话,并说“Linux不支持setuid目录”。 之后,提出build议的人向我展示了他的系统的一个pastebin( http://codepad.org/4In62f13 ),这个系统遵守目录上的setuid权限集。
只是为了解释,当我说“Linux不支持setuid目录”我的意思是,你可以去“chmod u + s目录”,它会设置目录上的位。 然而,Linux(据我所知)忽略了这一点(在目录上)。
试试我可能,我只是不能完全复制该pastebin。 有人向我build议,有可能用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?
目录的setuid行为不像setgid。 除非是FreeBSD的shell输出,否则有些人会觉得无聊,有点费劲。
在UNIX和Linux系统上,目录上的setuid权限设置将被忽略[4]。 FreeBSD可以被configuration为类似于setgid来解释它,也就是强制所有的文件和子目录被顶级目录所有者拥有[5]。
在FreeBSD中,目录的行为好像它们的setgid位总是被设置的,而不pipe它的实际值如何。 正如开放式(2)所述,“当一个新文件被创build时,它被赋予包含它的目录组。
http://en.wikipedia.org/wiki/Setuid#setuid_and_setgid_on_directories
部分回答/解决:
我试图做同样的事情,我决定不去争取,并尝试另一种方法。 我所尝试的是访问控制列表,以设置默认权限。 (注意:您可能需要先启用它们)。
setfacl -R --set-file=- . <<EOF # file: testdir/ # owner: testuser # group: testgroup user::rwx group::rwx group:normaluser:rwx mask::rwx other::rx default:group::rwx default:group:normaluser:rwx default:mask::rwx default:other::rx EOF
这里testuser用来运行testing,普通用户可以删除结果,而不会导致使用root(每次)。
从RHEL man chmod
除非另外明确指定,否则chmod保留目录的set-user-ID和set-group-ID位。 您可以使用u + s和gs等符号模式设置或清除这些位,并且可以使用数字模式设置(但不清除)这些位。
在数值上,如果我记得正确, chmod 4711 ./dir
添加设置UID位, chmod 2711 ./dir
添加设置gid位6711
设置uid + gidinheritance按照在pastebin中的演示。
根据手册页chmod u+s
== chmod 4XXX
和chmod g+s
== chmod 2XXX