[CentOS6][SOS JobScheduler] rootなどの特定ユーザでジョブを実行する


Create: 2013/03/11
LastUpdate: 2013/03/22
[ メニューに戻る ]

下図の環境を使用します。
環境の詳細を知りたい場合は、メニューに戻って構築手順を参照してください。


JobScheduler では、setuid を使用して、ジョブの実効ユーザを指定することができます。
通常は、jobs ユーザでジョブが実行されますが、ここでは、Host-A の JOB1(上図) を sos ユーザの権限で実行するようにしてみます。
手順は、「JobSheduler FAQ」を参考にしました。

1.setuid 環境の作成


Host-Aに jobsユーザでログインして、以下のコマンドを実行します。
$ cd /opt/sos-berlin.com/jobscheduler/scheduler_agent/bin
$ sudo mkdir sos 
$ sudo chown jobs sos
$ sudo chmod go-rwx sos 
$ sudo cp setuid sos/setuid-sos 
$ sudo chown sos sos/setuid-sos 
$ sudo chmod u+s,a-r sos/setuid-sos
"setuid-sos" のパーミションは以下のとおり。
これで "setuid-sos" を使用して、オーナ権限でプログラムを実行することができるようになります。
$ ls -al sos
合計 16
drwx------ 2 jobs root 4096  3月 12 11:30 2013 .
drwxr-xr-x 3 root root 4096  3月 12 11:29 2013 ..
--ws--x--x 1 sos  root 5244  3月 12 11:30 2013 setuid-sos
今回は、オーナを sos ユーザにしていますが、オーナを root にすれば、root 権限でジョブを実行できるようになります。

2.テスト用のシェルスクリプトの作成


setuid で実効ユーザを変更して実行するシェルスクリプトを以下のように作成します。
ファイル名は /tmp/test.sh とします。
/tmp ディレクトリを使用したのは、jobsユーザとsosユーザの両方にアクセス権限が必要だからです。
#!/bin/sh -p
LANG=C
echo "test.sh running."
echo "id=`id`"
exit $?
通常、シェルスクリプトは setuid を禁止しているため、"-p" で setuid で実効ユーザを変更して実行することを許可する必要があります。
あとは、以下のようにして実行権限を付与します。
$ chmod +x /tmp/test.sh
パーミションは、以下のとおり。オーナは "sos"、"jobs" のどちらでも実行できます。
$ ls -l /tmp/test.sh
-rwxr-xr-x 1 sos sos 67  3月 12 11:59 2013 /tmp/test.sh

3.ジョブの登録&実行


JOEで以下のようにジョブを定義します。


スクリプトの内容は以下のとおり。"setuid-sos" を使用して "test.sh" を実行します。
$SCHEDULER_HOME/bin/sos/setuid-sos /tmp/test.sh
JOCでジョブを  実行 します。下図のように正常終了すればOKです。


実行結果の最終行を見ると、実効ユーザ(euid)が sos ユーザになっていることがわかります。