Подстановочные знаки с несколькими аргументами для файла sudoers?

2

Я пытаюсь выяснить, как создать запись в sudoer, где я допускаю ограниченный набор аргументов, некоторые необязательные, но команда по-прежнему очень ограничена.

Есть ли простой способ ограничить эти ограничения?

Я бы хотел, чтобы пользователь мог запускать с флагом -w и необязательным значением, но при этом иметь ограничения. Я не хочу жестко задавать значения для опции -w. Пользователь должен иметь возможность выполнить любую из этих команд, где 10 - любая цифра.

/usr/bin/iptables -nvL *
/usr/bin/iptables -w -nvL *
/usr/bin/iptables -w 10 -nvL *

Я придумал эти 4 записи. Есть ли лучший способ определить дополнительные значения?

username ALL=(root) NOPASSWD: /usr/bin/iptables -nvL *
username ALL=(root) NOPASSWD: /usr/bin/iptables -w -nvL *
username ALL=(root) NOPASSWD: /usr/bin/iptables -w [[\:digit\:]] -nvL *
username ALL=(root) NOPASSWD: /usr/bin/iptables -w [[\:digit\:]][[\:digit\:]] -nvL *
lf4
источник

Ответы:

2

Вы можете использовать Cmnd_Aliasфункцию.

Cmnd_Alias ITEM_IPTABLES = /usr/bin/iptables (-w)? [[\:digit\:]]* -nvL *

Затем добавьте Cmnd_Aliasопределенный вами список команд, который вы хотите игнорировать, спрашивая пароль sudo.

USERNAME ALL=(root) NOPASSWD: ITEM_IPTABLES

От 5 человек :

? Означает, что предыдущий символ (или группа символов) является необязательным.
То есть оно может появиться один раз или не появиться вообще.

* Означает, что предыдущий символ (или группа символов) может появляться ноль или более раз.

Круглые скобки используются для определения группы символов.

αғsнιη
источник
1
Большой! Это было именно то, что я хотел. Я должен был прочитать всю справочную страницу. Я думал, что sudoers использовал globing, никогда не слышал о EBNF. Благодарю.
LF4
Это не верно. Цитата из справочной страницы о EBNF, который является формальным языком, используемым на справочной странице для описания грамматики языка sudoers. Это не имеет ничего общего с подстановочными знаками в правилах sudo ..
Scrutinizer
2

Я не боюсь: /
Если вы не хотите использовать символы подстановки, такие как »?« Или даже »*«, вам придется предоставить именно то, что вы хотите.

Согласно man-странице sudoers, он предоставляет только общие символы:

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.
М. Мензель
источник