init.d 스크립트를 편집 중입니다. init.d 스크립트는 유틸리티 스크립트를 실행한 다음 프로세스를 실행합니다. bash 스크립트에서 특정 사용자 및 그룹으로 기본 프로세스를 시작하려면 어떻게 해야 합니까?
답변1
가장 쉬운 방법은 사용자의 셸을 통해 명령을 실행할 수 있는 옵션이 있는 su(1) 명령을 사용하는 것입니다. 예를 들면 다음과 같습니다.
su foo -c ls
사용자로 전환됩니다.부자그리고 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
답변2
start-stop-daemon
시스템에서 사용할 수 있는 경우 이를 사용하고 옵션을 살펴봐야 합니다(특히 이 -u
경우 -g
).
su
(그렇지 않으면 및 를 조합하여 사용할 수 있습니다 sg
.)
고쳐 쓰다:다음은 스크립트에서 가져온 예 /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