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

J’écris un script d’initialisation 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 sur RHEL le script qui est exécuté lorsque la command bloquée.
Existe-t-il un autre moyen d’exécuter la commande en tant qu’autre utilisateur?
(Notez que je ne peux pas utiliser les fonctions d’initialisation lsb car elles ne sont pas disponibles sur RHEL / Centos 5.x.)

Sur les systèmes RHEL, le script /etc/rc.d/init.d/functions est conçu pour fournir un résultat similaire à celui souhaité. Si vous le source en haut de votre script d’initialisation, toutes ses fonctions deviennent disponibles.

La fonction spécifique fournie pour vous aider est daemon . Si vous envisagez de l’utiliser pour démarrer un programme de type 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 plus d’informations; 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" 

Si vous avez start-stop-daemon

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

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 su l’ est, car su fait partie du package coreutils, alors que sudo est dans le package sudo.

Pour les scripts d’initialisation de style systemd, c’est vraiment facile. Vous venez d’append un utilisateur = dans la section [Service].

Voici un script d’initialisation que j’utilise pour qbittorrent-nox sur CentOS 7:

 [Unit] Description=qbittorrent torrent server [Service] User= ExecStart=/usr/bin/qbittorrent-nox Restart=on-abort [Install] WantedBy=multi-user.target 

Je le fais généralement comme vous le faites (c.-à-d. 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