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

Arn*_*lle 28 jenkins systemd

背景 :

我创建了一个名为myappwith的应用程序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
Run Code Online (Sandbox Code Playgroud)

我放置了一个 ssh 密钥,以便 jenkins 可以登录为myapp@myserver.

作为myappjar 的所有者,我认为可能有一个选项允许用户myapp调用systemctl start/stop myapp. 实际上,我可以打电话systemctl status myapp但不能start/stop(要求root密码)。

有什么建议?

bre*_*ent 31

sudo是要走的路。创建一个新组(appadmin例如),将您的jenkins用户放入其中,然后使用visudo添加一个包含有限命令列表的新条目,例如:

Cmnd_Alias MYAPP_CMNDS = /bin/systemctl start myapp, /bin/systemctl stop myapp
%appadmin ALL=(ALL) MYAPP_CMNDS
Run Code Online (Sandbox Code Playgroud)

如果您希望该appadmin组无需先输入密码即可操作服务(例如,如果用户仅通过 SSH 密钥进行身份验证,则很有用),

Cmnd_Alias MYAPP_CMNDS = /bin/systemctl start myapp, /bin/systemctl stop myapp
%appadmin ALL=(ALL) NOPASSWD: MYAPP_CMNDS
Run Code Online (Sandbox Code Playgroud)

  • 不要忘记语句顺序 https://unix.stackexchange.com/a/13058/86443 (2认同)