Après avoir examiné toutes les suggestions ici, j'ai découvert quelques éléments qui, je l'espère, seront utiles à d'autres dans mon poste :
-
hop a raison de me rediriger vers
/etc/init.d/functions
:ledaemon
la fonction vous permet déjà de définir un autre utilisateur :daemon --user=my_user my_cmd &>/dev/null &
Ceci est implémenté en enveloppant l'invocation du processus avec
runuser
-plus à ce sujet plus tard. -
Jonathan Leffler a raison :il y a setuid en Python :
import os os.setuid(501) # UID of my_user is 501
Cependant, je ne pense toujours pas que vous puissiez vous installer depuis une JVM.
-
Ni
su
nirunuser
gérez avec élégance le cas où vous demandez à exécuter une commande en tant qu'utilisateur que vous êtes déjà. Ex. :[[email protected]_host]$ id uid=500(my_user) gid=500(my_user) groups=500(my_user) [[email protected]_host]$ su my_user -c "id" Password: # don't want to be prompted! uid=500(my_user) gid=500(my_user) groups=500(my_user)
Pour contourner ce comportement de su
et runuser
, j'ai changé mon script d'initialisation en quelque chose comme :
if [[ "$USER" == "my_user" ]]
then
daemon my_cmd &>/dev/null &
else
daemon --user=my_user my_cmd &>/dev/null &
fi
Merci à tous pour votre aide !
Sur Debian, nous utilisons le start-stop-daemon
utilitaire, qui gère les fichiers pid, change l'utilisateur, met le démon en arrière-plan et bien plus encore.
Je ne connais pas RedHat, mais le daemon
utilitaire que vous utilisez déjà (qui est défini dans /etc/init.d/functions
, btw.) est mentionné partout comme l'équivalent de start-stop-daemon
, donc soit il peut aussi changer l'uid de votre programme, soit la façon dont vous le faites est déjà la bonne.
Si vous regardez autour du net, il existe plusieurs emballages prêts à l'emploi que vous pouvez utiliser. Certains peuvent même être déjà empaquetés dans RedHat. Jetez un oeil à daemonize
, par exemple.