Services default to starting as root at boot time on my RHEL box. If I recall correctly, the same is true for other Linux distros which use the init scripts in /etc/init.d.
What do you think is the best way to instead have the processes run as a (static) user of my choosing?
The only method I’d arrived at was to use something like:
su my_user -c 'daemon my_cmd &>/dev/null &'
But this seems a bit untidy…
Is there some bit of magic tucked away that provides an easy mechanism to automatically start services as other, non-root users?
EDIT: I should have said that the processes I’m starting in this instance are either Python scripts or Java programs. I’d rather not write a native wrapper around them, so unfortunately I’m unable to call setuid() as Black suggests.
On Debian we use the
start-stop-daemonutility, which handles pid-files, changing the user, putting the daemon into background and much more.I’m not familiar with RedHat, but the
daemonutility that you are already using (which is defined in/etc/init.d/functions, btw.) is mentioned everywhere as the equivalent tostart-stop-daemon, so either it can also change the uid of your program, or the way you do it is already the correct one.If you look around the net, there are several ready-made wrappers that you can use. Some may even be already packaged in RedHat. Have a look at
daemonize, for example.