非rootユーザーによるサービスの再開を許可する


27

バックグラウンド :

私はと呼ばれるアプリを作成myappしてをSpring-boot。自己実行可能なjarで構成され、systemdサービスと互換性があります。今、私はそれをジェンキンスと統合しようとしています。

私が欲しいもの:

私はジェンキンにできることをしたい:

  • サービスを停止します。
  • jarを交換します。
  • サービスを再起動します。

問題:

今までは、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

jenkinsがとしてログインできるように、sshキーを配置しましたmyapp@myserver

myappjarファイルの所有者である、私は、ユーザーを許可するオプションがあるかもしれないと思いmyappコールにsystemctl start/stop myapp。実際には、電話をかけることはできますsystemctl status myappが、電話をかけることはできませんstart/stop(rootパスワードが要求されます)。

助言がありますか?


sudo面倒だと考える理由はわかりませんが、これは一般的にこのようなものを実装する方法です。グループを作成し、jenkinsユーザーをそのグループに割り当てvisudo、サービスを管理するためにそのグループに限定されたコマンドセットを提供する
-brent

@brent 独自のサービスのみmyappを呼び出すことを許可する方法はありsudo systemctlますか?
アルノーデノイエル16

回答:


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
ジルベルト
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.