2012-01-20 5 views
7

私のUbuntuワークステーションにある私のInitスクリプトです。私はroot以外のユーザーとしてコマンドを実行する必要がありますが、私はそれをどうやってやるべきかについて頭を悩ますことはできません。 sudo -uまたはsu newuserのいずれも機能していないようです。initスクリプトでユーザーを切り替えますか?

スクリプト:この答えに興味があるので、私はここにそれを使用する方法について説明します

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

更新

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は以下の答えで指摘したように、upstartスクリプトは['setuid'設定スタンザを使うことができます(http://upstart.ubuntu.com/cookbook /#setuid)を使用してユーザーを設定します。 – clayzermk1

答えて

18

私はこれを使用しています。

root以外の通常のLinuxユーザーとしてサーバーを実行します。

サービス、顧客、段階

我々は1つのLinuxのOSに複数の顧客のためのいくつかのサービスを実行することができますこの方法:ユーザー名は、3つの部分が含まれています。

例:foo_bar_pサービス顧客の「foo」という「バー」と「p」はここで生産

は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 [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 シェルをログインシェルとして起動する方法。 – Henrik

1

suがおそらくより普遍的なアプローチであるが、これは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、profile、stuffのようなものをロードしますか? –

関連する問題