Question Autoriser un utilisateur non root à redémarrer un service


Contexte :

J'ai créé une application appelée myapp avec Spring-boot. Il consiste en un fichier jar auto-exécutable et est compatible avec les services systemd. Maintenant, j'essaye de l'intégrer à Jenkins.

Ce que je veux:

Je veux que Jenkins soit capable de:

  • arrêtez le service.
  • remplacer le pot.
  • redémarrez le service.

Problème:

Jusqu'à présent, seuls les sudoers peuvent démarrer / arrêter les services. Je ne veux pas que Jenkins soit un sudoer (ça a l'air malpropre).

Structure actuelle:

J'ai un utilisateur myapp qui a un /home/myapp dossier. Le pot généré est appelé myapp et est placé à /home/myapp. L'utilisateur myapp est le propriétaire du pot généré:

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

J'ai placé une clé SSH pour que Jenkins puisse se connecter en tant que myapp@myserver.

Comme myapp est le propriétaire du pot, je pense qu'il pourrait y avoir une option qui permet à l'utilisateur myapp appeler systemctl start/stop myapp. En fait, je peux appeler systemctl status myapp mais non start/stop (le mot de passe root est demandé).

Aucune suggestion?


19
2018-04-25 15:39


origine


Je ne vois pas la raison à considérer sudo malpropre, c’est généralement la façon dont vous devriez mettre en œuvre quelque chose comme ça. Créez un groupe, assignez-le à votre utilisateur jenkins et utilisez visudo fournir un jeu de commandes limité à ce groupe pour la gestion du service - brent
@brent Est-il possible d'autoriser myapp appeler sudo systemctl seulement pour son propre service? - Arnaud Denoyelle


Réponses:


sudo est le chemin à parcourir. Créer un nouveau groupe (appadmin par exemple), mettez votre jenkins utilisateur, et en utilisant visudo ajoutez une nouvelle entrée avec une liste limitée de commandes, par exemple:

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

Si tu veux le appadmin groupe pour pouvoir utiliser le service sans entrer de mot de passe au préalable (utile si l'utilisateur n'est authentifié que par une clé SSH par exemple),

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

20
2018-04-25 15:58



N'oubliez pas l'ordre de déclaration unix.stackexchange.com/a/13058/86443 - Gilberto