Is it possible to have a upstart script that runs the pre-script as root but the rest as normal_user
. I'm trying something like:
setuid normal_user
pre-start exec su -c "echo I'm root" root
script
exec /bin/bash <<"EOT"
echo "haha, I'm normal user"
EOT
Is it necessary to drop setuid?
I finally got it working by removing setuid normal_user
and change
exec /bin/bash <<"EOT"
to
exec sudo -u normal_user /bin/bash <<"EOT"
In general, you will have to remove the setuid
stanza so that your job runs as root. You can then drop privileges in the exec
/script
stanza.
From the Upstart Cookbook's Changing User section:
The recommended method for Debian and Ubuntu systems is to use the helper utility start-stop-daemon(8) like this:
exec start-stop-daemon --start -c myuser --exec command
If you want to use su(1)... To avoid the fork(2) caused by the shell being spawned, you could instead specify:
exec su -s /bin/sh -c 'exec "$0" "$@"' $user -- /path/to/command --arg1=foo -b wibble
A basic example using sudo(8):
exec sudo -u $user command