运行 sudo 命令,并在同一行指定密码

运行 sudo 命令,并在同一行指定密码

我想做这样的事情:

sudo -p password rm /a/file

我可以将密码和用户放在同一行吗?

我的 Sudo 版本是1.8.9p5

答案1

sudo没有指定密码的选项,但您仍然可以在命令行上进行身份验证,如下所示:

echo password | sudo -u root --stdin

要不就

echo password | sudo -S

指的是sudo 手册页:

-S,--stdin
将提示写入标准错误并从标准输入读取密码,而不是使用终端设备。密码后必须跟有换行符。

-u用户,--user= 用户
以默认目标用户(通常是 root)以外的用户身份运行该命令。用户可以是用户名,也可以是带有“#”字符前缀的数字用户 ID (UID)(例如,#0 表示 UID 0)。当作为 UID 运行命令时,许多 shell 要求使用反斜杠 ('\') 对 '#' 进行转义。某些安全策略可能会将 UID 限制为密码数据库中列出的 UID。只要未设置 targetpw 选项,sudoers 策略就允许不在密码数据库中的 UID。其他安全策略可能不支持这一点。

sudo已经开发了很长时间了。检查版本:

-V,--version
打印sudo版本字符串以及安全策略插件和任何 I/O 插件的版本字符串。如果调用用户已经是 root,该-V选项将显示构建时传递给配置的参数sudo,并且插件可能会显示更详细的信息,例如默认选项。

添加了对长选项的支持2013年

除了身份验证之外,您还需要一些sudo东西,例如命令。我经常通过执行以下操作来检查它是否正常工作

sudo id

这应该显示用户,例如

uid=0(root) gid=0(root) groups=0(root)

答案2

虽然OP可能有充分的理由想要这样做,但这通常是一个坏主意(密码可以被ps读取,等等),我想提供一个更安全的替代方案。

如果您想使用 sudo 运行某些命令而不输入密码,更好的解决方案是允许您的用户无需密码即可执行该命令。

打开 sudoers 文件sudo visudo并添加以下行(显然替换开头的用户名和结尾的命令):

alice ALL = NOPASSWD: /full/path/to/command

这里有更多解释:https://askubuntu.com/a/39294

答案3

在许多情况下,您不想通过管道传递密码,而是保留 sudo凭据已刷新:

refreshPermissions () {
    local pid="${1}"

    while kill -0 "${pid}" 2> /dev/null; do
        sudo -v
        sleep 10
    done
}

sudo -v
refreshPermissions "$$" &

那么如果一个命令您的程序中需要 root 权限,只需执行以下操作:

sudo [command]

并且不会要求输入密码。

相关内容