Назад | Перейти на главную страницу

Разрешить пользователю использовать sudo как любому пользователю в группе

Я запускаю службу, в которой у меня есть пользователи, которые запускают службы из своих домашних каталогов. Все они в группе serviceusers, и у меня есть пользователь, который будет выполнять автоматические задачи, инициированные с веб-сайта в файлах пользователей службы. Давай позвоним ему taskrunner.

Я пытаюсь разрешить taskrunner sudo как любой пользователь в serviceusers.

Теперь я попытался сделать это через файл sudoers:

serviceuser=ALL(serviceusers:serviceusers) NOPASSWD:ALL

(Я понимаю, что «serviceusers: serviceusers» означает пользователя serviceuser и группу serviceuser. Но я не хочу taskrunner пользователь, чтобы иметь возможность использовать sudo как все пользователи. Только пользователи в serviceusers группа)

Чтобы быть более конкретным, я хочу иметь возможность запускать sudo -u serviceuser1 ... не sudo -g serviceusers....

Я пытался добавить /etc/pam.d/sudo для того, чтобы позволить это. Но я не могу найти очень хороших ресурсов для правильного синтаксиса файла pam.d / sudo.


Я знаю, что могу добавить в pam.d / su и разрешить пользователю использовать su для пользователей в группе, так что это может быть вариант, однако мне было интересно, возможно ли это с помощью простого sudo.

Я новичок в администрировании серверов, поэтому, если это неправильный способ, дайте мне знать несколько полезных ресурсов.

Джеймс.

Я считаю, что с помощью этого sudoers строка конфигурации:

taskrunner ALL = (%serviceusers) NOPASSWD: ALL

Строка выше говорит sudo разрешить taskrunner пользователь может запускать любые команды от имени любого пользователя, который является членом serviceusers группа. Связанные разделы из man 5 sudoers являются:

 User_Spec ::= User_List Host_List '=' Cmnd_Spec_List \
               (':' Host_List '=' Cmnd_Spec_List)*

 Cmnd_Spec_List ::= Cmnd_Spec |
                    Cmnd_Spec ',' Cmnd_Spec_List

 Cmnd_Spec ::= Runas_Spec? Option_Spec* Tag_Spec* Cmnd

 Runas_Spec ::= '(' Runas_List? (':' Runas_List)? ')'

 Runas_List ::= Runas_Member |
                Runas_Member ',' Runas_List

 Runas_Member ::= '!'* user name |
                  '!'* #uid |
                  '!'* %group |
                  '!'* %#gid |
                  '!'* %:nonunix_group |
                  '!'* %:#nonunix_gid |
                  '!'* +netgroup |
                  '!'* Runas_Alias

А User_Spec определяет, какие команды пользователь может запускать (и как пользователь) на указанных хостах. По умолчанию команды запускаются от имени пользователя root, но это можно изменить для каждой команды. Основная структура пользовательской спецификации - «кто где = (as_whom) что».

А Runas_Spec определяет пользователя и / или группу, от имени которой может выполняться команда. Полностью уточненный Runas_Spec состоит из двух Runas_Lists (как определено выше), разделенных двоеточием (‘:’) и заключенных в круглые скобки. Первый Runas_List указывает, для каких пользователей команда может быть запущена с помощью параметра sudo -u. Второй определяет список групп, которые можно указать с помощью параметра sudo -g. Если оба Runas_Lists указаны, команда может быть запущена с любой комбинацией пользователей и групп, перечисленных в их соответствующих Runas_List. Если указан только первый, команда может быть запущена от имени любого пользователя в списке, но не -грамм опция может быть указана. Если первый Runas_List пусто, но указано второе, команда может быть запущена от имени вызывающего пользователя с любой группой, указанной в Runas_List. Если оба Runas_Lists пусты, команда может быть запущена только от имени вызывающего пользователя. Если нет Runas_Spec указано, что команда может быть запущена от имени пользователя root, и никакая группа не может быть указана.

Таким образом, смысл предложенной мной строки конфигурации:

  • User_Spec: taskrunner ALL = (% serviceusers) NOPASSWD: ALL
  • User_List: Taskrunner
  • Host_List: ВСЕ
  • Cmnd_Spec_List: (% serviceusers) NOPASSWD: ALL
  • Cmnd_Spec: (% serviceusers) NOPASSWD: ALL
  • Runas_Spec: (% serviceusers)
  • Runas_List: % serviceusers
  • Runas_Member: % serviceusers
  • Tag_Spec: NOPASSWD:
  • Cmnd: ВСЕ