2011/06/03

Apache を Web インターフェイスから再起動する方法

いろいろ問題ありそうだけど。
そんなお話です。

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 いじってます。

セキュリティ的にもお気をつけ下さい。