在init脚本中切换用户?

时间:2012-01-20 11:32:38

标签: ubuntu sudo init

这是我在Ubuntu工作站上的初始化脚本。我需要以root身份运行另一个用户命令,但我无法理解它应该如何完成。 sudo -usu newuser似乎都无效。

剧本:

respawn
console none

start on runlevel [2345]
stop on runlevel [06]

script
  su "anotherUser" -c ./myCommand
end script

3 个答案:

答案 0 :(得分:18)

我用这个:

su -l $MUSER -c "myCommand args..."

更新:由于对此答案感兴趣,我在这里解释了我使用它的方式。

我们以普通的linux用户身份运行服务器,而不是root用户。用户名包含三个部分:

服务,客户,阶段

这样我们就可以在一个Linux操作系统中为多个客户运行多个服务。

示例:foo_bar_p客户“bar”和“p”的服务“foo”表示生产

这是init脚本的一部分。 init脚本可以作为root或foo_bar_p用户执行:

# /etc/init.d/foo_bar_p-celeryd
# scriptname contains linux username  
SCRIPT_NAME=`basename "$0"`
SYSTEM=${SCRIPT_NAME%*-celeryd}

U=`id -nu`

if [ ! $U == $SYSTEM ]; then
    if [ $U == "root" ]; then
        # use "-l (login)" to delete the environment variables of the calling shell.
        exec su -l $SYSTEM -c "$0 $@"
    fi
    echo "Script must be run from $SYSTEM or root. You are '$U'"
    rc_exit 1
fi

# OK, now I am foo_bar_p
cd
. $HOME/.bashrc
....

答案 1 :(得分:6)

对于暴发户,请使用:

setuid myuser
exec command args

答案 2 :(得分:1)

su可能是一种更普遍的方法,但在使用sudo的一些常见发行版中也可以这样做:

sudo -u $MUSER $COMMAND $ARGS

(只是重读你的问题并没有意识到这对你不起作用,但它在初始化脚本中对我有用)