Moodleサーバを移行しようと思い、データベースのバックアップとリストアの練習を行っています。データベースのバックアップとリストアは成功してい るようなのですが、移行後のMoodleサーバにログオンすることができません。一般ユーザでもadminでもログオンすることができません。以前投稿に あった、adminのパスワードを忘れた場合のパスワード変更は実行できていますので、かろうじてadminでログオンすることはできています。 adminでログオン後は、ユーザ一覧やコースについては、どうやら正常に移行ができているようだということは確認できています。なお、サーバの環境は以 下のとおりです。
Debian 5.0.4
Moodle 1.9.7+
MySQL 5.0.51a-24+lenny3
phpmyadmin 4:2.11.8.1-5+lenny3
ちなみに、データベースのバックアップとリストアの手順は、喜多先生の翻訳本も参考にさせていただいております。
FAQかもしれませんが、情報提供いただければ幸いでございます。失礼いたします。
http://docs.moodle.org/ja/%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89SALT
実際のmoodleサーバの移行は、稼働中のmoodleのデータベースをバックアップし、別サーバにリストアしてmoodleを別サーバ上で再構築する、という流れです。(この際、URLが変わる場合はちょっと手順が増えますが今回は省きます) この作業の練習、ということですね。
喜多先生のご指摘の通り、moodle1.9.7+で新規インストールを行った場合、インストールの過程で生成されるconfig.phpには、パスワードSALTという文字列が含まれます。SALTの設定はつまづきやすいところなので、これが原因であると仮定してご説明します。
オリジナルのmoodleサイトのmoodleディレクトリの中にあるconfig.phpに、
$CFG->passwordsaltmain = 'ランダムな半角文字列';
があるかどうか確認してみてください。もしあれば、移行先のmoodleのconfig.phpにも同じ設定を持たせないと、ローカルDBに保存されているユーザパスワードのMD5ハッシュと一致しなくなるため、ログインできなくなります。
以下解説です。
moodleのローカルDBには、以前からパスワードがMD5というハッシュ関数で算出した128ビット(16進数の半角英数32文字)のハッシュ値(暗号)が保存されています。MD5ハッシュは不可逆であり、DBに保存された文字列から元のパスワードを割り出すことはできないため、実際の認証が行われる際は、ユーザが入力した文字列をその都度MD5でハッシュ値に変換したものと、DBに保存されたハッシュ値が一致するかどうかで認証を行っています。
しかしながら、現在ではオンライン上に、「MD5ハッシュのデータべース」が公開されていたり、パスワードによく使われる単語をベースに総当たり攻撃を行うツールなどが存在したりするため、単にパスワードをそのままMD5でハッシュ値にするだけでは安全と言えなくなってきました。このため、ユーザの正規のパスワードに「パスワードSALT」というランダムな文字列を連結した上で、MD5を用いてハッシュ値にすることでより突破されにくい強固なセキュリティをmoodleローカルDB認証に持たせることができるようになった、という訳です。
このため、一旦SALTを用いてハッシュ値に変換されたパスワードは、サーバ移行の際にも同一のSALTがないと、ユーザが入力したパスワードがローカルDBに保存されたハッシュ値と同一にならないため、認証が通過できなくなるのです。