如何配置 sudo 以允许某些参数

如何配置 sudo 以允许某些参数

特别是我想允许没有密码的以下命令:

 sudo cfgutil --ecid "${Device_ECID}" install-application "${in_File_Name}"

从一个呼叫到下一个呼叫的变化Device_ECIDin_File_Name我找到了几个例子,但大多数都是相反的:完全禁止变量参数或允许任何参数。


更新:

发布后不久我发现了通配符。以下对我有用:

%_developer ALL=(root) NOPASSWD: /usr/local/bin/cfgutil list-devices
%_developer ALL=(root) NOPASSWD: /usr/local/bin/cfgutil --ecid * install-application *

然而,从 @marcus-müller 的回答来看,我认为这只是情况,因为文件名中没有实际的空格。所以我想知道我是否还缺少其他东西。

答案1

Sudo 确实能够选择性地允许使用多字命令行,但是这是一个坏主意,到处都是

然而,据我所知,变量占位符不属于sudoers支持范围,坦率地说,这是有充分理由的;另一种选择很简单:

相反,我强烈建议您编写一个 shell 脚本,确保只有 root 可以修改它,将其标记为可执行。该脚本仅接受两个参数,并cfgutil根据需要调用:

#!/bin/sh
# Add string sanitation here if needed
cfgutil --ecid "$1" install-application "$2"

并允许它进入sudoers。然后你就可以sudo myscript argument1 argument2并且它起作用了。

相关内容