session_write_close() failed: Permission denied

シェアする

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通り考えた。

Sponsored Links

パーミッション変える

パーミッションが無くて読み込めないのであればそれを変えれば良い。しかしこの場合、動かすにはパーミッションを 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

Sponsored Link

シェアする

フォローする