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.)
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"
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.
Si vous avez le démon start-stop
start-stop-daemon --start --quiet -u username -g usergroup --exec command ...
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
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