init.d 스크립트에서 다른 사용자 / 그룹으로 프로세스 시작 한 다음

init.d 스크립트를 편집 중입니다. init.d 스크립트는 유틸리티 스크립트를 실행 한 다음 프로세스를 실행합니다. bash 스크립트에서 특정 사용자 및 그룹으로 주요 프로세스를 시작하려면 어떻게해야합니까?



답변

가장 간단한 방법은 su (1) 명령을 사용하는 것입니다.이 명령에는 사용자의 쉘을 통해 명령을 실행할 수있는 옵션이 있습니다. 예 :

su foo -c ls

이것은 사용자 foo로 전환 하고 ls 명령을 실행합니다. 사용하려는 사용자에게 유효한 쉘이없는 경우 (즉, / bin / false 또는 / sbin / nologin과 같은 / etc / shells에없는 경우) 명령 행에서 쉘을 지정해야합니다. 출력 예 :

# su nobody -s /bin/bash -c id
uid=99(nobody) gid=99(nobody) groups=99(nobody) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

답변

경우 start-stop-daemon시스템에 볼 수 있습니다 당신은 아마 그것을 사용하고 옵션 (특히 한 번 봐해야 -u하고 -g이 경우).

(그렇지 않으면, 당신의 조합을 사용할 수 있습니다 susg.)

업데이트 : 다음은 일부 /etc/init.d/mpd스크립트 에서 가져온 예제입니다 ( start-stop-daemon).

  • 시작 명령 :

    echo "Starting Music Player Daemon"
    start-stop-daemon --start --quiet --background --exec /usr/bin/mpd \
        --pidfile /var/run/mpd.pid --make-pidfile \
        -- --no-daemon /etc/mpd.conf 2>/dev/null
    

    다음 --에 오는 모든 것은 /usr/bin/mpd프로그램 자체에 대한 논쟁 입니다. (데몬 제거 절차는 start-stop-daemon 스크립트에 의해 처리되므로 mpd에 대해서는 신경 쓰지 않아도됩니다 --nodaemon.)

  • 정지 명령 :

    echo "Stopping Music Player Daemon"
    start-stop-daemon --stop --exec /usr/bin/mpd --pidfile /var/run/mpd.pid
    

경우 mpd자체적으로 권한을 포기하지 않은, 하나는 (예를 들어)를 추가해야합니다 -u mpd, -g mpd받는 옵션을 start-stop-daemon명령.