При sysvinit
такой sudoers
записи будет достаточно:
%webteam cms051=/sbin/service httpd *
Это позволило бы такие команды, как:
sudo service httpd status
sudo service httpd restart
Теперь, с systemd
, имя службы является последним аргументом. Т.е. перезапуск службы будет сделан с помощью:
systemctl restart httpd.service
Естественно, я думал, что определение команды systemctl * httpd.service
будет работать, но это позволит что-то подобное, systemctl restart puppet.service httpd.service
что не является желаемым эффектом.
Учитывая это, каков был бы наилучший способ позволить пользователям без полномочий root контролировать system.d
службу? Это не должно быть sudoers
; возможно, изменение разрешения файла может быть достаточным?
sudo
конфигурации, но не могли бы вы просто сделать что-то подобноеcms051=systemctl * httpd.service
?Ответы:
Просто добавьте все необходимые команды
sudoers
отдельно:источник
cms051
?*
схожих шаблонов.Ответ @ jofel был именно тем, что мне нужно, чтобы получить рабочую настройку. Выкладываю это на всех остальных, спотыкаясь по этому вопросу. Мне нужен был способ
capistrano
перезапустить мое приложение Ruby после развертывания с моей локальной машины. Это значит, что мне нужен беспарольный доступ к перезапускуsystemd
сервисов. Это то, что у меня есть, и это прекрасно работает!Примечание : мой пользователь и группа называется
deployer
Поместить код в пользовательский файл здесь:
/etc/sudoers.d/deployer
Код:
источник
deployer
в этом случае, вы должны запуститьsystemctl
команду с sudo.Создайте псевдоним команды с командами, к которым вы хотите, чтобы они имели доступ. Затем назначьте группу этому псевдониму команды:
Также рекомендуется размещать любые изменения в вашем /etc/sudoers.d/filename вместо непосредственного редактирования файла sudoers. Убедитесь, что вы указали свой файл .d / filename в sudoers, что в любом случае делают большинство новых дистрибутивов. Размещение этих 2 строк в вашем sudoers должно сделать свое дело:
Примечание: этот знак # перед включенным не является комментарием. Это должно остаться.
источник
Лучше всего перечислить их, как предлагает Джофель .
Если бы я хотел позволить кому-то использовать ограниченное подмножество способностей команды, я бы не стал доверять подстановочным знакам в строке sudoers для этого. Даже если язык был более выразительным, чем глобусы-оболочки, слишком много угловых случаев, которые нужно отслеживать.
service httpd *
Строка " " относительно безопасна, потому что (проверьте это :)service
имеет только один полезный флаг (--status-all
), который не делает ничего особенно чувствительного, и (проверьте это тоже :)/etc/init.d/httpd
будет принимать только те командные строки, которые вы хотите разрешить.Если существует так много комбинаций, что перечисление их становится неудобным, вам, вероятно, следует усомниться в том, что вы делаете. Но вы можете дать им доступ к тщательно написанному вспомогательному скрипту, который запускает команду для них (очень похоже
/etc/init.d/http
). Даже в этом случае вы должны быть как можно точнее и точнее перечислять, какие именно команды и опции разрешены, и не передавать какой-либо пользовательский ввод непосредственно целевой команде.источник