![为什么一个用户可以删除另一个用户的 755 个文件?](https://linux22.com/image/1429246/%E4%B8%BA%E4%BB%80%E4%B9%88%E4%B8%80%E4%B8%AA%E7%94%A8%E6%88%B7%E5%8F%AF%E4%BB%A5%E5%88%A0%E9%99%A4%E5%8F%A6%E4%B8%80%E4%B8%AA%E7%94%A8%E6%88%B7%E7%9A%84%20755%20%E4%B8%AA%E6%96%87%E4%BB%B6%EF%BC%9F.png)
我有一个备份上传脚本,它使用用户 scp 文件到另一台服务器upload
。然后目标服务器上的另一个脚本将这些文件 chown 给另一个用户,并将文件模式设置为755
。
如果我随后使用该用户通过 SSH 进入目标服务器upload
,我就可以删除 chowned 文件。它们不应该是只读的吗?
这是目标服务器上的文件的样子,用户upload
可以删除它。
-rwxr-xr-x 1 maciekish maciekish 650M Nov 1 01:07 2014-11-01-data.tar.bz2
该用户upload
刚刚被添加,useradd
并且不属于该组的一部分maciekish
。
当尝试通过 ssh 删除文件时,upload
系统会询问我是否要删除“写保护的常规文件”,然后我可以说Y
并删除它。
答案1
文件是只读;但是,删除文件并不会修改它,而只会修改父目录(它基本上是从目录列表中删除该文件) - 听起来您对该目录拥有完全的写权限。
您可以设置sticky
位(也称为“限制删除”标志),这将阻止除所有者之外的任何人重命名或删除该目录中的文件(例如/tmp
)。为此,请chmod o+t *directory*
以目录所有者的身份运行。
答案2
在典型的 Unix 文件系统中,任何文件都可以通过任意数量的目录条目来识别,每个目录条目都包含一个“硬链接”。
从实现角度来看,删除文件的最后一个目录条目(硬链接)与简单地删除多个引用中的一个引用之间存在差异。但是,从语义角度来看,两者没有区别。
如果某个文件存在多个硬链接,则使用其中任何一个硬链接写入文件都会改变所有硬链接所看到的文件。rm
但是,使用某个链接只会导致无法通过该链接访问该文件。指向该文件的其他链接仍会继续看到完全相同的文件。