Estou editando um script init.d. O script init.d executa um script utilitário que, em seguida, executa um processo. Em qualquer um dos scripts do bash, como eu faria para iniciar o processo principal como um usuário e grupo específico?
Estou editando um script init.d. O script init.d executa um script utilitário que, em seguida, executa um processo. Em qualquer um dos scripts do bash, como eu faria para iniciar o processo principal como um usuário e grupo específico?
Respostas:
A maneira mais simples é usar o comando su (1), ele possui uma opção que permite executar um comando através do shell do usuário, por exemplo:
su foo -c ls
Isso mudará para o usuário foo e executará o comando ls. Se o usuário que você deseja usar não tiver um shell válido (ou seja, não estiver em / etc / shells, como / bin / false ou / sbin / nologin), você também precisará especificar um shell na linha de comando. Exemplo com saída:
# 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 www-data -c ${MONOSERVER} /applications=${WEBAPPS} /socket=unix:/path/monoserve.pid &
se su www-data
definir todos os vars e executá- ${MONOSERVER} /applications=${WEBAPPS} /socket=unix:/path/monoserve.pid &
lo. Como assim eu resolvo isso?
su
usa um único argumento, que é um comando shell. Você precisa escrever su www-data -c '$MONOSERVER "/application=$WEBAPPS" "/socket=unix:/path/monoserve.pid"'
e se certificar de que MONOSERVER
e WEBAPPS
são exportados pelo shell pai. (Nota: não faça su … -c "$MONOSERVER …"
como isso falhará se alguma das variáveis contiver caracteres especiais do shell.) E se você tiver um iniciador de daemon dedicado , comostart-stop-daemon
, use-o.
Se start-stop-daemon
está disponível em seu sistema, você provavelmente deve usá-lo e ter um olhar para as suas opções (especialmente -u
e -g
, neste caso).
(Caso contrário, você pode usar uma combinação de su
e sg
.)
Atualização: Aqui está um exemplo de algum /etc/init.d/mpd
script (que usa start-stop-daemon
):
Comando Iniciar:
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
Tudo o que se segue --
é um argumento para o /usr/bin/mpd
próprio programa. (O procedimento de daemonization é tratado pelo script start-stop-daemon, portanto, mpd
é solicitado que você não se importe com isso --nodaemon
.)
Comando de parada:
echo "Stopping Music Player Daemon"
start-stop-daemon --stop --exec /usr/bin/mpd --pidfile /var/run/mpd.pid
Se mpd
não estava caindo privilégios por si só, seria preciso adicionar (por exemplo) -u mpd
, -g mpd
opções para o start-stop-daemon
comando.
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
Usage: su [options] [LOGIN]
esu: unrecognized option '--debug'