最好不要使用 sudo?
答案1
不,这是不可能的。普通用户不可能删除文件:当然。
您需要
sudo
阻止用户删除文件。您的管理员将始终能够删除文件。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
- 请谨慎使用。