Systemd

允許非 root 使用者重新啟動服務

  • April 25, 2016

背景 :

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.

myappjar 的所有者一樣,我認為可能有一個選項允許使用者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

引用自:https://serverfault.com/questions/772778