Switch user in a init script?

前端 未结 3 446
生来不讨喜
生来不讨喜 2021-02-06 05:37

Here\'s my Init script which I have at my Ubuntu workstation. I need to run a command as another user than root, but I just can\'t get my head around how it should be done. Neit

相关标签:
3条回答
  • 2021-02-06 05:47

    For upstart, use:

    setuid myuser
    exec command args
    
    0 讨论(0)
  • 2021-02-06 06:01

    su is probably a more universal approach, but this is also possible on some common distributions with sudo:

    sudo -u $MUSER $COMMAND $ARGS
    

    (just reread your question and didn't realize that doesn't work for you, but it has worked for me in init scripts)

    0 讨论(0)
  • 2021-02-06 06:06

    I use this:

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

    Update: Since there is interest in this answer, I explain the way I use it here.

    We run servers as normal linux users, not root. The username contains three parts:

    service, customer, stage

    This way we can run several services for several customers in one linux OS.

    Example: foo_bar_p Service "foo" of customer "bar" and "p" means production

    Here is the part of the init script. The init script can be executed as root or as foo_bar_p user:

    # /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
    ....
    
    0 讨论(0)
提交回复
热议问题