- 締切済み
PHPで編集したファイルをcrontabに設定する
PHPで編集したファイルを、crontabに設定しようと、プログラムを製造しています。 しかし、rootユーザーのジョブキューにPHPで編集したファイルの内容が反映できません。 下記URL(niftyホームページ)記載の通り、sudoを使用し、実行時にrootユーザーを指定し、rootユーザーのジョブキューにtext.txtの内容を設定しようとしていますが、反映できません。ちなみに、test、apacheユーザーに対しても試してみましたが反映できませんでした。以下に作業内容を記載しますので、どこがおかしいのか教えていただければありがたいです。 【作業内容】 (1)sudoを設定する。 1)sudoをインストールする。 2)/etc/sudoersを編集する(コマンドvisudoで実施)。 a)ユーザーと、それぞれの実行権限の追加。 root ALL=(ALL) ALL test test=(root) ALL apache test=(root) ALL b)wheel を全てのホストで、全てのユーザーのすべての権限を実行できるように設定 %wheel ALL=(ALL) ALL c)wheelはパスワードを入力せず、コマンドを実行できるように設定。 %wheel ALL=(ALL) NOPASSWD: ALL (2)sudoコマンドが正常に実行できるか確認する。TeraTermの画面からroot権限でcrontabを実行する。以下は、PHPで編集した、test.txtファイルの内容を、crontabへroot権限で設定しようとしています。 1)ログインユーザーrootで実行する sudo -u root crontab /var/document/test.txt 2)ログインユーザーtestで実行する sudo -u root crontab /var/document/test.txt 3)ログインユーザーapacheで実行する ※ユーザーapahceでログインすることは不可能です(以降省略)。 以上のコマンドそれぞれ実行し、rootユーザーのジョブキューにtest.txtの内容が入ることを確認。 (3)sudoコマンドが正常に実行できるか確認する。TeraTermの画面からtest権限でcrontabを実行する。以下は、PHPで編集した、test.txtファイルの内容を、crontabへtest権限で設定しようとしています。 1)ログインユーザーrootで実行する sudo -u test crontab /var/document/test.txt 2)ログインユーザーtestで実行する sudo -u test crontab /var/document/test.txt 以上のコマンドそれぞれ実行し、testユーザーのジョブキューにtest.txtの内容が入ることを確認。 (4)sudoコマンドが正常に実行できるか確認する。TeraTermの画面からapache権限でcrontabを実行する。以下は、PHPで編集した、test.txtファイルの内容を、crontabへapache権限で設定しようとしています。 1)ログインユーザーrootで実行する sudo -u apahce crontab /var/document/test.txt 2)ログインユーザーtestで実行する sudo -u apache crontab /var/document/test.txt 以上のコマンドそれぞれ実行し、apacheユーザーのジョブキューにtest.txtの内容が入ることを確認。 (5)(2)で試したコマンドを、PHPプログラムに埋め込み実行する。system()、sell_exec()、exec()でそれぞれ実行しました。 1)system("sudo -u root crontab /var/document/test.txt"); 2)sell_exec("sudo -u root crontab /var/document/test.txt"); 3)exec("sudo -u root crontab /var/document/test.txt"); 以上の内容をプログラムに記述し、実行しましたが、test.txtの内容をrootのジョブキューに、設定できませんでした。 《確認コマンド》 sudo -u root crontab -l なお、test、apacheユーザーも同様に試してみました。 ※testユーザー権限で実行 1)system("sudo -u test crontab /var/document/test.txt"); 2)sell_exec("sudo -u test crontab /var/document/test.txt"); 3)exec("sudo -u test crontab /var/document/test.txt"); ※apahceユーザー権限で実行 1)system("sudo -u apache crontab /var/document/test.txt"); 2)sell_exec("sudo -u apahce crontab /var/document/test.txt"); 3)exec("sudo -u apache crontab /var/document/test.txt"); 以上のプログラムを実行後、それぞれのジョブキューを確認しましたが、text.txtの内容をcrontabへ設定できませんでした。 《確認コマンド》 sudo -u test crontab -l sudo -u apache crontab -l system()、shell_exec()、exec()、それぞれの関数を使用し、管理者権限以外のコマンド(mkdir、cp、mv、rm等)を実行した場合、問題ないので、本問題は実行権限と考えていますが、以上の情報で何がどうおかしいの分かりますでしょうか?お手数をかけますが、ご回答お願いします。 【niftyでの回答】 niftyのサイトに以下のような質問・回答がございますが、本投稿の内容とほぼ同じと認識しています。 但し、niftyの回答をそのまま実行してみましたが、実行できませんでした。環境の違いのせいでしょうか? http://oshiete1.nifty.com/qa7939488.html ※上記設定(/etc/sudoers)は、セキュリティレベルが低いのは十分承知しています。以上の処理が正常に動作確認後、徐々にセキュリティレベルを上げていく予定です。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- superside0
- ベストアンサー率64% (461/711)
> PHPプログラムに埋め込み実行する というのは、PHPをコマンドラインで実行されているのでしょうか? それとも、WebアプリとしてWebサーバ上での実行でしょうか? 後者の場合、実行プロセスのオーナーは、通常apacheですから system("sudo -u root crontab /var/document/test.txt"); ができるようにするためのsudoersの設定としては、 "apacheというユーザーが" "パスワードなしに" "rootの権限になって" "crontabを実行" できるように設定する必要があります。
お礼
ご回答ありがとうござます。 【回答】 "apacheというユーザーが" "パスワードなしに" "rootの権限になって" "crontabを実行"できるように設定する必要があります。 私の質問の記述中に、指摘いただいた設定はできております。 なお、いろいろ試した結果、私のOSの理解不足ということが判明しました。 ここで、なぜ実行できなかったかを記述することは、OSのバージョン等を公開することになりますので、記述しませんが、実行できましたことをご報告します。 貴重なお時間をいただき大変ありがとうございます。また、質問等ありましたら、このサイトを利用させていただきますので、その際にも、また、ご回答いただければありがたいです。 重ね重ねありがとうございました。