開発したアプリなど一覧

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

パーミッション変える

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

コメント

タイトルとURLをコピーしました