Разрешение пользователю запускать службы systemctl/systemd без пароля

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

Конкретно systemctl restart unicorn_my_app.service.

Следовали инструкциям здесь чтобы добавить пользователя ubuntu во вновь созданную группу, LimitedAdmins, что подтверждается:

$ getent group LimitedAdminsLimitedAdmins:x:1001:ubuntu

Создал новый файл, limitedadmins (используя sudo vim) в /etc/sudoers.d каталог, содержащий следующий текст:

%LimitedAdmins ALL=NOPASSWD: /etc/init.d/unicorn_ofn_america restart, /etc/init.d/unicorn_ofn_america start

Я тоже пробовал:

%LimitedAdmins ALL=NOPASSWD: /bin/systemctl/unicorn_ofn_america restart, /bin/systemctl/unicorn_ofn_america start

/bin/systemd)

Содержание /etc/sudoers/ является значением по умолчанию, подтвержденным с помощью sudo visudo (или sudo cat /etc/sudoers):

## This file MUST be edited with the 'visudo' command as root.## Please consider adding local content in /etc/sudoers.d/ instead of# directly modifying this file.## See the man page for details on how to write a sudoers file.#Defaults    env_resetDefaults    mail_badpassDefaults    secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"# Host alias specification# User alias specification# Cmnd alias specification# User privilege specificationroot    ALL=(ALL:ALL) ALL# Members of the admin group may gain root privileges%admin ALL=(ALL) ALL# Allow members of group sudo to execute any command%sudo   ALL=(ALL:ALL) ALL# See sudoers(5) for more information on "#include" directives:#includedir /etc/sudoers.d

(Хэш-вход в #includedir это не комментарий, а часть #включить синтаксис директивы).

Однако после запуска по-прежнему появляется запрос пароля systemctl restart unicorn_my_app.service

Служение существует в init.d каталог:

$ ls -l /etc/init.d | grep unicorn-rwxr--r-- 1 ubuntu ubuntu 1874 Oct 29 06:47 unicorn_my_app

Пробовал chmodding 755 в приложении, но не думаю, что это должно иметь значение, поскольку ubuntu в любом случае, он принадлежит ей.

Даже попробовал перезагрузить систему, но безрезультатно. Я пропустил какой-то шаг, например, перезагрузку / перезагрузку)? Настройка что-то не так?

Я должен также упомянуть, что я использовал vim чтобы создать новый файл в /etc/sudoers.d, поскольку кажется , что visudo команда - это только для редактирования /etc/sudoers.

ОБНОВЛЕНИЕ

Похоже, вы можете редактировать дополнительные конфигурационные файлы sudo с помощью visudo. Смотреть ниже.

Файл sudoers довольно гибкий, и вместе с этим возникает сложность. То, что вы хотите здесь, - это разрешить доступ к команде /bin/systemctl, с конкретными параметрами:

%LimitedAdmins ALL=NOPASSWD: /bin/systemctl restart unicorn_my_app.service

По сути, вы просто берете точную командную строку, которую вы бы ввели, жестко кодируете имя пути в целях безопасности и помещаете его в свой файл sudoers (или /etc/sudoers.d). И обратите внимание, что "запуск" и "перезапуск" совершенно разные в том, что касается sudo; разрешение одного не предоставит доступ к другому.

Я тоже думал, что висудо работает только над /etc/sudoers но, к счастью, я ошибся.

visudo может использоваться для изменения существующих файлов в /etc/sudoers.d или создавать новые. Параметр -f позволяет это сделать. Если команда вызывается следующим образом:

visudo -f /etc/sudoers.d/permissions_for_subset_of_users

вы можете использовать возможности проверки visudo, чтобы обеспечить безопасное редактирование sudoers.

Кроме того, если вы используете какой-либо CI / CD или управление конфигурацией, вы можете использовать visudo -cf <name_of_file> чтобы выполнить проверку конфигурации. (наш ведущий системный администратор предоставил эту вторую часть знаний).

Ссылка: https://www.sudo.ws/man/1.8.13/visudo.man.html

Смотрите также sudo - How could we allow non-root users to control a systemd service? - Unix & Linux Stack Exchange