sudo
为在 Linux shell 中执行潜在的愚蠢和危险操作增加了一点障碍,但对于较新的 Linux 用户来说,这起威慑作用微乎其微。尽管如此,许多用户仍以 身份登录root
或对 不敏感sudo
,有时可能会做出以下坏事:
chmod 777 /
rm -rf /
doh_oops > /dev/sda
似乎很少有用户真正想这样做 - 他们的使用大概是 1% 是故意的,99% 是无意的。当然,最好备份您的系统,不要做这种危险的事情 - 但新手会犯错误,而 Linux 是不会宽容的。
我不是在要求 UAC,但是否有某种实用程序可以监控控制台/SSH/其他交互的会话中输入命令并在执行前通过某种验证器运行它?一些正则表达式规则可以避免很多麻烦,特别是对于较新的 Linux 管理员来说,而且由于大多数时候您不会从交互式会话运行大量命令,因此这不会造成太大的阻碍。理想情况下,该实用程序会生成一条额外的确认消息 - “您确定要执行此操作吗,因为它看起来真的很愚蠢” - 并要求管理员输入一些确认危险的内容,而不仅仅是标准的“是”,以便他被迫阅读它。
有这种实用程序吗?如果有,我想知道在哪里可以得到它。
如果不是,而且这是一个坏主意,请解释原因。
答案1
虽然我理解你想避免什么以及为什么你需要这样一个实用程序,但请考虑以下问题:你如何处理你期望的对话框提示?你会快速关闭/确认它们,而无需进行额外的考虑。添加一个预期的“按 Y 认真运行此命令”只会是另一个“是的,我确定,请忽略”。
不幸的是,捕获潜在的危险或破坏数据的命令并不像“一些正则表达式规则”那么简单。要做到这一点,您必须列举一个相当详尽的命令和组合列表,以防止出现“错误”(考虑到每个管道、重定向、文件复制、链接工具都有数据丢失/安全隐患)。
因此,我不知道现有的工具可以实现这一点。话虽如此,也许这是一个很棒的想法,人们会发现它非常有用。如果您确实想尝试一下您的想法,您可以先将一些“危险”命令别名化,使其在“确认包装器”之后运行。
为了让您开始编写脚本,请查看我为自动安装程序编写的这个简单函数: https://github.com/tristanfisher/culinary/blob/master/culinary.bash#L42-52
编辑:我实际上认为这是一个很酷的想法,特别是如果它可以作为一个可以轻松安装的软件包使用。有新的 Linux CLI 用户吗? apt-get install cli-seatbelt
并在他/她的 $SHELLrc 中添加一行。我不相信它可以防止我妈妈意外通过 BASH 发射洲际弹道导弹,但输入一个随机的 2 位数字可以充当“运行此命令时可能会有龙。”
答案2
我认为不存在这样的实用程序。我不会说这是个坏主意,但放置这样的拐杖会导致“系统会帮我抓住”的草率/不明智的做法。
不授予 root 访问权限、正确使用 sudo(不盲目地授予所有人 all:all)等将在很大程度上保护您,但作为系统管理员,能力确实是无可替代的。
答案3
- 很难列出一份完整的“坏事”清单
- 同样的问题也存在于 UAC 中:人们“训练”自己不阅读和思考就说“是”
- 如果你有意做一件“坏事”,结果却产生了错误的结果,那么这对你没有帮助
话虽如此,我认为还是可以做一些事情来改善它。很久以前,我有一个内核补丁,可以强制终止任何试图删除名为“UNDELETABLE”的文件的程序,并在关键目录中散布具有该名称的文件。
SElinux 还具有能力系统。它不太好用,但我认为可以让它需要特定的额外能力来更改某些文件或目录。那么“root”就不是完全特权用户,除非你采取一些措施来获得额外能力。
编辑:Linux:创建文件和目录但不删除它们说“chattr +i”将呈现文件不可变的甚至通过 root。
答案4
Pam 过滤器就是为此目的而设计的。它实际上并没有得到太多的开发,如果不添加代码来执行它所需的过滤,它可能无法完全满足您的要求。
我应该指出,即使发生这样的事情,也不要低估愚蠢的人做愚蠢事情的力量。