Kök olmayan bir kullanıcının bir servisi yeniden başlatmasına izin verme


27

Arka fon :

Aradım bir uygulama oluşturdu myappile Spring-boot. Kendiliğinden çalıştırılabilen bir kavanozdan oluşur ve sistem servisleri ile uyumludur. Şimdi, onu jenkins ile bütünleştirmeye çalışıyorum.

İstediğim:

Jenkins’in şunları yapabilmesini istiyorum:

  • Hizmeti durdur.
  • kavanozu değiştirin.
  • servisi yeniden başlatın.

Sorun:

Şimdiye kadar sadece sudo'lar hizmetleri başlatabilir / durdurabilir. Jenkins'in bir sudoer olmasını istemiyorum (dağınık görünüyor).

Mevcut yapı:

myappBir /home/myappklasörü olan bir kullanıcı var . Üretilen kavanoz çağırılır myappve yerleştirilir /home/myapp. Kullanıcı myappoluşturulan kavanozun sahibi:

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

Jenkins olarak giriş yapabilmek için bir ssh anahtarı yerleştirdim myapp@myserver.

myappKavanozun sahibi olduğu gibi kullanıcının myapparamasına izin veren bir seçenek olabileceğini düşünüyorum systemctl start/stop myapp. Aslında arayabilirim systemctl status myappama arayamıyorum start/stop(root şifresi soruluyor).

Baska öneri?


sudoDağınıklığı düşünmenin nedenini görmüyorum , genellikle böyle bir şeyi uygulamanız gerekir. Bir grup oluşturun, jenkins kullanıcınızı ona atayın visudove hizmetini yönetmek için bu gruba sınırlı bir komut sağlayın kullanarak
brent

@ brent Sadece kendi servisi myappiçin arama yapmanın bir yolu var mı sudo systemctl?
Arnaud Denoyelle

Yanıtlar:


24

sudogitmenin yolu bu. Yeni bir grup oluşturun ( appadminörneğin, jenkinskullanıcınızı içine yerleştirin ve visudosınırlı sayıda komut içeren yeni bir giriş ekleyin), örneğin:

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

appadminGrubun önce şifreyi girmeden servisi kullanabilmesini istiyorsanız (örneğin, yalnızca bir SSH anahtarıyla kimliği doğrulanmışsa yararlı),

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

1
Açıklama sırasını unutma unix.stackexchange.com/a/13058/86443
Gilberto
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.