権限の低いユーザーとしてupstartを使用してbashスクリプトを実行する

権限の低いユーザーとしてupstartを使用してbashスクリプトを実行する

/home/jack/myscript.sh私が実行したいスクリプトは次のとおりです。

export JAVA_HOME=/usr/lib/jvm/java-6-sun-1.6.0.26/
/home/jack/myapp/apache-tomcat-6.0.32/bin/./catalina.sh run

/etc/init/myapp.conf私が書いた新文書:

  description "Myapp Server"
  start on runlevel [2345]
  stop on runlevel [06]
  respawn
  respawn limit 10 5
  exec `su jack -c /home/jack/myscript.sh`

もしそうなら、ユーザーとしてスクリプトを実行したい場合、jack上記の設定はうまくいきますか?もっと良い方法がありますか?

答え1

~によるとヌボリッチレシピ、さまざまなユーザーでサービスを実行する組み込み機能が計画されていますが、まだ実装されていません。

利用可能な場合はstart-stop-daemon使用してください。

exec start-stop-daemon --start -u jack --exec /home/jack/myscript.sh

そうでない場合は、(エラーが発生しない限り)常に指定されたユーザーに切り替えて、独自のポリシー(特にほとんどのシステムではPAMポリシー)に準拠するか、またはをsu使用してくださいsudostart-stop-daemonsusudo

あなたの場合は中間スクリプトは必要ありません。 Upstart サービス定義で直接環境変数を設定できます。

description "Myapp Server"
  start on runlevel [2345]
  stop on runlevel [06]
  respawn
  respawn limit 10 5
  env JAVA_HOME=/usr/lib/jvm/java-6-sun-1.6.0.26/
  exec /home/jack/myapp/apache-tomcat-6.0.32/bin/catalina.sh run

答え2

Upstart 1.4以降、Upstartには、setuidスタンザを使用してsetgid指定されたユーザーでシステムタスクを実行する機能があります。たとえば、次のようになります。

setuid username
setgid groupname

以前のバージョンでは、次のものが利用できました。ユーザーの場所、ユーザーのホームフォルダに保存されます。

または、execコマンドでいくつかのアプリケーションを使用してください。

可能な場合start-stop-daemon:

exec start-stop-daemon --start -c myuser --exec command

そしてsudo

exec sudo -u myuser command

そしてsu

exec su -s /bin/sh -c 'exec "$0" "$@"' myuser -- command [parameters...]

追加情報ここ

答え3

セッションユーザーとして実行するにはセッションの割り当て(1.7以降)システム作業の代わりに。これらの操作は、環境変数に関してシステム操作のように制限されず、セッションユーザーとして実行されます。

関連情報