Назад | Перейти на главную страницу

Разрешение пользователю без полномочий root перезапускать службу

Задний план :

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

Что я хочу:

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

Проблема:

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

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

У меня есть пользователь myapp который имеет /home/myapp папка. Сгенерированный jar называется 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, чтобы Дженкинс мог войти как myapp@myserver.

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

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

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