У меня есть запись в /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 может только перезапустить этот сервер без пароля?
Благодарю.