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

25

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

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

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

$ getent group LimitedAdmins
LimitedAdmins: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_reset
    Defaults    mail_badpass
    Defaults    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 specification
    root    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- это не комментарий, а часть синтаксиса директивы #include ).

Однако после запуска по-прежнему появляется запрос пароля 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.

MikeiLL
источник

Ответы:

38

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

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

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

rosuav
источник
1
Кажется, не работает. Я могу скопировать /bin/systemctl restart unicorn_my_app.serviceпрямо из /etc/sudoers.d/limitedadminsфайла и запустить его в CLI, и мне будет предложено ввести пароль. Нужно ли ubuntuгде-то указывать tp или ALLоткрыть его для всех пользователей для всех доменов?
MikeiLL
5
Вы бы запустились, sudo /bin/systemctl restart unicorn_my_app.serviceа затем запустились без пароля. (размещение в качестве комментария в случае, если ответ PsiOps отделен от этого)
rosuav
1
@rosuav Есть ли способ, чтобы мы могли запустить его прямо как systemctl restart myapp.serviceбез использования sudo.
kabirbaidhya
Не совсем, но вы можете поместить команду в скрипт (с префиксом sudo), а затем поместить этот скрипт в $ PATH. Или сделайте псевдоним оболочки.
Росав
3
Внимание: на других дистрибутивах systemctl есть /usr/bin:-(.
guettli