[PHP-users 13366] Re: マシンを再起動するPHP

Taoka Fumiyoshi php-users@php.gr.jp
Tue, 18 Feb 2003 04:52:32 +0900


コンソールからとPHP(WWW)からのshutdown呼び出しを
対比してみると次のようになります。

  コンソール   ブラウザ
      |           |
      v           v
   [login]      [PHP]     認証: 誰であるのか?
      |           |
      v           v
  [shutdown]  [shutdown]  権限: 実行は許可されているか?
      |           |
      v           v
    停止         失敗

コンソールからはloginで認証を経ますが、
PHPで認証を行わない場合は、「誰であるか不確定」ということで
PHP(httpd)の動いているユーザー(nobodyなど)が割り当てられます。
そして、このユーザーの権限に基づいてshutdownの実行がチェックされます。
通常、nobodyなどではshutdownを実行できないことでしょう。

ですから、PHPの書き方の問題ではなく、
認証方法や実行権限の調整の問題だと思います。

PHP(httpd)からshutdownするという事自体はbad ideaだと思いますが
PHPやCGIから他のプログラムを実行したり、
ファイルにアクセスする際には同じ問題がおこります。

これに対処するには前図の対比に従って、
前段のPHPで認証を行い、システムのユーザーとの対応をつけておき、
後段のshutdownを呼び出す際にそのユーザーで実行すれば良いと思います。

httpdをrootで走らせたり、nobodyにshutdown実行権限を与えてしまうのは
本末転倒だと思います。

参考: http://httpd.apache.org/docs/suexec.html


# と、ここまで書いて気づいたのですが、以上は一般的なUnixでの話です。
# お使いのOpenBlockSとは http://openlab.plathome.co.jp/OpenBlockS/
# でしょうか。
# http://openlab.plathome.co.jp/OpenBlockS/save.html#restart
# によると、管理用インターフェイスから再起動できるようなので、
# 素直にこれを使うか、PHPをインターフェイスとしたいということならば、
# そのページのformを調べてPHPから必要なフィールドを満たし、
# 認証情報をつけて飛べば綺麗に処理できるのではないでしょうか。