1

У меня есть запись в /etc /sudo для пользователя, который может выполнять sudo для всех команд.

Фред ВСЕ =(ВСЕ: ВСЕ) ВСЕ

Согласно документации, последний ALL отвечает за предоставление доступа ко всем командам.

Я хотел бы, чтобы fred мог выполнить перезапуск nginx в Ubuntu 14.04 без указания пароля sudo, но при этом сохранял возможность вызывать sudo для других команд. Документация sudoers не ясна, но я верю

fred ALL =(ALL) NOPASSWD: /usr /sbin /service

только позволяет Фреду выполнить одну команду. Я хочу дать Фреду возможность запускать все команды от имени root через sudo, со всеми, кроме /usr /sbin /service, требующими пароль.

Глядя на документацию БНФ

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? SELinux_Spec? Solaris_Priv_Spec? Tag_Spec* Cmnd 

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

SELinux_Spec ::= ('ROLE=role' | 'TYPE=type') 

Solaris_Priv_Spec ::= ('PRIVS=privset' | 'LIMITPRIVS=privset')   

Tag_Spec ::= ('EXEC:' |
              'NOEXEC:' | 'FOLLOW:' | 'NOFOLLOW' |
              'LOG_INPUT:' | 'NOLOG_INPUT:' | 'LOG_OUTPUT:' |
              'NOLOG_OUTPUT:' | 'MAIL:' | 'NOMAIL:' | 'PASSWD:' |
              'NOPASSWD:' | 'SETENV:' | 'NOSETENV:')

похоже, что я могу использовать несколько Cmnd_Spec_Lists таким образом

fred ALL =(ALL: ALL) ALL, NOPASSWD: /usr /sbin /service

Но в документации не сказано, что последний NOPASSWD: Cmnd_Spec переопределит корневой доступ для команды ALL только для этой команды.

Это то, что мне нравится делать правильно с первого раза, может ли кто-нибудь подтвердить, пожалуйста, что последняя строка будет работать (или, альтернативно, сказать, что она не будет работать) для конкретной цели, пожалуйста?

Кроме того, если он работает, чтобы позволить fred запускать службу без пароля sudo, есть ли способ, которым я могу ограничить аргументы для службы, чтобы fred мог работать только без пароля на службе nginx, или даже лучше, поэтому fred может только перезапустить этот сервер без пароля?

Благодарю.

2 ответа2

0

Привет! Это может сработать. Попробуйте войти в систему как root и следуйте приведенным ниже командам. $ И добавьте следующие строки в файл sudoers.

Фред ALL =(ВСЕ)NOPASSWD: ВСЕ

0

Команды внизу конфига переопределяют те, что указаны выше. В документации по адресу https://www.sudo.ws/man/1.8.15/sudoers.man.html#SUDOERS_FILE_FORMAT упоминается, что это не является наименее конкретным, если вы не упорядочите их таким образом.

Я делаю это, используя несколько строк. Несколько строк и правил легче читать и понимать в будущем, когда все становится сложнее. Несколько строк могут помочь вам установить порядок.

# I don't know what order this is interpreted in:
fred ALL=(ALL : ALL) ALL, NOPASSWD: /usr/sbin/service

# I do know what order this is interpreted in:
fred ALL=(ALL) ALL
fred ALL=(ALL) NOPASSWD: /usr/sbin/service

Следующие строки взяты из моего файла sudoers. Разрешить членам группового wheel запускать все команды, а затем выполнять команды в псевдониме REBOOT без пароля.

Cmnd_Alias      REBOOT = /sbin/halt, /sbin/reboot, \
                         /sbin/poweroff, /sbin/shutdown
%wheel ALL=(ALL) ALL
%wheel ALL=(ALL) NOPASSWD: REBOOT

К сожалению, у меня мало публичных документов, на которые можно было бы указать. Справочная страница sudoers смешна. Я прочитал большую (простую для чтения) книгу об этом некоторое время назад (Sudo Mastery от Michael W. Lucas), и этот пример работает для меня на нескольких машинах Linux и BSD.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .