Какой правильный синтаксис sudoers для добавления пользователя?

50

Согласно комментариям в /etc/sudoers(Fedora 13):

## Syntax:
##
##    user  MACHINE=COMMANDS
##
## The COMMANDS section may have other options added to it.

Мои два связанных вопроса:

  1. Что ALL=(ALL) ALLозначает в следующей строке:

    root  ALL=(ALL)   ALL
    
  2. Я проверил эти две строки, но не могу понять, насколько они функционально отличаются:

    superadm    ALL=(ALL)    ALL
    superadm    ALL=ALL
    

Я прочитал руководство, но трудно следовать спецификации синтаксиса. Я понял, что эта (ALL) ALLчасть является спецификацией команды и тега, но я все еще не могу разобраться с этим.

Бельмин Фернандес
источник

Ответы:

91

Примечание: я отвечаю 1. , поскольку Игнасио уже ответил 2 ..

В следующей sudoзаписи:

superadm  ALL=(ALL)   ALL

Есть четыре поля:

  • Первый указывает пользователя, которому будут предоставлены привилегии для некоторых команд.
  • Второй редко используется. Это список имен хостов, для которых эта запись sudo будет действовать. В стандартных настройках релевантен только один хост (localhost), поэтому это поле обычно оставляется как ALL.
  • Четвёртом поле список команд superadmбудет иметь возможность работать с повышенными привилегиями. ALLозначает все команды. В противном случае используйте список команд через запятую.
  • Третье поле (написанное (…)необязательно) указывает, какие пользователи (и группы) superadmсмогут выполнять следующие команды: ALLозначает, что они могут выбрать что угодно (неограниченно). Если это поле опущено, оно означает то же, что и (root).

Пример:

alan   ALL = (root, bin : operator, system) /bin/ls, /bin/kill

Здесь alanразрешено запускать две команды /bin/lsи /bin/killкак root(или bin), возможно, с дополнительными operatorили systemгрупповыми привилегиями.

Так что alanможете выбрать запуск lsот имени binпользователя с operatorпривилегиями группы, например:

sudo -u bin -g operator /bin/ls /whatever/directory

Если -uопущен, это так же, как -u root. Если -gопущен, дополнительные привилегии группы не предоставляются.

Стефан Хименес
источник
1
Ну, это, наверное, лучший ответ за всю историю ...
Дэвид Бец
1
Я заметил, что \nсимвол новой строки является обязательным в конце записи в sudoers или /etc/sudoers.d/your_file_name
ramonrails
Также вы можете использовать подстановочные знаки в именах хостов, путевых именах и аргументах командной строки. Как /bin/cat /var/log/messages.?или /bin/ls /var/log/*больше информации здесь
Алекс
9

На sudoers(5)странице руководства , в разделе ОПИСАНИЕ , подраздел Runas_Spec :

Первый Runas_List указывает , какие пользователи команда может быть запущена как через sudo«s -uвариант.

...

Если Runas_Spec не указан, команда может быть запущена как, rootи никакая группа не может быть указана.

Таким образом, нет никакой функциональной разницы при попытке выполнить команды как root, то есть, когда не используется -uс sudo. Разница имеет значение при попытке запуска команд от имени других пользователей; последний предотвратит это, но первый позволит.

Игнасио Васкес-Абрамс
источник