J'édite un script init.d. Le script init.d exécute un script utilitaire qui exécute ensuite un processus. À partir de l'un ou l'autre des scripts bash, comment puis-je faire en sorte qu'il lance le processus principal en tant qu'utilisateur et groupe spécifique?
process
init
privileges
Stéphane Gimenez
la source
la source
Usage: su [options] [LOGIN]
etsu: unrecognized option '--debug'
su www-data -c ${MONOSERVER} /applications=${WEBAPPS} /socket=unix:/path/monoserve.pid &
si jesu www-data
définis tous les vars et l'exécute${MONOSERVER} /applications=${WEBAPPS} /socket=unix:/path/monoserve.pid &
fonctionne correctement. Comment résoudre ce problème?su
prend un seul argument, qui est une commande shell. Vous devez écriresu www-data -c '$MONOSERVER "/application=$WEBAPPS" "/socket=unix:/path/monoserve.pid"'
et vous assurer queMONOSERVER
etWEBAPPS
sont exportés par le shell parent. (Remarque: ne faites pas celasu … -c "$MONOSERVER …"
car cela échouera si l'une des variables contient des caractères spéciaux du shell.) Et si vous avez un lanceur de démon dédié tel questart-stop-daemon
, utilisez-le.Si
start-stop-daemon
est disponible sur votre système, vous devriez probablement l'utiliser et jeter un œil à ses options (en particulier-u
et-g
dans ce cas).(Sinon, vous pourriez utiliser une combinaison de
su
etsg
.)Mise à jour: Voici un exemple tiré d'un
/etc/init.d/mpd
script (qui utilisestart-stop-daemon
):Commande de démarrage:
Tout ce qui suit
--
est un argument pour le/usr/bin/mpd
programme lui-même. (La procédure de démonisation est prise en charge par le script start-stop-daemon, ilmpd
est donc demandé de ne pas s'en soucier--nodaemon
.)Commande d'arrêt:
Si
mpd
on ne baisse pas les privilèges par lui - même, il faudrait ajouter (par exemple)-u mpd
, des-g mpd
options à lastart-stop-daemon
commande.la source
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