sudoers(5)
联机帮助页说 shell 样式的通配符(又名元字符或 glob 字符)可以在 sudoers 文件的命令行参数中使用。它们是*
、?
、[...]
和[!...]
。
我的想法是使用正则表达式风格的一些东西,例如/path/to/command -a[v]*
, 来表示command -a
,command -av
和command -avvv...v
在一行中(对于这样的命令,根据-v
参数的数量改变其详细程度,例如tcpdump
)。但这不起作用。
有没有什么方法可以做到这一点,而不是/path/to/command -a -v
多次添加sudoers
不同数量的内容-v
?
答案1
从...开始版本1.9.10,sudoers
文件支持 POSIX 扩展正则表达式。根据手册,您可以通过以下方式实现您想要的:
/path/to/command ^-av*$
在 1.9.10 之前的版本中,sudoers
手册页相当清楚地表明不支持此功能。手册页中的注释表明它使用系统的fnmatch()
函数来进行匹配。在基于 linux/glibc 的系统上,fnmatch()
可以使用扩展的通配符格式,其表达能力与正则表达式类似,但语法不同。
因此,如果您应该能够sudo
通过找到 sudo 调用 fnmatch 的位置来重建以支持扩展语法,请添加FNM_EXTMATCH
到 flags 参数以及#define _GNU_SOURCE
调用它的文件的顶部。
当然,如果您这样做,您将运行自己手动修补的 suid 二进制版本,所以要小心。