這是我在我的Ubuntu工作站上的Init腳本。我需要以root身份運行另一個用戶的命令,但我無法理解它應該如何完成。 sudo -u
或su newuser
似乎都不起作用。在初始化腳本中切換用戶?
腳本:
respawn
console none
start on runlevel [2345]
stop on runlevel [06]
script
su "anotherUser" -c ./myCommand
end script
這是我在我的Ubuntu工作站上的Init腳本。我需要以root身份運行另一個用戶的命令,但我無法理解它應該如何完成。 sudo -u
或su newuser
似乎都不起作用。在初始化腳本中切換用戶?
腳本:
respawn
console none
start on runlevel [2345]
stop on runlevel [06]
script
su "anotherUser" -c ./myCommand
end script
我用這個:
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
....
蘇可能是一個更普遍的做法,但是這也可以在使用sudo一些常見的分佈:
sudo -u $MUSER $COMMAND $ARGS
(只是重讀你的問題並沒有意識到這並不爲你工作,但它在init腳本已經爲我工作)
已經在'/ etc/rc.local'中試過了,但是在Ubuntu 16.04上不起作用。還試過這個:'su -l user -c/home/user/script'。有什麼建議麼? – beemaster
對於新貴,使用:
setuid myuser
exec command args
不錯!它是否加載.bashrc,個人資料和類似的東西? –
使用這種類型的命令「su -c'你的命令'different_user」 – vikky
正如@Henrick在他們的回答中指出的,新貴腳本可以使用['setuid'配置節](http://upstart.ubuntu.com/cookbook /#setuid)來設置用戶。 – clayzermk1