web-dev-qa-db-fra.com

Comment exécuter une commande en tant qu'utilisateur spécifique dans un script d'initialisation?

J'écris un script init qui est censé exécuter une seule commande en tant qu'utilisateur différent de root. Voici comment je le fais actuellement:
Sudo -u username command

Cela fonctionne généralement comme prévu sur Ubuntu/Debian, mais sous RHEL, le script exécuté en tant que command se bloque.
Y a-t-il un autre moyen d'exécuter la commande en tant qu'utilisateur différent?
(Notez que je ne peux pas utiliser les fonctions init de lsb car elles ne sont pas disponibles sous RHEL/Centos 5.x.)

33
ddario

Sur les systèmes RHEL, le /etc/rc.d/init.d/functions script est destiné à fournir similaire à ce que vous voulez. Si vous sourcez cela en haut de votre script init, toutes ses fonctions deviennent disponibles.

La fonction spécifique fournie pour aider ceci est daemon. Si vous avez l’intention de l’utiliser pour lancer un programme semblable à un démon, une utilisation simple serait:

daemon --user=username command

Si c'est trop lourd pour ce dont vous avez besoin, il y a runuser (voir man runuser pour des informations complètes; certaines versions peuvent nécessiter -u avant le nom d'utilisateur):

/sbin/runuser username -s /bin/bash -c "command(s) to run as user username"
24
lagweezle

Au lieu de Sudo, essayez

su - username command

D'après mon expérience, Sudo n'est pas toujours disponible sur les systèmes RHEL, mais s l'est, car s fait partie du paquet coreutils alors que Sudo est dans le package Sudo.

12
Jeff N

Si vous avez le démon start-stop

start-stop-daemon --start --quiet -u username -g usergroup --exec command ...
12
crafter

Pour les scripts d'initialisation de style systemd, c'est très simple. Vous venez d'ajouter un utilisateur = dans la section [Service].

Voici un script d'initiation que j'utilise pour qbittorrent-nox sur CentOS 7:

[Unit]
Description=qbittorrent torrent server

[Service]
User=<username>
ExecStart=/usr/bin/qbittorrent-nox
Restart=on-abort

[Install]
WantedBy=multi-user.target
12
LOAS

Je le fais habituellement comme vous le faites (c'est-à-dire la commande Sudo -u nom d'utilisateur). Mais, il existe également le moyen "djb" d'exécuter un démon avec les privilèges d'un autre utilisateur. Voir: http://thedjbway.b0llix.net/daemontools/uidgid.html

2
mti2935