이 데몬 / 초기화를 루트가 아닌 사용자로 실행하려면 어떻게해야합니까?


19

데몬을 시작하는 init 스크립트가 있습니다. 문제는 루트로 실행된다는 것입니다. "deploy"라는 사용자로 실행하고 싶습니다. 우분투 12.04

#! /bin/sh

# File: /etc/init.d/unicorn

### BEGIN INIT INFO
# Provides:          unicorn
# Required-Start:    $local_fs $remote_fs $network $syslog
# Required-Stop:     $local_fs $remote_fs $network $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts the unicorn web server
# Description:       starts unicorn
### END INIT INFO

DAEMON=/usr/local/bin/unicorn_rails
DAEMON_OPTS="-c /var/www/current/config/unicorn.rb -D"
NAME=unicorn
DESC="Unicorn"
PID=/var/www/current/shared/pid/unicorn.pid

case "$1" in
  start)
    echo -n "Starting $DESC: "
    $DAEMON $DAEMON_OPTS
    echo "$NAME."
    ;;
  *)
    echo "Usage: $NAME {start|stop|restart|reload}" >&2
    exit 1
    ;;
esac

exit 0

2
변경 $DAEMON $DAEMON_OPTSsu - deploy -c "$DAEMON $DAEMON_OPTS"
데이지

chuid 옵션이 적용되지 않고 프로세스가 루트로 실행되므로 테스트 중에 "service"명령을 사용하여 deamon을 시작하지 마십시오.
pasqal

커널이 이미 시스템의 사용자를 알고 난 후에 init.d의 모든 스크립트가 호출 됩니까?
ransh 2016 년

답변:


18

start-stop-daemon유틸리티를 사용 하여 데몬을 시작하십시오. 패스 -c(또는 --chuid다른 사용자로 실행) 옵션을 선택합니다. 에 몇 가지 예가 있습니다 /etc/init.d/*.

case $1 in
  start)
    echo -n "Starting $DESC: "
    start-stop-daemon --start --chuid deploy --pidfile "$PID" --start --exec "$DAEMON" -- $DAEMON_OPTS
    echo "$NAME."
    ;;
…

커널 이후에 호출 된 모든 init.d 스크립트는 이미 시스템의 모든 사용자를 알고 있습니까?
ransh 2016

@ransh 나는 당신이 무엇을 요구하는지 잘 모르겠습니다. 커널은 실제로 사용자를 "알지"않습니다. 관련하여 사용자는 숫자 일 뿐이며 사용자 0으로 실행되는 프로세스가 다른 사용자가 할 수없는 많은 일을 할 수 있다는 점을 제외하고는 숫자가 무엇인지 상관하지 않습니다. .
질 'SO-정지 존재 악마'

-1

우분투에서는 그냥 사용할 수 있습니다

sudo -u deploy $DAEMON $DAEMON_OPTS


su 또는 --chuid가있을 때 sudo를 추가하는 이유는 무엇입니까? sudo가 설치되어 있지 않으면 어떻게합니까?
Jeff Schaller

2
@JeffSchaller sudo가 우분투에 설치되었습니다
Роман Коптев
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.