sudo - 如何确认执行但不请求密码

Mat*_*orn 5 sudo

我正在寻找一种配置sudo不要求输入密码的方法(例如,将其添加NOPASSWD/etc/sudoers配置中,但通过询问某些内容来回显要执行的命令以进行确认

命令应该cat /etc/passwd被执行吗?(是/否)

jes*_*e_b 3

我认为下面的功能也许可以解决您的提示问题:

sudo () {
    local command=$@
    read -rp "Shall command $command be executed? (y/N): "
    local YORN_RESP="$(grep -i "[YN]" <<<"${REPLY:0:1}" || echo 'N')"
    if [[ "$YORN_RESP" == [Yy] ]]; then
        command sudo "$@"
    else
        return 1
    fi
}
Run Code Online (Sandbox Code Playgroud)

只要这个函数被加载,它就会优先于sudo命令,但是它不会阻止人们/bin/sudo直接执行。

对于无密码 sudo ,听起来您已经找到了解决方案,但您需要取消/etc/sudoers文件中以下行的注释:

%wheel  ALL=(ALL)       NOPASSWD: ALL
Run Code Online (Sandbox Code Playgroud)

  • 您应该使用“命令 sudo”而不是“/bin/sudo”,因为“sudo”可能并不总是位于“/bin”中。如果您在子 shell 中运行它(“sudo () ( ... )”而不是“sudo () { ... }”),则可以删除一堆“local”声明。 (3认同)
  • 另外,删除“RESP”并使用“read”将其数据放入的默认“REPLY”变量。 (2认同)