我想做这样的事情:
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]
并且不会要求输入密码。