Joomla をインスコしようとしたところ、インストール最初の言語を選択する画面から動かなくなってしまったのでエラーログを確認したら session がパーミッション無くて読み込めない的なエラーが出てた。
[Mon Jul 16 12:15:41 2012] [error] [client 123.225.12.116]
PHP Warning: session_write_close():
open(/var/lib/php/session/sess_ahu6gg05lui858ko156kd3gmo4, O_RDWR)
failed: Permission denied (13) in
/home/ryomatsu/public_html/example.com/libraries/joomla/session/session.php
on line 676, referer: http://example.com/installation/index.php
session を書き込んでるディレクトリを確認すると以下のように表示された。
$ sudo ls -al /var/lib/php/
total 20
drwxr-xr-x 3 root root 4096 Jun 15 04:34 .
drwxr-xr-x 20 root root 4096 Jun 6 2011 ..
drwxrwx--- 2 root apache 12288 Jul 16 12:16 session
しかし apache の実行ユーザ,グループはどちらも daemon である。
$ ps -eopid,user,group,fname | grep httpd
20218 root root httpd
20221 daemon daemon httpd
20252 daemon daemon httpd
20368 daemon daemon httpd
これを直す方法はとりあえず3通り考えた。
パーミッション変える
パーミッションが無くて読み込めないのであればそれを変えれば良い。しかしこの場合、動かすにはパーミッションを 777 としなければならず、全てのユーザが読める状態になってしまう。これはよろしくない、却下。
ディレクトリのグループを変える
httpd が daemon:daemon で動いてるのでディレクトリもそれに合わせれば良い。
$ sudo chgrp daemon /var/lib/php/
もちろんこうすると daemon に属するユーザであれば読み込みが可能になる。僕のサーバでは daemon ユーザは httpd 以外には使ってないのでこれでもありかも。
httpd の実行ユーザを変える
/etc/passwd 見たら apache ユーザ自体はあるようなのでユーザ,グループを変更しても良い。というかなんであるのに使ってないんだろう。
$ sudo vim /etc/httpd/conf/httpd.conf
--User daemon
++User apache
--Group daemon
++Group apache
$ sudo /etc/init.d/httpd restart
これでOK