![有什么方法可以防止从用户拥有的目录中删除某些文件?](https://linux22.com/image/17751/%E6%9C%89%E4%BB%80%E4%B9%88%E6%96%B9%E6%B3%95%E5%8F%AF%E4%BB%A5%E9%98%B2%E6%AD%A2%E4%BB%8E%E7%94%A8%E6%88%B7%E6%8B%A5%E6%9C%89%E7%9A%84%E7%9B%AE%E5%BD%95%E4%B8%AD%E5%88%A0%E9%99%A4%E6%9F%90%E4%BA%9B%E6%96%87%E4%BB%B6%EF%BC%9F.png)
假设用户有目录1它包含文件1 文件2 无法删除文件 如何使用户永远不会被允许删除无法删除的文件?
如果我改变所有权目录1并删除写入权限用户将无法删除任何文件。他们也无法添加新文件等。
我只是希望能够设置一些永远不会被删除的文件。
更具体的描述。
我正在创建用户配置文件。我正在创建应用程序启动器文件桌面。所以我想设置一些启动器文件(.desktop)并制作它们,以便用户只能启动它们,并且无法重命名或删除,只能启动。
目前,如果用户拥有包含任何文件的目录。他可以删除。
如果没有适用于所有 *nix 的通用方法,那就是 Linux 和 ext4 FS。
答案1
使用该属性使文件不可变i
。
chattr +i file.desktop
请参阅man chattr
获取更多信息。
答案2
(我不喜欢侵入用户的家,我认为应该允许他们在家里做任何他们想做的事……但无论如何……)
这应该可以在 Linux 上运行(至少)。我假设user
已经是该组的成员了user
。解决方案是更改Directory1
目录的所有权并设置粘滞位:
chown root:user Directory1
chmod 1775 Directory1
然后使用:
chown root Directory1/CantBeDeletedFile
现在,user
由于粘滞位 1,将无法删除该文件。仍然能够user
在Directory1
.但请注意,他们将无法删除,Directory1
因为它永远不会被清空。
—
1. 当目录启用粘滞位时,用户(所有者除外)只能删除目录中自己的文件。这用于/tmp
权限为1777
=的目录rwxrwxrwt
。
答案3
我认为没有办法防止删除具有 Unix 文件权限的单个文件,但我可以想到一个解决方法:编写一个守护进程,在删除该文件时替换它。inotify-tools
如果您使用的是 Linux,那么它非常适合此类事情。
有几种方法可以替换已删除的项目:复制一个新项目,或者将真实文件保存在安全的地方,然后将链接复制到用户的目录中。对于链接,您可以使用符号链接或硬链接。我将从符号链接开始,但有些(很少)程序无法正确处理符号链接。如果发现用户遇到这样的程序,就改用硬链接。
答案4
您专门询问了 Linux,但只是为了这些问题的其他读者的利益,BSD 和 macOS 已经chflags它还可用于完全保护文件(而不仅仅是防止删除)。
“uchg”标志是用户级别的。用户也可以自己清除该标志。
chflags uchg file-to-protect
还有“schg”标志,它是系统级的。添加或删除“schg”需要 sudo。
chflags schg file-to-protect