不要使用 sudo 执行命令,除非它配置为无密码

不要使用 sudo 执行命令,除非它配置为无密码

我不确定是否sudo支持这样,我想执行一个命令,只有这个命令配置为NOPASSWD,即如果该命令可以无密码运行,则运行它;否则直接退出。

到目前为止,唯一的选择似乎是列出所有可用的命令并sudo -l手动解析输出,这看起来很脏。

还有其他选择吗?

答案1

不是很漂亮,但缺乏解析,sudo -l因为你正在做我不知道替代方案:只需使用开关运行你的命令-n

(非交互式)选项-n可防止 sudo 提示用户输入密码。如果命令运行需要密码,sudo 将显示错误消息并退出。

例子:

me$ sudo -l 
User me may run the following commands on this host:
    (ALL) NOPASSWD: /usr/bin/vim
    (ALL) /usr/bin/nano
me$ sudo -n nano /etc/hosts
sudo: a password is required
me$ echo $?
1
me$ sudo -n vim /etc/hosts
# :q
me$ echo $?
0

问题在于,您无法直接从退出代码判断是否sudo因需要密码而失败,或者您运行的命令是否失败。所以你需要解析输出。 (幸运的是,错误消息是静态的,因此这应该不会太难。但要注意本地化。)

相关内容