允许非 root 用户重启服务

允许非 root 用户重启服务

背景 :

我创建了一个名为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

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

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

有什么建议么?

答案1

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

相关内容