किसी सेवा को पुनः आरंभ करने के लिए एक गैर-रूट उपयोगकर्ता की अनुमति


27

पृष्ठभूमि :

मैंने एक ऐप बनाया है जिसका नाम myappहै Spring-boot। इसमें एक स्व-निष्पादन योग्य जार होता है और सिस्टमड सेवाओं के साथ संगत होता है। अब, मैं इसे जेनकिंस के साथ एकीकृत करने की कोशिश कर रहा हूं।

मैं क्या चाहता हूँ:

मैं चाहता हूँ कि जेनकींस सक्षम हों:

  • सेवा बंद करो।
  • जार बदलें।
  • सेवा को पुनरारंभ करें।

संकट:

अब तक, केवल sudoers सेवाएं शुरू / बंद कर सकते हैं। मैं नहीं चाहता कि जेनकींस एक सुडोल बन जाए (यह गन्दा लगता है)।

वर्तमान संरचना:

मेरे पास एक उपयोगकर्ता है myappजिसमें एक /home/myappफ़ोल्डर है। उत्पन्न जार कहा जाता है 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रूट पासवर्ड नहीं पूछा गया है)।

कोई सुझाव?


मैं sudoगन्दा विचार करने का कारण नहीं देखता , यह आम तौर पर जिस तरह से आपको कुछ इस तरह से लागू करना चाहिए था। एक समूह बनाएं, अपने जेंकिंस उपयोगकर्ता को इसे असाइन करें और 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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.