是否可以创建一个对所有人都具有完全权限但无法删除的文件?

是否可以创建一个对所有人都具有完全权限但无法删除的文件?

最好不要使用 sudo?

答案1

不,这是不可能的。普通用户不可能删除文件:当然。

  1. 您需要sudo阻止用户删除文件。您的管理员将始终能够删除文件。

  2. sudo chattr +i test可以防止删除,但需要sudo。简单的操作sudo chattr -i test就可以删除文件。除了管理员之外,其他用户都不能使用chattr

而且...只需重新启动并进入救援模式,该人就可以删除该文件。如果有一种方法永远无法删除文件,那将是一个安全风险。

答案2

这有点粗糙,但很接近了——如果你删除目录的写权限,里面的文件就不能被删除。而且sudo如果你拥有它,它就不需要了:

=^_^= izkata@izein:~$ mkdir test
=^_^= izkata@izein:~$ touch test/delme
=^_^= izkata@izein:~$ chmod a-w test
=^_^= izkata@izein:~$ echo 'Hello' > test/delme 
=^_^= izkata@izein:~$ cat test/delme 
Hello
=^_^= izkata@izein:~$ rm test/delme 
rm: cannot remove `test/delme': Permission denied

因此,您可以根据需要设置文件本身的权限。

此外,正如@Rinzwind 所说,肯定有很多方法可以解决这个问题。

答案3

要删除文件,您需要拥有该文件所链接的所有目录的写权限。要取消该文件与某个目录的链接,您需要拥有该目录的写权限。

因此,只要您授予文件写入权限(甚至所有权)但不是目录或目录该文件已链接到,因此无法删除该文件。

实现此目标的最佳方法是将该文件链接到 root 拥有且任何人都无法写入的目录。您可以将其改为由您拥有,这意味着您和 root 都可以删除它。

这仍然允许其他用户将该文件链接到其他目录,然后从那里取消链接,但他们仍然无法删除该文件,因为他们可以将其从您自己的目录中取消链接。

请注意,要使该功能完全发挥作用,必须控制文件的每个路径组件的写入权限。因为例如,如果文件是 并且/a/b/the-file您没有 ,/a/b则任何人都无法写入,但每个人都有写入权限/a,那么他们可以将其重命名/a/b为其他名称并重新创建自己的文件/a/b并在那里创建自己的文件/a/b/the-file

答案4

尝试:

chattr +i filename

但这样做会导致文件无法被用户删除root- 请谨慎使用。

相关内容