允许非root用户重新启动服务

背景 :

我用Spring-boot创build了一个名为myapp的应用程序。 它由一个可自行执行的jar组成,并且与systemd服务兼容。 现在,我试图把它与jenkins整合。

我想要的是:

我想让jenkins能够:

  • 停止服务。
  • 更换jar子。
  • 重新启动服务。

问题:

到目前为止,只有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可以login为myapp@myserver

由于myapp是jar的所有者,我认为可能有一个选项允许用户myapp调用systemctl start/stop myapp 。 其实,我可以调用systemctl status myapp但不能start/stop (根密码问)。

有什么build议么?

    sudo是要走的路。 创build一个新的组(例如appadmin ),把你的jenkins用户放在里面,然后用visudo添加一个新的条目列表,例如:

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

    如果您希望appadmin组能够在不input密码的情况下运行该服务(例如,如果用户仅通过SSH密钥进行身份validation,则可以使用该密码),

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