2012-01-20 37 views
7

這是我在我的Ubuntu工作站上的Init腳本。我需要以root身份運行另一個用戶的命令,但我無法理解它應該如何完成。 sudo -usu newuser似乎都不起作用。在初始化腳本中切換用戶?

腳本:

respawn 
console none 

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

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

使用這種類型的命令「su -c'你的命令'different_user」 – vikky

+0

正如@Henrick在他們的回答中指出的,新貴腳本可以使用['setuid'配置節](http://upstart.ubuntu.com/cookbook /#setuid)來設置用戶。 – clayzermk1

回答

18

我用這個:

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

更新:因爲在這個答案的興趣,我解釋一下我在這裏使用它的方式。

我們將服務器作爲普通的linux用戶運行,而不是root用戶。用戶名包含三個部分:

服務,客戶,舞臺

這樣我們可以爲幾個客戶在一個Linux操作系統運行的若干服務。

示例:客戶「欄」和「p」的foo_bar_p服務「foo」的是指生產

這裏是初始化腳本的一部分。初始化腳本可以以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 [email protected]" 
    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

太棒了。謝謝! – Industrial

+0

-l開關做什麼? – Henrik

+0

-l | --login 一種使shell啓動登錄shell的方法。 – Henrik

1

蘇可能是一個更普遍的做法,但是這也可以在使用sudo一些常見的分佈:

sudo -u $MUSER $COMMAND $ARGS 

(只是重讀你的問題並沒有意識到這並不爲你工作,但它在init腳本已經爲我工作)

+0

已經在'/ etc/rc.local'中試過了,但是在Ubuntu 16.04上不起作用。還試過這個:'su -l user -c/home/user/script'。有什麼建議麼? – beemaster

6

對於新貴,使用:

setuid myuser 
exec command args 
+0

不錯!它是否加載.bashrc,個人資料和類似的東西? –