Sudo:如何从 sudo 中排除一个特定的命令行参数

Sudo:如何从 sudo 中排除一个特定的命令行参数

我们希望将一个命令(例如:mycommand)添加到 sudo 中供所有用户使用,但我们希望排除一个特定的命令行选项 -i。复杂的因素是命令行参数可以组合,这使得构建正则表达式等变得更加困难。因此,我们希望允许:

  • sudo 我的命令
  • sudo mycommand -p -f 某事 -w
  • sudo mycommand -pf 某事 -w

但不是:

  • sudo 我的命令-
  • sudo mycommand -p --f 某物-w
  • sudo mycommand -pf 某物-w

到目前为止,我得到了不同的结果,例如错误地允许“sudo mycommand -piw”或错误地阻止“sudo mycommand -pf somethng-w”

除了编写包装脚本之外,还有其他建议吗?

答案1

可以使用 sudoers 文件中的模式排除命令行选项。但是,这很容易出错,因此包装脚本通常是更好的方法。

如果您使用的是 sudo 1.9.10 或更高版本,则可以在 sudoers 文件中使用正则表达式,它允许您执行以下操作:

someuser ALL = /usr/bin/swlist, !/usr/bin/swlist ^.*-i.*$

这将拒绝任何包含“-i”的命令行参数。但是,如果命令支持复合选项,则不会捕获以下内容:

$ sudo swlist -pi -f something -w

在那种(可能)情况下,您将需要类似以下内容:

someuser ALL = /usr/bin/swlist, !/usr/bin/swlist ^.*-[^[:space:]]*i.*$

旧版本的 sudo 仅支持 shell 样式的通配符模式,这些模式功能有限并且不支持您想要执行的操作。

相关内容