如何用验证提示包装危险的 Linux 命令

如何用验证提示包装危险的 Linux 命令

问题: 如何包装 Linux 命令以便在执行命令之前要求进行验证?

例子:

$> shutdown -r now
Please verify the host you are shutting down by typing the hostname: myhost.example.com
Verification passed, shutting down now

理由:我们最近发生了一起事件,一名生产工程师在错误的机器上运行了破坏性命令,管理层要求我们对某些破坏性命令进行验证检查。

挑战:我们需要包装各种命令类型,有些可能是systemctl正在执行的命令、脚本或二进制文件。

答案1

  1. 将二进制文件移动到不是在 $PATH 中
  2. 创建一个 bash 脚本来执行所需的验证并将其存储在某个位置里面你的路径。
mv /sbin/shutdown /opt/shutdown
touch /sbin/shutdown
chmod +x /sbin/shutdown

然后用执行您想要的操作的 bash 脚本替换它。

#!/bin/bash
echo "do whatever" 
/opt/shutdown $@

该行将/opt/shutdown $@把所有命令行参数传递给真实的二进制。

答案2

您可以使用您最喜欢的配置管理系统针对关键系统创建的别名。

you_sure() {
  if [[ $- =~ i ]] # only on interactive shells
  then
    read -p 'OPERATION ON LIVE PRODUCTION ENVIRONMENT! ARE YOU SURE? [N/y]: ' -n 1 -r
    echo
  fi

  if [[ ! $- =~ i || $REPLY =~ ^[Yy]$ ]]
  then
    "$CMD" "$@"
  fi
}

alias shutdown='CMD=shutdown you_sure'

通过在命令前加上斜杠,也可以实现简单的绕过:$ \shutdown -r now

相关内容