루트가 아닌 사용자가 서비스를 다시 시작하도록 허용


27

배경 :

나는라는 응용 프로그램 생성 myapp과를 Spring-boot. 자체 실행 가능한 jar로 구성되며 시스템 서비스와 호환됩니다. 이제 젠킨스와 통합하려고합니다.

내가 원하는 것 :

젠킨스가 할 수 있기를 바랍니다.

  • 서비스를 중지하십시오.
  • 병을 교체하십시오.
  • 서비스를 다시 시작하십시오.

문제:

지금까지 sudoers만이 서비스를 시작 / 중지 할 수 있습니다. 젠킨스가 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.

myapp항아리의 소유자와 마찬가지로 사용자 myapp가 전화를 걸 수있는 옵션이 있다고 생각합니다 systemctl start/stop myapp. 실제로 전화를 걸 수는 systemctl status myapp없지만 start/stop루트 암호를 묻습니다.

어떤 제안?


나는 sudo지저분한 것을 고려해야 할 이유를 보지 못합니다. 일반적으로 이와 같은 것을 구현해야합니다. 그룹을 생성하고, 젠킨스 사용자를 그룹에 할당 visudo하고 서비스 관리를 위해 해당 그룹에 제한된 명령 세트를 제공하십시오
brent

@brent 자체 서비스로만 myapp전화를 걸 수있는 방법이 sudo systemctl있습니까?
Arnaud Denoyelle

답변:


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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.