config.phpのセキュリティに関して

config.phpのセキュリティに関して

- Tatsuya Shirai の投稿
返信数: 5

 既に十分に議論された問題であるとは思うのですが,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

Tatsuya Shirai への返信

Re: config.phpのセキュリティに関して

- Tatsuya Shirai の投稿
 fs_moodleの設定ファイル,fsconfig.phpもconfig.phpと同じくmoodleのルートフォルダに格納しています.こちらの初期設定の問題を考えていて思いついた次第です.fsconfig.phpだけでもmoodledataに逃がした方が良いですかねぇ.次のメジャーバージョンアップではそのようにしましょう.
Tatsuya Shirai への返信

Re: config.phpのセキュリティに関して

- Tatsuya Shirai の投稿

 個人的にはconfig.phpの中身は全てmoodledata/configなどのフォルダに移動してしまえ!と思うのですが,複数のインスタンスで共通のmoodledataとMySQLのデータベースを使う運用もあるかも知れませんね.でも,さすがにmoodledataとMySQLのデータベースの対応は崩さないはずですから,データベースの部分の設定のみをmoodledataに移すことを提案した次第です.

 もし複数のインスタンスで共通のmoodledataを使うのだとしても,手作業にはなりますが,読み込む設定phpファイルの名前を分ければ良い程度の話ですよね.

Tatsuya Shirai への返信

Re: config.phpのセキュリティに関して

- Haruhiko Okumura の投稿
このアイデア、とてもいいですね!

実はMySQL側でどのホストからの接続を受け付けるかをちゃんと設定してあればパスワードは空でも問題ないはずですが、そのあたりの設定が怪しいサイトもあるかもしれませんね。

# 今CMS研究会@日本女子大にいます。
Haruhiko Okumura への返信

Re: config.phpのセキュリティに関して

- Tatsuya Shirai の投稿

 奥村先生,お忙しいところありがとうございます.
 当方,試験期間中ですのでCMS研には参加できませんでした.日本女子大に行くチャンスだったのですが...


 それほど的外れな提案では無いと考えて良いでしょうか^^).

 Trackerに提案するほどのことではなく,管理者が行うFAQ的な工夫としてSecurityの辺りに追記して貰う内容なのか,もう少しだけ時間を置いて考えてからアクションを起こそうと思います.皆さんも,他にご意見ありましたらよろしくお願いします.(既に対策に向けて別のアプローチが模索されている,など).

Tatsuya Shirai への返信

Re: config.phpのセキュリティに関して

- Tatsuya Shirai の投稿

 このconfig.phpの設定のうちのパスワードに関する設定のみを別ファイルに分けて,require_once()で読み込む方法ですが,$CFG->passwordsaltmainなどのパスワードSALTに関しては有効では無いようですね.セキュリティを考慮してか,config.phpに記述してないとセキュリティレビューで警告(設定されていない)が出力されます.少しだけ気を付けた方が良さそうですね.

 当方では同じmoodledata, Databaseを運用用とデバッグ用のmoodleで共有しています.この場合,それぞれのmoodleフォルダ内のconfig.phpに同じ$CFG->passwordsaltmainを設定しないといけないようです.大した手間ではありませんが.