дозволяючи користувачеві запускати 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.


Відповіді:


38

Файл sudoers є досить гнучким, а з цим і складністю. Тут ви хочете дозволити доступ до команди /bin/systemctlз певними параметрами:

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

В основному ви просто берете точний командний рядок, який ви ввели, жорстко кодуєте ім'я шляху для безпеки і вводите це у свій файл (або /etc/sudoers.d) sudoers . І зауважте, що "старт" і "перезапуск" зовсім різні, що стосується судо. дозволяючи одному не надавати доступ іншому.


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. Або зробити його псевдонімом оболонки.
rosuav

3
Увага: Інші дистрибуції systemctl є в /usr/bin:-(.
guettli
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.