有什么方法可以防止从用户拥有的目录中删除某些文件?

有什么方法可以防止从用户拥有的目录中删除某些文件?

假设用户有目录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,将无法删除该文件。仍然能够userDirectory1.但请注意,他们将无法删除,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

相关内容