プロセスを開始および停止する単純なinit.dスクリプトがあります。私はinit.dルートを呼び出しますが、それが制御するプロセスが特定のユーザーとして実行されることを望みます。
オンラインで最も一般的なアドバイスは次のとおりです。
su myuser -c "my_process args"
しかし、これは2番目のプロセススペース、新しいシェルなどを作成し、ややエレガントではありません。
私はシェルを置き換えるので使用することを好みますexec()
が、ユーザーを引数として要求しません。このsetuid()
場合、最初に使用する必要がありますか? GIDの設定はどうですか?注意が必要な問題がありますか?
または、init.dを他のユーザーとして実行するディストリビューションソリューションはありますか?私の環境はCentos 6.4です。
答え1
ディストリビューションによって異なりますが、RHELベースのディストリビューションは派生したBash関数を使用し/etc/rc.d/init.d/functions
ますdaemon
。runuser
ソースファイルからわかるように、su
PAMを介さず(おそらく場合によっては鶏肉と卵の問題を避けるため)、ほとんどの場合と機能的に同じです。
これは実際にあなたの異議に対する答えではありませんが、これはサービスの役割です。あなたが望むきれいさと全体的な論理的一貫性は、次のことに対する動機の一部です。systemd
答え2
su someuser -c ...
必要なのは使用だけです。まず、setuid()
シェルコードで利用できないシステムコールがあります。必要以上にこれをより難しくしないでください。