偶尔(通常是很长一段时间),我会遇到一个困难,那就是我执行的命令会彻底搞砸 Linux 机器。
最近,我不小心再次挂载了根分区(以为这是我刚刚格式化的新 USB 驱动器),然后继续递归地 chown 该分区给自己(再次尝试授予自己对 USB 驱动器的用户访问权限) )。当我意识到自己做了什么(在进行中)时,我就中止了它,但损害已经造成了。许多核心程序不再由root拥有,因此机器基本上处于僵尸状态。一些用户功能(ssh、rsync)仍然有效,但管理级别的功能完全被锁定。无法安装、卸载、重新连接到屏幕会话、重新启动等。
如果这台机器和我一起在客厅里,“修理”它(重新安装)就会变得非常容易。但事实并非如此。这是在我哥哥的房子里。他不喜欢我带他修理/重新安装,我理解这一点。因此,我将在几天内修复我造成的损坏(并希望安装一些更能防止管理混乱的东西)。
我说这一切是为了问一个问题:针对 admin-hamfistedness 强化安装的推荐方法是什么?
未考虑或考虑后很快就放弃的事情:
- 强化管理员,使其不执行愚蠢的命令:一个好主意,但行不通,因为作为一个人,我偶尔会做一些我事后意识到是个坏主意的事情。我想做的是提前超越自己的想法,所以当我做一些愚蠢的事情时,机器会拒绝,我会意识到“哦糟糕!那可能会非常糟糕(TM)!我们不要这样做再次。”
我考虑过的事情:
- 将根分区挂载为只读:将保护根分区免受更改,如果预期部分可写但实际上不可写,则可能会产生负面影响。也不一定能保护分区不被再次以读写方式挂载到其他地方。
- 使用某种压缩只读根映像,上面有一个类似联合的可写层,这样就不会真正对根进行任何更改,并且重新启动可以清除任何错误:如果不需要进行任何更改,这将是好的/好的被设置为 root,也许 /etc 可以从其他地方的持久文件重新加载/填充。
- 将 btrfs 与常规(可能是每日)快照结合使用,这样,如果发生错误,恢复会更容易:可能仍然不是最优的,因为它需要直接用户干预,而且我不知道我可以引导其他人完成回滚 oops 的更改。
- 使用更加“实时”/“嵌入式”的 Linux/BSD 发行版,其设计更加考虑稳定性/可预测性/安全性,而不是更通用的发行版
就目前情况而言,我可能会使用选项 4 来安装比我一直使用的完整 Debian 安装更有限的系统。但作为一个文件服务器和 torrent 客户端,它应该可以正常工作,并且作为一台远程机器,保护机器免受我自己的侵害是一项相当大的资产。
答案1
残酷的事实是,没有什么可以保护你免受自己的愚蠢之害。没有 DWIM(按我的意思做)界面。计算机无法区分什么是有意的,什么是偶然的。无论你在错误的杂散命令上堆砌了多少抽象,都会毁掉一切。
简单的答案是放慢速度并注意你正在做的事情。
答案2
在虚拟机中运行安装。拍摄已知良好状态的快照。在做任何有风险的事情之前先拍快照。在主机环境中几乎不执行任何操作。如果搞砸了,请连接到主机环境并恢复快照。
答案3
没有什么可以阻止你搬起石头砸自己的脚。您“认为”根分区是 USB 记忆棒。您也可能很容易将一台重要的机器误认为是一次性虚拟机。(这种情况发生在我们最优秀的人身上)
重要的是使计算机提供的服务变得多余。
在这种情况下,您可以在两个单独的分区上安装两个 Linux 版本。你可以告诉你的兄弟启动另一个。(只是一个想法)
最重要的是进行备份并制定恢复策略。
在这种情况下,由于您已经承担了兄弟电脑的责任,因此您应该持续备份尽可能多的数据,并随身携带多个副本。
您还可以为您的兄弟提供一个用于启动的 USB Linux 驱动器,并设置 SSH 服务器和密码。并将他的电脑设置为从 USB 启动。然后在紧急情况下,只需让他插入 U 盘并重新启动电脑即可。
答案4
不要以 root 用户身份执行操作。设置 sudo 以允许您的常规帐户执行 root 操作,但需要密码。这给了你最后一次机会来看看你到底在做什么。
但是,当您以 root 身份运行时,请为强制交互式使用的常用命令设置别名。例如,在删除之前alias rm="rm -i"
会进行提示。如果你真的想要的话,rm
你可以明确地覆盖(一个有意识的决定) 。 -f
rm *
rm -f *
你没有说USB上的FS是什么。通常它们是 VFAT。您可以使用选项来安装这些文件,以使每个文件都看起来已由特定用户拥有。那么你实际上就不必跑步chown -r ...
,从而消除了出错的可能性。
将您的 root shell 提示符设置为红色,以提醒您正在以提升的权限运行。
一般来说,这会让你以 root 身份做一些事情变得困难,比如密码提示等障碍。
现在,在修复它之后,您可以访问另一台类似的机器,并用于find
向您显示 SUID/SGID 程序。然后用命令使损坏的磁盘与该磁盘匹配chmod
。