为何文件权限设为000后,所有者仍能用vi的:wq!保存文件?
为什么文件权限设为000后,所有者仍能通过vi强制保存?
vi强制保存的底层逻辑不是直接修改原文件:
vi编辑文件时,会先在当前目录(或/tmp目录)创建一个临时交换文件(比如.test.swp),你输入的内容都会先写入这个临时文件。执行:wq!时,vi的操作是:先删除原文件test,再把临时文件重命名为test。这个过程中,权限检查的核心是你对文件所在目录是否有写和执行权限——你作为目录的创建者(默认拥有这些权限),自然能完成删除和重命名操作,和原文件的000权限无关。文件所有者的特殊权限优先级更高:
Linux/Unix的权限模型里,文件所有者拥有超越文件权限位的控制权。哪怕文件权限是000,所有者依然可以修改文件权限、删除文件,甚至通过工具绕过权限位直接操作文件内容。vi的强制保存正是利用了所有者的这一特殊权限,配合目录权限完成替换。可以做个验证:如果把文件所在目录的权限改成000,再用vi打开
test执行:wq!,就会保存失败——因为你没有目录的写权限,无法删除原文件或创建新文件。
内容的提问来源于stack exchange,提问作者Bover
相关产品推荐
相关产品推荐

