【问题标题】:Prevent "rm -rf" [closed]防止“rm -rf”[关闭]
【发布时间】:2017-02-01 18:23:25
【问题描述】:

如你所知,今天 Gitlab 发生了“一些事情”,这让我想起了我之前采访中的一个问题。有人问我“有没有办法阻止管理员使用命令 'rm -rf' ?”其实我不知道答案,所以你们有什么想法吗?
(这里的'prevent'的意思是,你已经输入了'rm -rf'并按了Enter,但是'rm -rf'不起作用。我忘了在面试结束时问答案>.

【问题讨论】:

  • AFAIK 你不能“阻止管理员”做任何事情,这就是管理员的想法——他们拥有所有的权限......
  • @HopefullyHelpful 我总是很高兴被证明是错误的并学习新事物,您能否添加指向说明如何完成的资源的链接?

标签: linux rm


【解决方案1】:

您可以在她的环境中放置一个别名,将rm 重新定义为rm -i。她可以使用'rm' 覆盖它,但这需要考虑。

【讨论】:

  • 你的意思是管理员也可以用“rm rf”做同样的事情?没有'-'?
  • 新的rm 可能只是一个检查危险的脚本,如果没有找到,将所有参数传递给真实的 rm。
【解决方案2】:

首先,我将尝试解释超级用户是一个管理角色,通常会禁用所有权限检查。当然,您可以采取一些对策来避免root 帐户绕过它们并造成灾难。第一个(在许多系统上可用)是以只读方式挂载根文件系统。您可以通过符号链接挂载另一个文件系统读写并将所有允许修改的文件移到那里。这使得系统更健壮地防止错误,但更难以管理(准备系统以这样的方式工作需要一个细粒度的工具来审查和审计缺陷或不一致)下一步是不允许管理员物理访问系统。重新启动系统允许您控制启动过程并强制从不同的文件系统内核启动或使用不同的帐户管理数据库,从而绕过系统的正常安全性。另一种方法是管理系统中的所有角色以非特权用户级别工作,并完全禁止普通用户访问root帐户(这种方法在android系统中遵循,是linux系统的衍生系统) 这种方法还有一个风险问题,因为如果不小心,您可以轻松地完全锁定您的系统。

有一些 unix 风格允许通过使用 jail 概念来限制对某些系统部分的访问,从而允许 root 帐户的受限实例。 BSD unix 系统使用这种方法作为提供精简虚拟环境的某种意图。在这种方法中,您可以在您的系统中提供一个虚拟空间,并为其提供超级用户权限,同时保护主机系统不被破坏。它允许超级用户创建和管理甚至不同的新 IP 地址以及对某些设备的低级别访问。并且您可以在运行时从主机系统进行控制(您可以导航来宾系统,而其上的用户不会看到您的进程、主机用户或主机进程)

但是,如果管理员可以物理访问系统,则没有什么能阻止她使用shutdown 并使用不同的根分区重新启动它,从而克服所有这些障碍。然后,她可以删除她想要的任何内容(即使是加密卷,其目的是阻止用户绕过权限访问,她可以用新数据覆盖它们,破坏原始数据)

最后,作为结论,您会发现小心,不要将root 帐户用于正常的普通任务。正如其他回复所建议的那样,将alias rm='rm -i' 作为某种安全网通常是解决问题的最佳方法,因为其他替代方案需要更好(如果不是最好)的管理技能,而不仅仅是强制rm命令要求您确认您要求它删除的每个文件。

【讨论】:

  • 你最后的想法,永远不要成为普通工作的根,是窗口化/微软化的。即使不是 root,我也可以做到rm my_very_important_documents/*。更危险的是:删除我的文档或删除整个 /bin/*? alias 的想法更好。
  • @linuxfan,你的评论现在有效,但在unix发明的时候就不行了......然后,所有用户帐户恰好在同一个文件系统中,共享资源,一个管理员的错误可能导致使整个系统崩溃(所有用户的数据比一个人的数据更重要)这个原则来自七十年代(相信我,我已经花了几天时间试图恢复一个拥有超过 100 个帐户的系统,由于管理员的错误)当 unix被大量使用,而微软的 Windows 还没有看到曙光。在多个用户之间共享一台计算机总是有效的。
  • 1/2 我只部分同意你的观点。 root 用户应始终仔细检查他在做什么。但是普通用户也应该仔细检查,因为它被欺骗认为他不会造成伤害。真正的问题是用户界面以及您无法撤消某些更改的事实。垃圾箱是一项伟大的发明,因为它是 VAX-VMS “文件的自动版本控制”(;1 ;2 ;3 等等)。是否有可能,在 2017 年,我们可以执行“rm *”,而无需撤消更改?交互式“rm -i”,可能是由别名强制的,只是向前迈出了一小步......
  • 2/2 ...但现在用户可以轻松确认,甚至不了解发生了什么,相信系统是“用户友好的”。但是unix不是。在这种情况下,我认为保护“系统”或“保护我的文档”没有什么区别,相反我会说系统文件不如我的文档重要。通过不是 root 我只保护系统,这正是您在 Windows 桌面上看到的,默认情况下您甚至看不到 C:\program 文件的内容...
  • @linuxfan,不,你误解了我的话。我没有说管理员必须在不仔细检查他在做什么的情况下工作。我说过管理员在做普通用户的工作时不能作为管理员工作。通常每个人都必须仔细检查他在做什么。垃圾桶是一个伟大的发明,直到你无意中移动鼠标并将所有/etc文件放在/var目录下系统挂在你的鼻子上(这是发生在我身上的真实案例,当然)幸运的是,它发生在刚刚安装和执行管理员任务的系统中,...
【解决方案3】:

您可能会使用(在一些文件系统上,例如ext4chattr(1),例如如chattr -R +i dirname(但系统管理员仍然可以恢复...)。

但我认为这不是一个好主意。 rm -rf 应该按预期工作(但你可以让rm 变成一些alias,例如在你的~/.bashrc 中)。你当然有备份。

如果您运行rm -rf快速中断它,您可以尝试使用debugfs(8) 修复您的ext4 文件系统。谨慎使用。

【讨论】:

  • 拥有管理员权限的用户无法运行chattr 并恢复它?还有,是不是很像chmod
  • @HopefullyHelpful 不行,你能发个链接吗?
【解决方案4】:

有一种机制,尽管非常部分,可以帮助解决“rm -rf”的效果。通过建立一个文件的硬链接,驻留在不同的目录中,该文件不能再被原始目录中执行的单个“rm”删除:它将从原始目录中消失,但它会继续存在于文件系统。

对于重要目录中的文件,这些硬链接可以提供帮助;不幸的是,目录本身不支持硬链接(并且有充分的理由);因此,在“通过硬链接备份的树”上操作的“rm -rf”也会破坏目录结构,此外还会使文件从其原始位置消失。但是,精心设计的硬链接系统会给恢复丢失的文件提供最后的机会。

【讨论】:

    猜你喜欢
    • 2017-09-17
    • 2011-02-28
    • 1970-01-01
    • 2015-08-17
    • 1970-01-01
    • 1970-01-01
    • 2021-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多