Switch between users in an upstart script

2019-05-25 04:58发布

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?

2条回答
三岁会撩人
2楼-- · 2019-05-25 05:11

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 star\"
3楼-- · 2019-05-25 05:20

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"
查看更多
登录 后发表回答