题 如何防止危险的bash命令? [关闭]


使用时 庆典 有还是没有 sudo 有很多陷阱。例如,以root身份登录

rm -rf ~/bin

rm -rf /bin 

只有一个角色,但这种差异会让你很不高兴。

为了保护自己一点点这样的灾难我在我的使用中 /etc/bash.bashrc (系统级 .bashrc):

if [ $UID -ne 0 ]; then
    # ask me before deleting
    alias rm='rm -i'
else
    # do not delete / or prompt if deleting more than 3 files at a time
    alias rm='rm -I --preserve-root'
fi

有了这个,我至少要在遇到灾难之前确认删除。 也许还有更危险的命令,如...

什么是最危险的bash命令并保护自己免受日常灾难的影响?


6
2017-09-08 15:19




你也可以添加 -i 至 cp 要么 mv 防止危险的覆盖。 - Tom Hunt
你有没有尝试过 不 以root身份登录? - ceejayoz
你永远不知道什么时候打算打字 --no-preserve-root  偶然。 - kasperd
@Aaron我发现在使用sudo时要更加小心地记住检查我的命令要容易得多。很容易忘记你是根本。 - ceejayoz
@Aaron,“Linux还没有进化......”实际上,它有:SELinux。我发现根本不需要登录机器就更容易了,只需使用配置管理工具即可完成所有操作。此外,任何人仍在使用 sudo su - 需要给出一份副本 sudo(8)联机帮助和书面测试。 - womble♦


答案:


首先,永远不要使用root来执行日常命令。

这是实际让自己暴露于灾难的最佳方式。

考虑到这一点,如果您使用sudo,您实际上可以限制命令和用户可以使用sudo执行的命令选项。

例如,在您的sudoers文件中,您可以限制使用rm,如下所示:

myuser ALL=(root)   NOPASSWD: rm -r

这意味着 为myuser 只能用sudo作为  并且只能执行 R M 随着 -r 选项。

sudoers文件也支持正则表达式,因此您可以真正自定义使用sudo时可执行的内容。

一个很好的起点...


10
2017-09-08 15:28



赞成“永远不要使用root来执行日常命令”。 - Jenny D
我知道人们会对此表示不同意,但人们已经习惯于相信sudo可以防止这样的错误而且根本不是这样。实际上,根据我恢复系统破坏的系统经验,它使超级用户级别的错误变得更加容易和更加普遍。然而,这个主题有一个心理方面,我知道这将继续下去。 - Aaron
@aaron,我有完全相反的经历。由于我们强制执行严格的sudo,auditd,sshd和pam设置,所经历的错误数量急剧减少。最重要的是,它让人们更容易知道谁做了什么。反过来,在出现问题时更容易进行回滚。 - Alex
注意:如果您在命令中指定任何参数 sudoers,但没有添加通配符,那么你只能使用你给出的命令,而无需额外的参数。给出的例子将允许 sudo rm -r, 但不是 sudo rm -r foo, 要么 sudo rm -ri foo。 - muru