简体   繁体   中英

Switch between users in an upstart script

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM