Bla*_*ing 20 linux file-permissions
在 Linux 系统上,您可以成功chmod u+s $some_directory,但不是u+s像您期望的那样强制新子目录和文件的所有权成为包含目录的所有者(并设置子目录),系统只是忽略 setuid 位。子目录和文件继续继承其创建进程的 UID,子目录默认不是 setuid。
为什么目录上的 setuid 被忽略,我怎样才能让系统识别它?
Isa*_*tch 17
回想一下 setuid 和 setgid 位是为完全不同的目的而发明的:使可执行文件以其所有者的 uid 或 gid 运行,而不是运行文件的用户的 uid 或 gid。任何其他用途只是一个额外的功能。
这些位对不可执行的普通文件不起作用。(由于安全问题,还有一些发行版上的 shell 脚本。)最初,它们也没有目录功能。显然有人认为在目录上使用未使用的 setgid 并使用它来强制执行组所有权的一致性会很酷。毕竟,如果您在玩组所有权,那是因为有不止一个人在处理该文件,并且给定目录中的所有文件都属于同一个组可能是有意义的,无论是谁创建的。由于有人忘记运行 newgrp 的麻烦被消除了。
那么,为什么不为 setuid 和文件 uid 实现相同的功能呢?嗯,uid 比 gid 更基本。如果你实现了这一点,通常一个文件将不属于创建它的用户!据推测,用户仍然可以修改文件(假设 umask 是正常的),但他们无法更改权限位。很难看出它的效用。
小智 8
我相信这个问题的答案与导致大多数现代类 Unix 操作系统不允许“文件赠品”的“文件赠品”安全问题有关。“文件赠品”是指非超级用户将文件的所有权更改为该用户以外的其他人。这种能力为恶作剧提供了许多机会。
由于文件赠品是不允许的,因此目录上的 setuid 是不允许的,如果设置了,它将以另一种形式执行相同的功能,或者将其忽略。
至于更改行为,您必须修改操作系统库和实用程序。