試した JobSchedulerのバージョンは、 "1.3.12.3044" なので、半年ぐらい古いです。
参考程度に見てください。
■ 任意のユーザでジョブを実行する方法
JobScheduler のジョブは、通常、JobScheduleをインストールしたユーザ(例:uid=jobs,gid=jobs)で実行されます。
任意のユーザで実行する方法はSOSのサイトで紹介していますが、その方法を試したのが以下のページです。
このページでは、任意の一般ユーザでジョブを実行しています。
■ root ユーザでジョブを実行してみる
上記で紹介したページと同じ手順で、root ユーザでジョブを実行してみました。
実行したジョブは、以下のとおり。
<?xml version="1.0" encoding="ISO-8859-1"?>
<job title="SetuidJob">
<script language="shell"><![CDATA[
export LANG=C
$SCHEDULER_HOME/bin/root/setuid-root /tmp/test.sh
]]></script>
<run_time/>
</job>
シェルスクリプトの内容は、以下のとおり。
bash の引数に "-p" をつけるのがポイントです。
#!/bin/bash -p
export LANG=C
echo "test.sh running."
echo "--- id -----------------------------------"
id
echo "--- read file ----------------------------"
echo "--- ls"
ls -l /var/log/messages
echo "--- tail"
tail -2 /var/log/messages
echo "--- write file ---------------------------"
echo "--- write"
rm -rf /tmp/xxx > /dev/null 2>&1
mkdir /tmp/xxx
date > /tmp/xxx/data.txt
echo "--- ls"
ls -l /tmp/xxx/data.txt
echo "--- cat"
cat /tmp/xxx/data.txt
exit $?
結果は、以下のとおり。
2013-10-20 09:06:20.226 [info] SCHEDULER-918 state=starting (at=2013-10-20 09:06:20.200)
2013-10-20 09:06:20.226 [info] SCHEDULER-987 Starting process: '/bin/sh' '-c' '"/tmp/jobs/sos.Qz6TOp"'
2013-10-20 09:06:20.326 [info] test.sh running.
2013-10-20 09:06:20.326 [info] --- id -----------------------------------
2013-10-20 09:06:20.326 [info] uid=500(jobs) gid=500(jobs) euid=0(root) groups=0(root),500(jobs)
2013-10-20 09:06:20.326 [info] --- read file ----------------------------
2013-10-20 09:06:20.326 [info] --- ls
2013-10-20 09:06:20.326 [info] -rw------- 1 root root 665 Oct 20 08:18 /var/log/messages
2013-10-20 09:06:20.326 [info] --- tail
2013-10-20 09:06:20.326 [info] Oct 20 08:18:19 centos6 avahi-daemon[947]: Invalid query packet.
2013-10-20 09:06:20.326 [info] Oct 20 08:18:46 centos6 avahi-daemon[947]: Invalid query packet.
2013-10-20 09:06:20.326 [info] --- write file ---------------------------
2013-10-20 09:06:20.326 [info] --- write
2013-10-20 09:06:20.326 [info] --- ls
2013-10-20 09:06:20.326 [info] -rw-r--r-- 1 root jobs 29 Oct 20 09:06 /tmp/xxx/data.txt
2013-10-20 09:06:20.326 [info] --- cat
2013-10-20 09:06:20.326 [info] Sun Oct 20 09:06:20 JST 2013
2013-10-20 09:06:20.327 [info] SCHEDULER-915 Process event
euid(root) で実行されています。uid は root にはなりません。
root 所有のファイルも読めます。
ファイルを作成すると、所有グループがJobSchedulerのグループ(jobs)になります。
あと、root ユーザのログイン・シェルは実行されないので、環境変数は、jobsユーザのものになります。
euid,uid の違いは、以下のページを参照してください。
http://ja.wikipedia.org/wiki/%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E8%AD%98%E5%88%A5%E5%AD%90
それから、su も使えませんでした。
"standard in must be a tty" というエラーになります。
パスワード入力を求めて失敗しているようです。
昨日、話していたとおり、
uid=root で実行したい場合は、自分でuidをセットするプログラムを作ったほうがいいみたいですね。
以上
参考まで