巴赫声明如下:
建立目录是一个典型
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 之类的目录,每个人都可以创建目录,但您只能删除您拥有的文件)。