您如何使Linux遵守setuid目录?


8

前一段时间,在IRC中进行对话时,我在一个频道中的一个用户建议某人设置一个目录,以便该目录继承文件上的用户ID,以解决其他人遇到的问题。当时我大声说“ Linux不支持setuid目录”。之后,提供建议的人向我展示了他的系统的pastebin(http://codepad.org/4In62f13),以兑现在目录上设置的setuid权限。

只是为了解释一下,当我说“ Linux不支持setuid目录”时,我的意思是,您可以进入“ chmod u + s directory”,它将设置目录上的位。但是,Linux(据我所知)忽略了此位(在目录上)。

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

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

谁能为我提供线索,让您了解在目录中使用setuid的系统是什么?


XFS当然具有挂载选项(grpid|bsdgroupsnogrpid|sysvgroups),这意味着目录中的文件是使用目录组而不是所有者组创建的;也许玩那个?
Zanchey 2012年

Answers:


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


我相信情况确实如此……但是,那个家伙很确定他确实实现了自己的目标……然后我转向了debian论坛,因为他使用的是debian,并对此做出了回应:forums.debian.net /…我可能处于一种不太想法的状态,并感到冷漠。经过大约一个月的时间并进行了一些研究,我不确定它绝对不能完成,但是我不明白为什么Debian家伙相信它无需修改就可以实现。
Takigama 2012年

如果他做到了,他将是完成工作的最佳人选。我自己研究了该主题,却一无所获。
亚伦·科普利2012年

@AaronCopley:除了Wikipedia之外,您是否还有其他来源,原因是目录中设置的setuid权限在Linux系统上存在?
Martin Thoma 2013年

不。但是欢迎您尝试一下,自己看看。:)
亚伦·科普利

2

部分答案/解决方法:

我试图做同样的事情,所以决定不做任何尝试,而是尝试另一种方法。我尝试的是访问控制列表,用于设置默认权限。(注意:您可能需要先启用它们)。

setfacl -R --set-file=- . <<EOF
# file: testdir/
# owner: testuser
# group: testgroup
user::rwx
group::rwx
group:normaluser:rwx
mask::rwx
other::r-x
default:group::rwx
default:group:normaluser:rwx
default:mask::rwx
default:other::r-x
EOF

在这里,testuser用于运行测试,普通用户可以删除结果,而无需使用root(每次)。


这将添加一个新组,但是设置组ID可以正常工作。
ctrl-alt-delor

-2

从RHEL man chmod

除非您另外明确指定,否则chmod会保留目录的set-user-ID和set-group-ID位。您可以使用u + s和gs等符号模式来设置或清除位,并且可以使用数字模式来设置(但不清除)位。

如果我没记错的话,按数字方式,按照pastebin中的演示,chmod 4711 ./dir添加设置的UID位,然后chmod 2711 ./dir添加设置的gid位,以6711设置uid + gid继承。

每个手册页chmod u+s== chmod 4XXXchmod g+s==chmod 2XXX


1
不,我知道如何应用它们,那就不是问题。
Takigama 2012年

(打错输入)问题是他们对目录执行的操作,我相信目录上的setuid并不是Linux所做的事情,例如(ubuntu 10.10系统):testuser @ boson:〜$ ls -ald〜drwsrwsrwx 3 testuser testuser 4096 2012-03-21 01:55 / home / testuser该目录同时具有setuid和setgid。现在,作为用户tt @ boson:〜$ touch〜testuser / file t @ boson:〜$ ls -la!$ ls -la〜testuser / file -rw-r--r-- 1 t testuser 0 2012-03 -21 01:57 / home / testuser / file请注意目录中的setuid位没有任何作用(我所期望的)。如何使Linux系统在目录上使用setuid?
Takigama 2012年

您可以使用类似的数字=75500755使用数字来清除它们
Steve Buzonas
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.