Joomla!1.0.15での話だ。
知人のためにVine Linux 4.2でJoomla!を使ってサイト構築すべく、PCを預かって作業を始めた。Joomla!はFreeBSDサーバでも使っているから、なんとなくだがセッティングの仕方は分かったつもりでいた。しかしやはり罠があった。インストールが終わった直後だというのにadminでログイン出来ないのだ。
状況としてはVine Linuxをインストール後、殆どaptでインストールできる必要と思われるものを入れた。いわゆるLAMP関係の細かいパッケージまで記すとかなりくどくなるので割愛する。
Apache2,MySQL,vsftpd,PHP5,myphpAdmin
Vine Linux 4.2の場合、/etc/php/php.ini が設定ファイルだが、基本的にここはいじらないようにしてみた。Joomlaには、htaccess.txtが添付されているから、.htaccessとしてコピーし必要なところだけコメントアウトを外せば有効になるからだ。しかしこの作業のお陰で.htaccessでphpの設定がいじれるのを発見したというか学べた。Apacheのすばらしいところをまた一つ発見だ。
それはさておき、この環境でjoomla_1_0_15JP_Stableをインストールしてみたのだが、無事にセッティングが終わって、adminのパスワードが決定し、管理ページにログインしようとすると弾かれてまたログイン画面に戻されてしまう状況に遭遇してどうしようも無くなった。間違ったパスワードを入れると違うメッセージが表示されるので、認証は通っている感じだ。
検索したらそれらしい質問がJoomla!フォーラムで投稿されているが、アカウントを登録したのにメールが送られてこない上、やはりフォーラムでのやり取りが気に入らない(妙に偉そうなのが鼻につく)のでそんなフォーラムには行かないで自力で解決することに決めた。フィードバックしようかなとも思ったのだが、なんだかなぁという感じだ。どうせまだJoomla!を使い続けるかどうか分からないし、知ったかぶりの「エラソ」は大嫌いだから単独行動しよう。オプソだからそれも許されるでしょ?それが変だと言うのなら通いやすいフォーラム運営を考えて欲しいものだ。
結果的には「PHPの設定が関係していた」ことが分かったのだが、それは続きに記そう。
幸いというか、家のFreeBSDサーバでは快調にJoomla!が稼動している。この動いている環境を比較に使わない手は無いだろう。
余談ながら私はPHPやらPerlやらRubyやらSQLやらには興味が無く、プログラミングは素人同然である。しかしサーバー屋としてはある程度の知識を持っていなければならないので、苦戦しながらも勉強はしている。コーディングに興味が無いというほうが正しいのかな。いずれにしてもこういう言語特有の知識は殆ど無く素人同然である。
しかし、ネットで調べた方法を使えば、動いている環境と、問題のある環境の違いを調べる方法位は思いつくもんだ。少しPHPをいじったことのある人なら気づくだろう。いわゆるphpinfo.phpを使ってみるのだ。別にファイル名は同じでなくても良いが、Joomla!を公開しようとしているディレクトリにPHP設定の診断用スクリプトを保存しておいて、それにアクセスすればPHPの設定が見えるということは有名な話だし基本だと思う。具体的には下記の様になっている。
phpinfo.php
————–
<?
phpinfo();
?>
————–
たったこれだけの呪文を唱えてやるだけでカラフルなPHP情報画面が表示される。今回はセッション関係の問題だとやまを張って調べてみることにした。なぜならフロントサイトにはログインできるのに、バックサイト(管理画面)にログインできないことから、特殊なセッションを張っているせいだと思ったからだ。FreeBSD、Vine LinuxそれぞれのJoomla!公開ディレクトリに、phpinfo.phpを設置してWebブラウザで表示させてみた。そしてsessionのセクションを一項目ずつ比較していく。いくつか違いがあったがその中でも気になったのは下記の項目だった。
FreeBSD 6.2環境
| session.use_cookies | On | On |
| session.use_only_cookies | Off | Off |
| session.use_trans_sid | 0 | 0 |
Vine Linux 4.2環境
| session.use_cookies | On | On |
| session.use_only_cookies | On | On |
| session.use_strict_mode | On | On |
| session.use_trans_sid | 0 | 0 |
まずFreeBSD 6.2環境には、session.use_strict_modeが無い。こいつが臭いなとまず思った。しかしsession.use_only_cookiesがOffとOnでは大違いだ。このどちらかだなと疑いをかけた。
一般的にPHPの設定は、php.iniで行うのだと思っていたが、先述の通り.htaccessで制御できることが分かったのでなるだけ元は触りたくないなと、.htaccessで調整することにした。もちろん試験的に行うのならphp.iniでやっても良いと思うが、グローバル設定ファイルだから、どこをいじったか忘れないように注意が必要である(ちゃんとメモしておこう)。
.htaccessに下記のような記述を加えると、php.iniをいじらなくてもそのディレクトリだけに設定を反映できる。
php_value session.use_strict_mode 'off'
Vine Linux 4.2環境
| session.use_cookies | On | On |
| session.use_only_cookies | On | On |
| session.use_strict_mode | Off | On |
| session.use_trans_sid | 0 | 0 |
この設定が効いた!手順的には先にsession.use_only_cookiesをOffにしてみたのだが変化がなくて元に戻し、session.use_strict_mode をOffにしてみたら、あっさりログインできたという状態だ。
ではこのsession.use_strict_modeとはどういうものなのだろうか?非常に気になる。こんなところはいじってないので、Vine Linux 4.2の場合は、デフォルト設定ではJoomla!が動かないということになるのではないだろうか?ちなみにVine Linux 4.2の場合は、/etc/php/php.iniの終わりの方にVine独自設定がなされているから真っ先に確認することをお勧めする。おそらく日本語を使うためのチューニングだと思うが、思わぬワナにはまる可能性ありだ。
こちらに詳しいことが書かれていて、どうやら過去の流れ的にPHPのセッションを厳密化する機能なりパッチを追加したといういきさつがあったようだ。そしてこのモードはONにする事を推奨すると書かれている。不安になることを書くなぁ~
いずれにしても動かないんじゃ仕方ないし、FreeBSDではパッチが当たってない様なので、session.use_only_cookiesをOnにしておくことで妥協することにした。session.use_strict_mode まではやらなくて良いでしょ?よく分からないけど動かないんじゃ仕方ないし。という訳でFreeBSDの方は少しセキュアになり、Vineの方は少しセキュリティが甘くなった感じで結果オーライというところか。


コメント
vine linux 4.2
vine linux 4.20 をインストールしたのですがgrub のOS選択画面の後、OSが起動…vine linux 4.20 をインストールした…