尝试此代码
root /home/user $ touch hehehe
然后作为普通用户
user ~ $ rm -f hehehe
我们的用户可以删除其主目录中的 root 拥有的文件。这不仅适用于其主目录,还适用于其可写入的任何目录。
现在尝试
root /home/user $ mkdir -p testdir
和
user ~ $ rm -rf testdir
也可以。但是:
root /home/user $ mkdir -p testdir/childdir
user ~ $ rm -rf testdir/childdir
失败,所以我们的用户显然无法删除可写目录内的非空不可写目录。
据我所知,这三个测试用例都应该失败。但显然,当目录可写时,这会赋予用户一些与其内容相关的非同小可的能力。
关于用户拥有的文件系统权限可以执行哪些原始文件系统操作( create
,等)的具体规则是什么?delete
答案1
一旦你理解了在所有 UNIX 兼容文件系统中文件都是不是存在于目录中但完全独立的东西。目录只不过是指向文件的链接的集合(这就是为什么从目录中删除文件的系统调用是unlink()
)。当没有指向文件的链接时( 为零refcount
),文件本身就会消亡。
这有几个含义:
- 同一个文件完全可以存在于文件系统上的多个目录中
- 你的问题:从目录中删除文件(或子目录)(删除指向它的链接)或创建指向它的链接不是对文件的操作,而是对目录的操作。这意味着文件的权限无关紧要,重要的是目录的权限。