/etc/sudoers позволяет пользователю использовать sudo в общих целях, без запроса пароля только для одной команды

/etc/sudoers позволяет пользователю использовать sudo в общих целях, без запроса пароля только для одной команды

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

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

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

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

фред ВСЕ=(ВСЕ) БЕЗ ПАРОЛЯ: /usr/sbin/service

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

Просмотр BNF документации

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 ВСЕ=(ВСЕ : ВСЕ) ВСЕ, БЕЗ ПАРОЛЯ: /usr/sbin/service

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

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

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

Спасибо.

решение1

Команды внизу конфигурации переопределяют те, что выше. Это указано в документации по адресу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 просто смехотворна. Я читал отличную (легко читаемую) книгу об этом некоторое время назад (Мастерство Судо(Майкл У. Лукас) и этот пример работает у меня на нескольких машинах Linux и BSD.

решение2

Привет, это может сработать. Попробуйте войти в систему как root и выполните следующие команды. Добавьте следующие строки в файл sudoers.

фред ВСЕ=(ВСЕ)БЕЗПАРОЛЯ:ВСЕ

Связанный контент