如何在 sudoers 中为命令参数指定正则表达式

Ant*_*ioK 6 sudo

sudoers(5)手册页说可以在 sudoers 文件的命令行参数中使用 shell 样式的通配符(又名元或全局字符)。它们是*?[...][!...]

我的想法是在正则表达式样式中使用一些东西,例如/path/to/command -a[v]*, 表示command -a,command -av并且command -avvv...v在一行中(对于这种根据-v参数数量改变其详细程度的命令,例如tcpdump)。但它不起作用。

有没有办法做到这一点,而不是在每个中添加不同数量的/path/to/command -a -v多次?sudoers-v

Wil*_*Hay 5

版本 1.9.10开始,这些sudoers文件支持 POSIX 扩展正则表达式。根据手册,您可以通过以下方式实现您想要的:

/path/to/command ^-av*$
Run Code Online (Sandbox Code Playgroud)

在 1.9.10 之前的版本中,sudoers手册页相当清楚地表明不支持此功能。手册页中的注释表明它使用系统的fnmatch()函数来进行匹配。在基于 linux/glibc 的系统上,fnmatch()可以使用扩展的通配符格式,其表达能力与正则表达式类似,但语法不同。

因此,如果您应该能够sudo通过找到 sudo 调用 fnmatch 的位置来重建以支持扩展语法,请添加FNM_EXTMATCH到 flags 参数以及#define _GNU_SOURCE调用它的文件的顶部。

当然,如果您这样做,您将运行自己手动修补的 suid 二进制文件版本,因此请小心。