既に十分に議論された問題であるとは思うのですが,index.phpと同じフォルダにMoodleの設定ファイルであるconfig.phpを置いておくことにセキュリティ上の不安は無いのでしょうか? いえいえ,皆さんも以前から不安だったはずです.このファイルの中には見られては困る情報も含まれています.Apacheによる書き換えの危険性については認知されていますし,このファイル自体が改ざんされなかったとしても読まれたり流出してしまったりといった危険性についても認知されていると思います.
#MySQLのパスワードが知られると極めて危険
Apacheの設定を失敗すれば,このフォルダをディレクトリ表示(で良いのでしょうか)できてしまい,しかもダウンロードできてしまったりしますよね.さすがにwgetで容易にダウンロードという訳には(設定さえ正しければ)いきませんが.でも世界中に存在する公開されたMoodleサイトのURLを知ることができれば,設定の甘いサイトを探し出すことはできるでしょう.
ごくごく稀ですが,PHPファイルへのリンクをクリックするとサーバサイドで実行されずにダウンロードできてしまう現象を見たことがあります.可能性としてはゼロではありません.
config.phpには最低限の情報,$CFG->datarootのみを記述しておいて,それ以外の情報はmoodledataフォルダ内に置いておく方が安全だと思うのですが如何でしょう.
時々,”config.phpの中身を教えて下さい”という質問に対して$CFG->dbpass を含んだ状態で公開してしまう方や,config.phpを含んだ状態でmoodleフォルダをバックアップしてしまう方もいるでしょう.しかもそれを誰かにコピーしてあげたり,多くの人が閲覧可能な領域に保存しておいたりするのも危険です.
せめてMySQL(データベース)関係だけでも分離できないでしょうかねぇ.私も2年半前まで素人に毛の生えた程度のスキルしかありませんでした.今後,個人や小規模な団体がMoodleサイトを続々と立ち上げ始めるとすると,現在のconfig.phpの取り扱いには不安を感じます.設定ファイルが二箇所に分かれるのは面倒くさいです.でも,まずはconfig.phpの$CFG->datarootだけを指定して,それ以外は全てmoodledataフォルダ内の設定ファイルを設定して下さいね,という程度の作業は(半自動インストールの作業を考えると簡単では無いでしょうが)無茶では無いと思います.いや,インストールでconfig.phpが自動生成される訳ですから,その段階から手を打てるはずです.
試してみました.
自分のシステムに関しては直ぐに手は打てます.データベース関係の設定,$CFG->dbhost, dbname, dbuser, dbpass を例えばmoodledata/configという名前のフォルダを作成し,その中にdbconfig.phpとでも名前を付けて退避させたとすれば,config.phpに,
require_once($CFG->dataroot.'/config/dbconfig.php');
の一行を追加して読み込ませれば良いですね.
#moodledataを外部からApache経由でアクセスできてしまう設定(たとえばhtdocsの下に配置)の環境は論外として.
参考URL:
http://docs.moodle.org/en/Security
http://moodle.org/mod/forum/discuss.php?d=65706