そんなお話です。
CentOS 5.6
Apache/2.2.3
PHP 5.3.6
Apache は
User apache Group apacheとなっております。
http://example.com/apache_restart.php ってのにアクセスすると問答無用に Apache がリスタートするという仮定です。
apache_restart.php
<?php system('/etc/init.d/httpd restart');って何も考えずに実行してみた
rm: cannot remove `/var/run/httpd.pid': 許可がありません touch: cannot touch `/var/lock/subsys/httpd': 許可がありません rm: cannot remove `/var/run/httpd.pid': 許可がありませんですよね・・・。
権限ないなら与えてしまおう。
root にスイッチして sudores 変更します。
su - visudo
以下のように変更。
apache に /etc/init.d/httpd の実行は sudo してもパスワードいらないよ
っていう事にする。
#Defaults requiretty # ↓は追加 apache ALL=(ALL) NOPASSWD: /etc/init.d/httpd
Defaults requiretty
をコメントアウトしないと
sudo: sorry, you must have a tty to run sudo
って怒られます。php の方も変更
<?php system('sudo /etc/init.d/httpd restart');
これでめでたくWEBから再起動できるんだけど、
レスポンス返る前に Apache の再起動かかるから
画面真っ白になります。
バックグラウンドで処理する何かしらの仕組みが必要になりますね。
なんでこんなことしたかっていうと、
ScriptAlias の編集をしたいって言われたから。
えぇ、WEBから /etc/httpd/conf.d/hoge-vhost.conf いじってます。
セキュリティ的にもお気をつけ下さい。