rootユーザでジョブを実行する

1,295 views
Skip to first unread message

shinji shiroma

unread,
Oct 19, 2013, 9:03:50 PM10/19/13
to jobsche...@googlegroups.com
城間です。

昨日、OSCに行ってきました。
本当に、文化祭といった感じでした。
今日も頑張ってください。

話は変わりますが、昨日、rootユーザでジョブを実行する方法について話をしていて、気になったので試してみました。
試した 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をセットするプログラムを作ったほうがいいみたいですね。


以上
参考まで

Daisuke Ikeda

unread,
Oct 19, 2013, 11:20:53 PM10/19/13
to jobsche...@googlegroups.com


---------- 転送メッセージ ----------
From: Daisuke Ikeda <dai.i...@gmail.com>
日付: 2013年10月20日 12:19
件名: Re: rootユーザでジョブを実行する
To: shinji shiroma <sir...@blue21.ddo.jp>


城間さん

はじめまして。TISの池田ともうします。

横から失礼します。
あまり話の経緯はわかっていないのですが、
root権限で処理を実行したい場合、
sudoersファイルに許可設定を書いて、sudoコマンドを使えばできそうな気がするのですがどうでしょうか?

セキュリティ的にどうかという問題はあるのですが、
例えば、jobschedulerユーザに対してsudo実行権限を与えて、
デフォルトでttyが要求されないよう設定すればいける気もします。

# visudo

jobscheduler ALL =(ALL) NOPASSWD:ALL

#Default requiretty ←コメントアウト

参考までに。

全くの見当違いの話になってる場合は無視しちゃってください。
 


2013年10月20日 10:03 shinji shiroma <sir...@blue21.ddo.jp>:

--
このメールは Google グループのグループ「日本JobSchedulerユーザーグループ(JJUG)」の登録者に送られています。
このグループから退会し、メールの受信を停止するには、jobscheduler-...@googlegroups.com にメールを送信します。
このグループに投稿するには、jobsche...@googlegroups.com にメールを送信してください。
http://groups.google.com/group/jobscheduler-ja からこのグループにアクセスしてください。
その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。


shinji shiroma

unread,
Oct 20, 2013, 12:46:10 AM10/20/13
to jobsche...@googlegroups.com
池田さん

城間です。ご意見ありがとうございます。
これからも、遠慮なく、ご意見お願いします。

確かに、sudo を使用すれば root で実行できると思います。
たぶん、これが、一番簡単かなぁと、私も思います。

私の話は、sos社 が提供しているモジュール(setuid)の使い方に限定したものでした。
パスワードなしの sudo を使いたくなくて、SOS社のモジュールを試したらしいのですが、
うまくいかなかったので setuid(uid=root) するプログラムを作ったという話を聞いたので。。

uid で root かどうか判断してエラーにするプログラムもあるので、
SOS社のモジュールでは対応できないものもありそうですね。

sudo も、SOS社もモジュール(setuid)も使えないとなると、
あとは、
 ・自分で setuid(uid=root)するブログラムを作る(誰か公開してほしい)
 ・自分自身にroot(パスなし鍵)でsshする
ぐらいですかね。


加藤 光雪

unread,
Oct 20, 2013, 1:23:33 AM10/20/13
to shinji shiroma, jobsche...@googlegroups.com
加藤です。

秋穂さんのご協力で、sudoで動作する事が確認できましたので、簡単に情報共有します。

sudoの設定ですが、NOPASSとTTYをDisableのセットをします。
Defaults:scheduler    !requiretty
scheduler  ALL=(ALL)       NOPASSWD: ALL

それで、JOBの中で普通にsudoでコマンド実行すると正常動作しました。
 ex)
  sudo id
  sudo mv /var/log/messages /var/log/messages.bak

それと補足ですが、JobSchedulerに入っているsetuidですが、idコマンドなどは動作しましたが、/var/log/messagesなどのrootオーナのファイルを操作(mv)とかしようとすると、Permistoinエラーになりました。

取り急ぎ。


差出人: "shinji shiroma" <sir...@blue21.ddo.jp>
宛先: jobsche...@googlegroups.com
送信済み: 2013年10月20日, 日曜日 午後 1:46:10
件名: Re: rootユーザでジョブを実行する

shinji shiroma

unread,
Oct 20, 2013, 2:18:10 AM10/20/13
to jobsche...@googlegroups.com, shinji shiroma, ka...@ossl.co.jp
加藤さん

城間です。情報共有、ありがとうございます。

SOS社のモジュール(setuid) は、使えないケースが、いろいろあるようですね。
rootでジョブを実行したい場合は、やっぱり、sudo を使うのが、一番、簡単ですね。



Reply all
Reply to author
Forward
0 new messages