如何禁用可怕的终端命令?
我使用 SSH 访问远程 Ubuntu 服务器,但无法访问物理服务器。我以为我shutdown
在 Ubuntu 操作系统上运行的 NoSQL 服务器中输入了“ ”,但实际上我告诉 Ubuntu 服务器关闭。然后我不得不告诉服务器管理员我做了什么,以便他可以为我启动物理服务器。这太尴尬了!
我怎样才能防止这种情况再次发生?
答案1
标准答案是“不要以 root 身份登录”。所有以 root 身份运行的命令都很可怕。如果那不是一个选择,您可以将一些别名命令放入您的命令中.bashrc
以禁用您认为特别可怕的命令。例如:
for scary in shutdown halt reboot rm
do
alias $scary="echo If you really want to do that, type: `which $scary`"
done
然后,如果您输入shutdown,您将收到以下消息:
If you really want to do that, type: /sbin/shutdown
(确保你的.bashrc
已先加载,在你尝试这个之前在生产服务器上)
退出当前ssh
会话并再次登录,或者使用. ~/.bashrc
应加载/运行 .bashrc。也许尝试rm
不带任何参数运行,以确保您的服务器没有禁用.bashrc
登录时自动加载或类似操作。
请注意,如果您主要关心的是停止和关闭,您可以考虑安装molly 守卫,这将要求您在关闭机器之前输入主机名。如果您经常在命令行上关闭整个操作系统,但又想确保关闭的是正确的操作系统,那么这个命令就非常有用。
您还可以使用不太可怕的命令(例如注销或退出)来尝试此操作。
答案2
sudo
存在是有原因的 - 使用它。当您的命令(在本例中为交互式 CLI)完成后,您将被转储回用户级 shell,而不是 root shell。很少有值得使用 root shell 的理由。(我很惊讶这还没有答案......)
话虽如此,不要成为一个sudo
使用一切. 了解您正在做什么,并了解为什么它需要/不需要 root 权限。
此外,您还可以区分 root/用户 shell 的提示符。这也使得您更明显地回到了 shell 提示符,而不是“一些其他的 CLI“。我的非常丰富多彩,并且包含许多有用的信息(例如主机名),这使得它非常很容易知道命令将在哪个主机上执行,也可以更轻松地回顾历史记录并找到提示 - root shell 使用默认提示。
这更适合用于“你的“帐户,但如果您非常重视安全/系统管理,那么您就不会共享密码/帐户,也不会在没有充分了解的情况下坐在 root shell 中。
正如人们一遍又一遍地说的那样“使用别名命令来创建安全环境不是一个好主意“。你会在安全的环境中感到舒适,在不该输入的地方输入那些‘可怕’的命令。然后有一天你会换工作,或者登录到一台新机器,然后砰的一声”哎呀,我不是故意的,对不起“……”
答案3
软件包“molly-guard”(至少在 Debian 衍生系统上)将安装关机、停止、关机和重启的包装器。如果它检测到终端是远程终端,则它将提示输入主机的名称。如果不匹配,则命令被取消。
答案4
对于shutdown
(reboot
,halt
和相关):我有一个副本,它会询问我是否真的确定(而且它什么也不做)。我将此类脚本存储在 中/usr/local/sbin
。在 Debian 上,它的优先级高于其他/sbin
(它是 PATH 的第一个目录)。
系统脚本使用完整路径,因此黑客阻止我停止远程服务器而不是本地机器(来自的一个不好的行为惊人的我使用 /sbin/shutdown 命令关闭了某些功能(例如,关闭 WM 程序),但没有其他间接作用,当真正需要时,我仍然可以将它们用作 /sbin/shutdown。