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


10

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

답변:


12

가장 간단한 방법은 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

su는 내가 그것을 많이 주장하는 것을 좋아하지 않는 것 같습니다. 내가 얻을 Usage: su [options] [LOGIN]su: unrecognized option '--debug'

정확히 작동하지 않습니다. 내가 루트로이 줄을 실행하면 오류가 발생합니다 su www-data -c ${MONOSERVER} /applications=${WEBAPPS} /socket=unix:/path/monoserve.pid &내가하면 su www-data모두가 바르 실행 설정 ${MONOSERVER} /applications=${WEBAPPS} /socket=unix:/path/monoserve.pid &이 잘 작동합니다. 어떻게 해결할 수 있습니까?

2
@ acidzombie24 su는 하나의 인수를 취하는데, 이것은 쉘 명령입니다. 당신은 쓰기에 필요 su www-data -c '$MONOSERVER "/application=$WEBAPPS" "/socket=unix:/path/monoserve.pid"'하고 있는지 확인 MONOSERVER하고 WEBAPPS부모 쉘에 의해 수출하고 있습니다. (참고 : su … -c "$MONOSERVER …"변수에 쉘 특수 문자가 포함 된 경우에는 실패하므로 수행하지 마십시오 .)와 같은start-stop-daemon 전용 데몬 실행기가있는 경우이를 사용하십시오.
Gilles 'SO- 악마 그만해

Gilles : 좋습니다. 저는 init.d 스크립트를 i로 바꾸지 않습니까? 모든 변수를 새 스크립트에 넣고 쉽고 쉽게 배울 수 있기 때문에 실행할 수 있습니다. 그러나 start-stop-daemon의 특별한 점은 무엇입니까? 그 답변에 대한 의견을 남겨

su 또는 su -login을 사용하는 것이 더 낫습니까? 나는 su의 사람을 읽었지만이 특정한 경우를 이해할 수 없다
Massimo

4

경우 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명령.


init.d 스크립트를 start-stop-daemon으로 바꾸지 않습니까? su와 스크립트 파일을 사용하는 것이 더 쉽지 않습니까? init.d를 교체하면 시작시 실행되도록 어떻게 설치합니까? 시작-데몬에 무엇을 전달하고 있습니까? 내가 예를 인터넷 검색을하고 -edit- ATM 어쩌면 내가 대답을 필요 실 거예요하지만 복잡한 해답이 될 것 같은 느낌

2
불운. 여기 내 줄이 있습니다. 여전히 루트로 실행됩니다. 맨 페이지를 확인했는데 여전히 이것에 대해 어떻게해야할지 모르겠습니다. start-stop-daemon --start --quiet --background -u www-data -g www-data --exec ${MONOSERVER} --pidfile /path/monoserve.pid --make-pidfile -- /applications=${WEBAPPS} /socket=unix:/path/monoserve.pid
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.