Consentire a un utente non root di riavviare un servizio


27

Sfondo :

Ho creato un'app chiamata myappcon Spring-boot. È costituito da un vaso auto-eseguibile ed è compatibile con i servizi di sistema. Ora sto cercando di integrarlo con jenkins.

Quello che voglio:

Voglio che jenkins sia in grado di:

  • interrompere il servizio.
  • sostituire il barattolo.
  • riavviare il servizio.

Problema:

Fino ad ora, solo i sudoer possono avviare / interrompere i servizi. Non voglio che Jenkins sia un sudoer (sembra disordinato).

Struttura attuale:

Ho un utente myappche ha una /home/myappcartella. Il jar generato viene chiamato myapped è posizionato in /home/myapp. L'utente myappè il proprietario del vaso generato:

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

Ho inserito una chiave ssh in modo che jenkins possa accedere come myapp@myserver.

Come myappè il proprietario del vaso, penso che potrebbe esserci un'opzione che consente all'utente myappdi chiamare systemctl start/stop myapp. In realtà, posso chiamare systemctl status myappma non start/stop(viene richiesta la password di root).

Eventuali suggerimenti?


Non vedo il motivo per considerare sudodisordinato, è generalmente il modo in cui dovresti implementare qualcosa del genere. Crea un gruppo, assegna il tuo utente jenkins ad esso e usando visudofornire un set di comandi limitato a quel gruppo per la gestione del servizio
brent

@brent C'è un modo per consentire myappdi chiamare sudo systemctlsolo per il proprio servizio?
Arnaud Denoyelle,

Risposte:


24

sudoè la strada da percorrere. Crea un nuovo gruppo ( appadminad esempio), inseriscici il tuo jenkinsutente e usando visudoaggiungi una nuova voce con un elenco limitato di comandi, ad esempio:

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

Se desideri che il appadmingruppo sia in grado di gestire il servizio senza immettere prima una password (utile se l'utente è autenticato solo da una chiave SSH, ad esempio),

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

1
Non dimenticare l'ordine di dichiarazione unix.stackexchange.com/a/13058/86443
Gilberto
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.