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

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

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

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

有没有什么方法可以做到这一点,而不是/path/to/command -a -v多次添加sudoers不同数量的内容-v

答案1

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

/path/to/command ^-av*$

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

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

当然,如果您这样做,您将运行自己手动修补的 suid 二进制版本,所以要小心。

相关内容