这个 sudoers 命令的第二种形式是如何调用的

这个 sudoers 命令的第二种形式是如何调用的

表格 1 - who where=(as_whom) What -lisa ALL=(ALL) /usr/bin/passwd *, !/usr/bin/passwd root

表格 2 - 谁在哪里=? -lisa ALL= /usr/bin/passwd [a-z0-9]*, !/usr/bin/passwd root

在第一种形式中,正则表达式不起作用,只能进行通配,而第二种形式似乎支持正则表达式,但我找不到任何关于它的名称的文档,只有一个组说明符应该在那里!

答案1

man sudoers.5:

Wildcards

    sudo allows shell-style wildcards (aka meta or glob characters)
    to be used in host names, path names and command line arguments 
    in the sudoers file.  Wildcard matching is done via the glob(3) 
    and fnmatch(3) functions as specified by IEEE Std 1003.1 
    (“POSIX.1”).

    *         Matches any set of zero or more characters (including 
              white space).

    ?         Matches any single character (including white space).

    [...]     Matches any character in the specified range.

    [!...]    Matches any character not in the specified range.

    \x        For any character ‘x’, evaluates to ‘x’.  This is 
              used to escape special characters such as: ‘*’, ‘?’, 
              ‘[’, and ‘]’.

    Note that these are not regular expressions.  Unlike a regular 
    expression there is no way to match one or more characters 
    within a range.

最后一个注释很有趣。手册页继续描述命令行参数中的通配符应谨慎使用,并定义通配符规则的一些例外情况。

但是您的第二行似乎支持正则表达式的原因是因为它看起来与某些正则表达式规则非常相似。

使用正则表达式,表达式[a-z0-9]*通常表示“a-z0-9 范围内的任意数量的字符”,但在本例中,表示“a-z0-9 范围内的一个字符,后跟任意一组零个或多个字符” 。

相关内容