为什么vim可以覆盖其主目录下的其他用户文件

时间:2016-07-16 09:55:14

标签: file-permissions

例如,root用户触摸普通用户(名为bob)主目录下的新文件:

/home/bob $ ls -alh a.txt
-rw-r--r-- 1 root root 0 Jul 16 17:45 a.txt

现在用户bob用vim打开它,它应该是readonly。

我尝试强制使用:w!覆盖它,并将其保存并将owner:group更改为bob:

/home/bob $ ls -alh a.txt
-rw-r--r-- 1 bob bob 4 Jul 16 17:47 a.txt

IMO,我认为无法通过权限被拒绝保存,但它可以,并且所有者:组也已更改。

这只能在bob的主目录下,如果在外部目录下,如/ tmp或其他目录,则无法按照我的想法编写。

任何人都能解释一下吗? :w!实际做了哪些流程? THX。

1 个答案:

答案 0 :(得分:3)

Bob可以读取该文件,因此Bob可以在Vim中打开它。

该目录可由Bob写入,因此Bob可以取消链接(删除)其中的任何文件,并将任何新文件写入其中。这是使用:w!时发生的情况。

/tmp目录不是这样,因为它可能设置了“粘性”位。

来自OS X sticky(8)手册:

  

设置了'sticky bit'的目录成为仅附加目录,或者更准确地说,是删除文件的目录        受到限制。粘贴目录中的文件只能被删除或        如果用户具有该目录的写入权限,则由用户重命名        并且用户是文件的所有者,目录的所有者或        超级用户。此功能非常适用于此类目录        作为/tmp,必须是公开可写的,但应该拒绝用户        许可任意删除或重命名彼此的文件。