Разрешение некорневому пользователю перезапустить сервис

27

Задний план :

Я создал приложение под названием myappс Spring-boot. Он состоит из исполняемого файла jar и совместим с сервисами systemd. Теперь я пытаюсь интегрировать это с Дженкинсом.

Что я хочу:

Я хочу, чтобы Дженкинс мог:

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

Проблема:

До сих пор только sudoers может запускать / останавливать сервисы. Я не хочу, чтобы Дженкинс был sudoer (это кажется грязным).

Текущая структура:

У меня есть пользователь, у myappкоторого есть /home/myappпапка. Созданная банка называется myappи помещается в /home/myapp. Пользователь myappявляется владельцем сгенерированного jar:

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, чтобы Дженкинс мог войти в систему myapp@myserver.

Как myappи владелец банки, я думаю, что может быть опция, которая позволяет пользователю myappзвонить systemctl start/stop myapp. На самом деле я могу позвонить, systemctl status myappно нет start/stop(пароль root спрашивается).

Какие-либо предложения?

Арно Денойель
источник
Я не вижу смысла считать это sudoбеспорядочным, как правило, вы должны реализовывать что-то подобное. Создайте группу, назначьте ей своего пользователя jenkins и, используя, visudoпредоставьте этой группе ограниченный набор команд для управления сервисом
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
Не забывайте выписывать
Гилберто