Дозволити користувачеві, котрий не має права доступу, перезапустити послугу


27

Фон:

Я створив додаток під назвою myappз Spring-boot. Він складається з самостійно виконуваної банки та сумісний із системними службами. Зараз я намагаюся інтегрувати це з джинкінами.

Що я хочу:

Я хочу, щоб дженкіни вміли:

  • зупинити послугу.
  • замініть банку.
  • перезапустити послугу.

Проблема:

На сьогоднішній день лише судорожники можуть запускати та зупиняти послуги. Я не хочу, щоб джинкіни були судором (це здається безладним).

Поточна структура:

У мене є користувач, myappякий має /home/myappпапку. Сформована банка викликається myappі розміщується на /home/myapp. Користувач myappє власником створеної банки:

myapp@myserver:~/backend$ ll
total 53900
drwxrwxr-x 2 myapp myapp     4096 Apr 25 17:09 ./
drwxr-xr-x 6 myapp myapp     4096 Apr 25 17:08 ../
-rw-rw-r-- 1 myapp myapp      511 Apr 20 16:13 application.properties
-rwxr--r-- 1 myapp myapp 55175294 Apr 20 19:06 backend-1.0-SNAPSHOT.jar*
lrwxrwxrwx 1 myapp myapp       24 Apr 20 19:20 myapp -> backend-1.0-SNAPSHOT.jar*
-rw-r--r-- 1 myapp myapp      179 Apr 20 19:26 myapp.service

Я розмістив ключ ssh, щоб jenkins міг увійти як myapp@myserver.

Оскільки myappє власником банки, я думаю, що може бути варіант, який дозволяє користувачеві myappтелефонувати systemctl start/stop myapp. Насправді я можу дзвонити, systemctl status myappале ні start/stop(запитується пароль користувача).

Будь-які пропозиції?


Я не бачу причини вважати sudoбезладним, це, як правило, так, як вам слід реалізувати щось подібне. Створіть групу, призначте її своєму користувачеві jenkins та за допомогою visudoнадайте обмежену команду для цієї служби для керування послугою
brent

@brent Чи є спосіб дозволити myappтелефонувати sudo systemctlлише за власну службу?
Арно Денойель

Відповіді:


24

sudoце шлях. Створіть нову групу ( appadminнаприклад), введіть jenkinsу неї свого користувача та visudoдодайте новий запис із обмеженим списком команд, наприклад:

Cmnd_Alias MYAPP_CMNDS = /bin/systemctl start myapp, /bin/systemctl stop myapp
%appadmin ALL=(ALL) MYAPP_CMNDS

Якщо ви хочете, щоб appadminгрупа змогла керувати послугою, не вводячи спочатку пароль (корисно, якщо користувач має автентифікацію, наприклад, ключем SSH),

Cmnd_Alias MYAPP_CMNDS = /bin/systemctl start myapp, /bin/systemctl stop myapp
%appadmin ALL=(ALL) NOPASSWD: MYAPP_CMNDS

1
Не забудьте замовлення заяв unix.stackexchange.com/a/13058/86443
Гілберто,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.