如何防止错误地将 rm -rf 指定为特定文件夹?

如何防止错误地将 rm -rf 指定为特定文件夹?

我认为这里的很多人都错误地“rm -rf编辑了错误的目录,希望它不会造成巨大的损害。有什么方法可以阻止用户做类似的事情吗?”UNIX恐怖故事??有人提到(评论区上一个链接) 那

...我很确定现在每个unix课程或使用unix的公司都会设置 rm -fr 来禁用试图运行它的人的帐户或阻止他们运行它...

在当前的 Unix 或 Linux 发行版中是否有任何实现?即使是系统管理员(具有 root 访问权限),防止该错误的常见做法是什么?

似乎有一些根目录保护( /) 在 Solaris(自 2005 年起)和 GNU(自 2006 年起)中。无论如何,是否也可以对其他一些文件夹实施相同的保护方式?

为了更清楚起见,我并不是询问有关rm使用的一般建议(并且我已经更新了标题以表明更多),我想要更像根文件夹保护的东西:为了rm -rf /您必须传递特定参数:rm -rf --no-preserve-root /.. 自定义目录集是否有类似的实现?或者我可以指定除受/保护之外的文件吗保留根选项?

答案1

为避免误会rm -rf不要输入rm -rf

如果您需要删除目录树,我推荐以下工作流程:

  • 如有必要,请更改为要删除的目录的父目录。
  • mv directory-to-delete DELETE
  • 探索DELETE并检查它是否确实是您要删除的内容
  • rm -rf DELETE

切勿rm -rf使用除 之外的参数进行调用DELETE。分几个阶段进行删除可以让您有机会验证是否删除了错误的内容,无论是由于拼写错误(如而rm -rf /foo /bar不是rm -rf /foo/bar)还是由于大脑(哎呀,不,我的意思是删除foo.old并保留foo.new) 。

如果您的问题是您不能相信其他人不会键入rm -rf,请考虑删除他们的管理员权限。可能出错的事情还有很多rm


始终做好备份

定期验证您的备份是否正常工作且是最新的。

将无法从某个地方轻松下载的所有内容置于版本控制之下。


对于基本的 UNIX 系统,如果您确实想让某些目录无法被 删除,请用拒绝某些参数的自定义脚本rm替换(或更好的阴影) 。rm或者通过hg rm.

一些 UNIX 变体提供了更多可能性。

  • 在 OSX 上,您可以设置访问控制列表在目录上阻止删除其中的文件和子目录,而不阻止创建新条目或修改现有条目:(chmod +a 'group:everyone deny delete_child' somedir这不会阻止删除子目录中的文件:如果需要,请在子目录上设置 ACL以及)。
  • 在 Linux 上,您可以在 SELinux、AppArmor 或其他安全框架中设置规则,禁止rm修改某些目录。

答案2

如果您正在使用rm *zsh,您可以设置选项rmstarwait

setopt rmstarwait

现在,当您使用以下命令时,shell 会发出警告*

> zsh -f
> setopt rmstarwait
> touch a b c
> rm *
zsh: sure you want to delete all the files in /home/unixuser [yn]? _

当您拒绝它(n)时,什么也不会发生。否则所有文件将被删除。

答案3

如果你了解C编程语言,我认为可以重写rm源代码并为内核做一些补丁。我在一台服务器上看到了这一点,并且无法删除一些重要目录,当您输入“rm -rf / direcotyr”时,它会向系统管理员发送电子邮件。

答案4

为了防止rm -rf *目录中出现意外情况,请在该目录中创建一个名为“-i”的文件(您可以使用 emacs 或其他程序来执行此操作)。 shell 将尝试解释 -i 并使其进入交互模式。

例如:您有一个名为 的目录,其中rmtest包含名为 的文件-i。如果您尝试rm目录内的所有内容,rm将首先-i传递给它并进入交互模式。如果您将这样的文件放入您想要对其进行保护的目录中,这可能会有所帮助。

请注意,这对 无效rm -rf rmtest

相关内容