표 1 - 누가 어디서 =(as_whom) 무엇을 -lisa ALL=(ALL) /usr/bin/passwd *, !/usr/bin/passwd root
표 2 - 누가 어디에 있습니까=? -lisa ALL= /usr/bin/passwd [a-z0-9]*, !/usr/bin/passwd root
첫 번째 형식에서는 정규식이 작동하지 않고 globbing만 수행되는 반면 두 번째 형식은 정규식을 지원하는 것 같지만 해당 이름에 대한 문서를 찾을 수 없으며 그룹 지정자만 거기에 있어야 합니다!
답변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 범위의 한 문자 뒤에 0개 이상의 문자 집합이 뒤따름"을 의미합니다. .