为什么现代 Unix 系统中没有为 mkdir 设置 setuid 权限位?

为什么现代 Unix 系统中没有为 mkdir 设置 setuid 权限位?

巴赫声明如下:

建立目录是一个典型setuid程序。只有具有有效 UID root 的进程才能创建文件夹。(第 7.6 节,第 229 页)


我在 Ubuntu 12.04 上检查了它的权限,setuid 位没有设置。

-rwxr-xr-x 1 root root 42624 Oct  2 08:55 mkdir
   ^??

然后我检查了其他应该有此项设置的程序,例如ping和,su并且它们已经设置了它。

-rwsr-xr-x 1 root root 34740 Nov  8  2011 ping
   ^---there it is 

那么,它是如何mkdir工作的?自从巴赫写下这首歌以来,情况有变化吗?

答案1

mkdir() 调用自 BSD 4.2 以来就已存在。后来它被添加到 SYSV 3.0。请参阅: http://pubs.opengroup.org/onlinepubs/9699919799/functions/mkdir.html

BSD 4.2 于 1984 年问世: http://www.unix.org/what_is_unix/history_timeline.html

如果允许从用户模式无限制地通过系统调用访问 UNIX 中的内核模式入口点,正如 duskwuff 所指示的,那么就不需要 setuid。

答案2

创建文件夹不再需要 root 权限。现在,mkdir()任何进程都可以使用系统调用来创建目录。

答案3

自从巴赫写出这首诗以来,情况有改变吗?

确实如此。如今,创建目录的权限基于对父目录或位的写入权限t(对于 /tmp 之类的目录,每个人都可以创建目录,但您只能删除您拥有的文件)。

相关内容