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


27

背景 :

我创建了一个叫做应用程序myappSpring-boot。它包含一个可自我执行的jar,并且与systemd服务兼容。现在,我正在尝试将其与詹金斯集成。

我想要的是:

我希望詹金斯能够:

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

问题:

到目前为止,只有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罐子的所有者,我认为可能存在允许用户myapp调用的选项systemctl start/stop myapp。实际上,我可以打电话systemctl status myapp但不能start/stop(要求输入root密码)。

有什么建议么?


我看不出考虑sudo凌乱的原因,通常这是您应该实现这种方式的方式。创建一个组,您的詹金斯用户分配到它,并使用visudo用于管理服务提供有限的命令集,以该组
布伦特

@brent有没有办法允许仅针对自己的服务myapp调用sudo systemctl
Arnaud Denoyelle

Answers:


24

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

1
不要忘记声明命令unix.stackexchange.com/a/13058/86443
Gilberto
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.