特别是我想允许没有密码的以下命令:
sudo cfgutil --ecid "${Device_ECID}" install-application "${in_File_Name}"
从一个呼叫到下一个呼叫的变化Device_ECID
。in_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
并且它起作用了。