권한이 낮은 사용자로 upstart를 사용하여 bash 스크립트 실행

권한이 낮은 사용자로 upstart를 사용하여 bash 스크립트 실행

/home/jack/myscript.sh내가 실행하고 싶은 스크립트는 다음과 같습니다.

export JAVA_HOME=/usr/lib/jvm/java-6-sun-1.6.0.26/
/home/jack/myapp/apache-tomcat-6.0.32/bin/./catalina.sh run

/etc/init/myapp.conf내가 작성한 신생 문서:

  description "Myapp Server"
  start on runlevel [2345]
  stop on runlevel [06]
  respawn
  respawn limit 10 5
  exec `su jack -c /home/jack/myscript.sh`

그렇다면 사용자로 스크립트를 실행하려는 경우 jack위의 구성이 작동합니까 ? 더 좋은 방법이 있나요?

답변1

~에 따르면누보 리치 요리법, 다양한 사용자로 서비스를 실행하는 내장 기능이 계획되었지만 아직 구현되지 않았습니다.

사용 가능한 경우 start-stop-daemon사용하십시오.

exec start-stop-daemon --start -u jack --exec /home/jack/myscript.sh

그렇지 않은 경우에는 (오류가 발생하지 않는 한) 항상 지정된 사용자로 전환하고 자체 정책(특히 대부분의 시스템에서 PAM 정책)을 준수하는 su또는 를 사용하십시오 sudo.start-stop-daemonsusudo

귀하의 경우에는 중간 스크립트가 필요하지 않습니다. Upstart 서비스 정의에서 직접 환경 변수를 설정할 수 있습니다.

description "Myapp Server"
  start on runlevel [2345]
  stop on runlevel [06]
  respawn
  respawn limit 10 5
  env JAVA_HOME=/usr/lib/jvm/java-6-sun-1.6.0.26/
  exec /home/jack/myapp/apache-tomcat-6.0.32/bin/catalina.sh run

답변2

Upstart 1.4부터 Upstart에는 setuid및 스탠자를 사용하여 setgid지정된 사용자로 시스템 작업을 실행할 수 있는 기능이 있습니다. 예를 들면 다음과 같습니다.

setuid username
setgid groupname

이전 버전에서는 다음을 사용할 수 있었습니다.사용자 위치, 사용자의 홈 폴더에 저장됩니다.

또는 exec 명령에서 일부 응용 프로그램을 사용하십시오.

가능한 경우 start-stop-daemon:

exec start-stop-daemon --start -c myuser --exec command

그리고 sudo:

exec sudo -u myuser command

그리고 su:

exec su -s /bin/sh -c 'exec "$0" "$@"' myuser -- command [parameters...]

추가 정보여기

답변3

세션 사용자로 실행하려면세션 할당(1.7부터) 시스템 작업 대신. 이러한 작업은 환경 변수와 관련하여 시스템 작업과 같이 제한되지 않으며 세션 사용자로 실행됩니다.

관련 정보