すべてのウェブアプリケーションは非常に複雑なものであり、すべてのアプリケーションには時々発見されるセキュリティ問題が存在します。通常、それはプログラマが予期しない入力の組み合わせに起因します。Moodleプロジェクトはセキュリティを深刻に捉えています。そして、私たちが発見したセキュリティホールを閉じるよう、継続的にMoodleを改良しています。
イントロダクション (Introduction)
- このページでは、あなたのMoodleインストレーションに関する重要なセキュリティ対策も含みます。
- 開発者が確認することができ、登録Moodleサイトに早急に対応されるよう知らせるため、あなたはセキュリティ問題をMoodle trackerに報告 (およびセキュリティ問題であるとマーク) する必要があります。
- まだアップグレードされていないMoodle管理者を保護するため、あなたは実際のセキュリティ上の弱点をウェブ上のフォーラムまたは他の場所に投稿すべきではありません。
簡易セキュリティ対策 (Simple security measures)
- 最善のセキュリティ戦略は適切なバックアップです! しかし、リストアできない限り、あなたは良いバックアップをしているとは言えません! あなたのリストア手順を確認してください!
- あなたが使用するソフトウェアおよびサービスのみをロードしてください。
- 定期的な更新を実行してください。
- 寒い冬の日の重ね着の考えをもとにして、あなたのセキュリティモデルを作成してください。
基本推奨 (Basic recommendations)
- それぞれのバージョンのリリース時、定期的にMoodleをアップデートしてください。
- 公開されたセキュリティホールはリリース後にクラッカーの注意を引くことになります。古いバージョンほど、脆弱性を含んでいる可能性があります。
- 「register_globals」を無効にしてください!
- これはサードパーティスクリプトのXSS (cross site scripting - クロスサイトスクリプティング ) 問題を防ぐための助けとなります。
- 管理者および教師に強いパスワードを使用してください。
- 「難しい」パスワードを選択することは「強引な (brute force) 」アカウントのクラッキングに対する基本的なセキュリティの実践です。
- 信頼できるユーザにのみ教師アカウントを与えてください。実運用サーバ上にフリーの教師アカウントが利用できる公開サンドボックスの作成を避けるためです。
- 教師アカウントには極めて自由なパーミッションがあるため、データを悪用および盗用できる状況を簡単に作ることができてしまいます。
- あなたのシステムを可能な限り分けてください。
- もうひとつの基本的なセキュリティテクニックは異なるシステムで異なるパスワードを使用すること、異なるサービスごとに異なるマシンを使用すること等です。これにより、1つのアカウントが不正使用または1つのサーバに侵入にされたとしても、ダメージが広範囲に広がることを防ぎます。
通常更新を実行する (Run regular updates)
- 自動更新システムを使用します。
- Windowsアップデート
- Linux: up2date, yum, apt-get
- cronのスケジュールスクリプトによる自動更新を考慮してください。
- Mac OSX更新システム
- php、apacheおよびmoodleを最新版にします。
最新状態にするため、メーリングリストを使用する (Use mailing lists to stay updated)
- CERT - http://www.us-cert.gov/cas/signup.html
- PHP - http://www.php.net/mailing-lists.php - アナウンスメントリストにサインアップします。
- MySQL - http://lists.mysql.com - MySQLアナウンスメントにサインアップします。
ファイアウォール (Firewalls)
- セキュリティ専門家は2重のファイアーウォールを推奨しています。
- ハードウェア/ソフトウェアの組み合わせを別にします。
- 多くの場合、未使用のサービスを無効にすることはファイアーウォールと同じく効果的です。
- 開いているネットワークポートを確認するには、netstat -a コマンドを使用してください。
- セキュリティ保護の保証があるわけではありません。
- 許可されるポート
- 80, 443(ssl), 9111 (チャット用)
リモート管理: ssh 22またはrdp 3389
パスワードポリシー (Password policy)
パスワードポリシーは「設定 > サイト管理 > セキュリティ > サイトポリシー」で設定することができます。
パスワードの複雑さを強制するチェックボックスがあります。オプションは次のとおりです: パスワード長、数字、小文字、大文字、非英数字、連続した同一文字
これらの条件に合致しないパスワードをユーザが入力した場合、入力されたパスワードに関する問題を示したエラーメッセージが表示されます。
初期パスワードの変更とともに複雑なパスワードの使用を強制することにより、ユーザが「良いパスワード」を選択する役に立ちます。
しかし、チェックを面倒にすることにより、結果としてユーザがパスワードを書きとめることになりますので、現実的になる必要もあります。
最悪の事態に備える (Be prepared for the worst)
- バックアップを準備してください。
- 事前にリカバリ処理を練習してください。
- 定期的にルートキット検出ツールを使用してください。
Moodleセキュリティ警告 (Moodle security alerts)
- あなたのサイトをmoodle.orgに登録してください。
- 登録ユーザにはメールアラートが送信されます。
- セキュリティアラートは下記オンラインにも掲載されます:
- ウェブ - http://moodle.org/security
- RSSフィード - http://moodle.org/rss/file.php/1/1/forum/996/rss.xml
様々な検討事項 (Miscellaneous considerations)
以下、あなたのセキュリティ全体に関して影響のある考慮すべき内容です:
- セキュアフォーム設定を使用してください。
- 常にMySQLのrootパスワードを設定してください。
- MySQLネットワークアクセスを無効にしてください。
- SSLを使用してください (httpslogins=yes)。
- 良いパスワードを使用してください - 「設定 > サイト管理 > セキュリティ > サイトポリシー」のパスワードポリシーを設定してください。
- 「設定 > サイト管理 > セキュリティ > サイトポリシー」の「opentogoogle」設定を有効にしないでください。
- ゲストアクセスを無効にしてください。
- すべてのコースに登録キーを設定するか、すべてのコースにおいて「コース登録可能 = No」に設定してください。
- 「管理 > サイト管理 > プラグイン > 受講登録 > 自己登録」で登録キーヒント (「ヒントを表示する」) が無効にされていることを確認してください。
最も安全なファイルパーミッション (Most secure/paranoid file permissions)
注意: MS Windowsのパーミッションシステムとは全く異なるため、以下の情報はLinux/Unixベースのインストーレーションのみに適用してください。
あなたのサーバのセットアップに応じて、以下2つの異なるシナリオがあります:
- あなたは独自の専用サーバでMoodleを運用しています。
- あなたは共有ホスティング環境でMoodleを運用しています。
以下のセクションでは、あなたにパーミッションを設定するためにウェブサービスユーザアカウントおよびグループが必要であることに留意してください。これはサーバによって異なりますが、この機能が無効にされていない場合、あなたは管理者としてログインした上で http://your.moodle.site/admin/phpinfo.php にアクセスして、「apache」テーブル内にある「User/Group」の行を探してください。例えば、私はユーザアカウントに「www-data」、グループアカウントにも「www-data」を見つけることができました。
専用サーバでMoodleを運用する (Running Moodle on a dedicated server)
あなたは密閉されたサーバでMoodleを運用しています。そして、MoodleコードおよびMoodle設定 (config.php) の両方を管理者 (root) が管理していると仮定します。以下、私が考える最も厳重なパーミッションです:
1. moodledataディレクトリおよびすべてのコンテンツ (およびsessionsを含むサブディレクトリ):
owner: apache user (apache, httpd, www-data, whatever; see above) group: apache group (apache, httpd, www-data, whatever; see above) permissions: 700 on directories, 600 on files
2. moodleディレクトリおよびすべてのコンテンツ (およびconfig.phpを含むサブディレクトリ):
owner: root group: root permissions: 755 on directories, 644 on files.
あなたが通常ユーザとしてログインできる場合、2. は下記のようになります:
owner: root group: apache group (apache, httpd, www-data, whatever; see above) permissions: 750 on directories, 640 on files.
これらのパーミッションは考え過ぎのパーミッションであることをご理解ください。moodledataおよびmoodleディレクトリ (およびサブディレクトリ) のパーミッションの厳しさを緩くしたとしても、あなたは十分セキュアであることができます。
あなたが共有ホスティング環境でMoodleを運用している場合、恐らく、上記のパーミッションは正しくありません。ディレクトリに700 (およびファイルに600) のパーミッションを設定した場合、恐らく、あなたのディレクトリおよびファイルにウェブサービスユーザアカウントがアクセスできないようになります。
可能な限りパーミッションを厳しくしたい場合、あなたは以下の内容を把握する必要があります:
- ユーザアカウントおよびグループの下でウェブサービスが動作している (上記をご覧ください)。
- moodledataおよびmoodleディレクトリ両方のオーナー (通常、あなたのクライアントユーザアカウント) およびグループ。通常、あなたはこれらの情報をホスティングのコントロールパネルのマネージャから取得することができます。moodleフォルダに移動して、ディレクトリまたはファイルを選択した後、そのファイルのパーミッション、オーナーおよびグループを確認または変更してください。通常、これは現在のパーミッション、オーナーおよびグループを表示します。同じことをmoodledataディレクトリに対しても実施してください。
そして、下記シナリオに応じて、あなたのmoodledataディレクトリに対して、異なるパーミッションを設定することができます (安全性の高いものから低いものへと一覧表示されています):
- ウェブサービスアカウントおよびディレクトリ/ファイルのオーナーが同一である場合、あなたはディレクトリのパーミッションを700、ファイルのパーミッションを600にすべきです。
- ウェブサービスグループおよびディレクトリ/ファイルのグループが同一である場合、あなたはディレクトリのパーミッションを770、ファイルのパーミッションを660にすべきです。
- 上記のどれにも当てはまらない場合、あなたはディレクトリのパーミッションを777、ファイルのパーミッションを666にする必要があります。これは安全性が低くなりますが、あなたが選択し得る唯一のオプションです。707および606はさらに安全になりますが、動作の可否はあなたの設定に依存します。
ウェブサービス自体によって、ディレクトリおよびファイルが作成され、適切なパーミッションが適用されるため、実際のところ、あなたが必要なことは上記で指定されたパーミッションをmoodledataに設定するのみです。
Moodleディレクトリに関して、ウェブサービスユーザアカウントがファイルを読むこと、ディレクトリを読むことおよび実行することができる限り、これで十分です。ファイルまたはサブディレクトリに対して、ウェブサービスアカウント/グループに書き込み権を与える必要はありません。唯一の難点はインストール処理中、Moodleがconfig.phpを作成できないため、あなたがconfig.phpを手動で作成する必要がある点です。しかし、これは大きな問題ではありません。
関連情報
Using Moodleフォーラムディスカッション