Systemd
允許非 root 使用者重新啟動服務
背景 :
myapp
我創建了一個名為Spring-boot
. 它由一個自可執行的 jar 組成,並與 systemd 服務兼容。現在,我正在嘗試將它與 jenkins 集成。我想要的是:
我希望詹金斯能夠:
- 停止服務。
- 更換罐子。
- 重新啟動服務。
問題:
到目前為止,只有 sudoers 可以啟動/停止服務。我不希望 jenkins 成為 sudoer(看起來很亂)。
目前結構:
我有一個使用者
myapp
有一個/home/myapp
文件夾。生成的 jar 被呼叫myapp
並放置在/home/myapp
. 使用者myapp
是生成的 jar 的所有者: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 密鑰,以便 jenkins 可以登錄為
myapp@myserver
.與
myapp
jar 的所有者一樣,我認為可能有一個選項允許使用者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