目次
セキュリティ
DokuWiki は Web アプリケーションであり、多くの場合インターネットから到達可能な公開サーバ上で利用されています。これは、例えばデスクトップシステム上のローカルアプリケーションに比べると、悪意のある人々から攻撃されるリスクがより大きいということを意味します。
DokuWiki はセキュリティを念頭に置いて開発されています。私たちはユーザビリティとセキュリティのバランスを取ろうと試みていますが、満足のいく妥協点が見つけられない場合はセキュリティを優先しています。
このページでは、あなたの DokuWiki が安全であることを確認するためにはどのような面に気を配らなければならないのかについて、概要を説明します。
報告と通知
DokuWiki にセキュリティの問題を発見した場合は、私たちにお知らせください。推奨される通知方法は以下の通りです。
- バグレポートを投稿する
- メーリングリストにメールを投稿する
- andi [at] splitbrain [dot] org 個人宛てにメールを送る
非常に重大な、パッチが提供される前にバグを公開することで世界中の DokuWiki を危険にさらしてしまう可能性があるようなバグを除き、最初の 2 つの方法が推奨されます。
これまでのすべてのセキュリティの問題は、バグトラッキングシステムで見ることができます。
発見されたセキュリティの問題の重大性によって、将来のリリースの中で修正されるか (非常に小さな問題の場合)、もしくはバグ修正版リリースが作成されることになります。後者の場合、ユーザーにはアップデートの確認機構を通して通知されます。
古いバージョンの DokuWiki に対してはセキュリティ問題の修正が一切リリースされないため、常に最も新しいバージョンの DokuWiki を利用するべきです。
Web アクセスのセキュリティ
DokuWiki は、設定データとページデータをファイルに保管します。これらのファイルは、絶対に Web から直接アクセスできてはいけません。DokuWiki の配布用 tar ボールには、通常 Apache Web サーバに対して特定のディレクトリへのアクセス拒否を指示するための .htaccess
ファイル一式が含まれています。
もし Apache Web サーバを使用していない場合、もしくは Apache が .htaccess
ファイルを利用しない設定となっている場合は、DokuWiki の安全を自分の手で確保する必要があります。
以下に示すディレクトリは、Web からアクセスできてはいけません。
data
conf
bin
inc
(アクセスできても危険ではありませんが)
アクセス権限を調整する必要があるかどうかを確認するには、http://yourserver.example.com/data/pages/wiki/dokuwiki.txt
にアクセスしてみてください。この方法でファイルにアクセスできてしまうようではいけません。
もしディレクトリの安全が適切に確保されていない場合は、安全にする方法について、以下に示すサブセクションをお読みください。
Apache でのディレクトリへのアクセス拒否
一番単純な方法は、Apache の設定で .htaccess
機能を有効にすることです。
Apache チュートリアル: .htaccess ファイルを参照して下さい。
DokuWiki には正しく設定された .htaccess ファイルが付属しています。 置かれているディレクトリへの全アクセスをブロックする .htaccess ファイルの内容は以下のとおりです:
order allow,deny deny from all
備考:Ubuntu で apache2 を使用した場合、.htaccess が機能しない!
一般的になのか Ubuntu 特有なのか判らないですが、Apache2 は Apache1.x とは若干異なる設定になっているようです。
/etc/apache2/sites-available 内の default ファイルを変更する必要があります。 (http の代わりに https を使う場合は、default-ssl ファイル)
ファイルには以下があるはずです:
NameVirtualHost * <VirtualHost *> ServerAdmin admin@site.com DocumentRoot /var/www/ <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride none Order allow,deny allow from all </Directory>
<Directory /var/www/> 内の AllowOverride のデフォルトは none ですが、all にして下さい。
apache の設定を更新するために /etc/init.d/apache2 reload すると、.htaccess ファイルは有効になるはずです。
(See http://ubuntuforums.org/showthread.php?t=47669 の全スレッドを参照して下さい)
[全体を変更する代わりに、例えば /var/www/path-to-dokuwiki
のような、DokuWiki をインストールした特定のディレクトリに対してこの変更をすることもできます。]
他の方法は、VirtualHost
設定内で LocationMatch
ディレクティブを使用します。
.htaccess
ファイルよりは少しだけ効率的です。
Directory
ディレクティブの直下に追加します:
<LocationMatch "/(data|conf|bin|inc)/"> Order allow,deny Deny from all Satisfy All </LocationMatch>
しかし、http://httpd.apache.org/docs/2.0/ja/sections.html#file-and-web の「いつ何を使うか」章を見て下さい。
Location
ディレクティブは仮想パス (データベースから生成されるウェブページなど) にのみ使用し、ファイルシステム上のオブジェクトへのアクセスを制限するためには決して使用ないように、とあります。
私の意見では、.htaccess が利用できないか不十分な場合、ディレクトリ毎の制限をHost の設定ファイル内に直接置くのが最も安全な方法です。
これhttp://ada.adrianlang.de/dokuwiki-php-execution#solutions_in_the_configurationは手堅い方法ですし、「標準」とすべきです。
例えば、他に wiki インストールがあるとか data|conf|bin|inc ディレクトリを含む別の “root” がある場合、例えば、他に wiki インストールがある等、上の方法では問題が起きる可能性があります。 自分の wiki インストールフォルダーのみに LocationMatch 条件を拡張することで、この問題は回避できます。
<Directory /var/www/dokuwiki> order deny,allow allow from all </Directory> <LocationMatch "^/dokuwiki/(data|conf|bin|inc)/"> order allow,deny deny from all satisfy all </LocationMatch>
IIS でのディレクトリへのアクセス拒否
上記のディレクトリへのアクセスは、IIS の設定で無効にできます。
IIS8+ (Servers 2012 and 2012R2) の場合:
- “IIS Request Filtering” を選択します。
- “URL” タブを選びます。
- “Allow URL” をクリックします。
- ポップアップボックスに “/data/media/” を入力し、“OK” をクリックします。
- “Deny Sequence…” をクリックします。
- ポップアップボックスに “/data/” を入力し、“OK” をクリックします。
- /conf/ /bin/ /inc/ ディレクトリに対して、“Deny Sequence…” 指示を繰り返します。
IIS7 の場合:
- “IIS Request Filtering” を選択します。
- “URL” タブを選びます。
- “Deny Sequence” をクリックします。
- ポップアップボックスに “/data/” を入力します。
“/data/media” に対して同じ操作をし、“Always Allow” を選びます(そうしないと、画像・その他が表示されません)。 IIS 7.5 の場合、引用符を追加しないで下さい。 URL 内の /data/media を読むでしょう。
注:デフォルトでは、Management Console snap-in for Internet Information Services 7 には “IIS Request Filtering” セクションへのアクセス権がありません。 Web Platform Installer を使用して “IIS Administration pack 1.0” をインストールすると有効になります。
注2:“/data” ではなく “/data/” と入力することを確認して下さい。 そうでないと、“data” で始まるページにアクセスできなくなります。
IIS 7+ の代替方法
(共用ホストのように)IIS の設定オプションにアクセスできない場合、以下の方法が使用可能です。
代替方法1:
DokuWiki ルートディレクトリに次のファイルを配置できます:
- web.config
<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <security> <requestFiltering> <filteringRules> </filteringRules> <alwaysAllowedUrls> <add url="/data/media/" /> </alwaysAllowedUrls> <denyUrlSequences> <add sequence="/data/" /> <add sequence="/conf/" /> <add sequence="/bin/" /> <add sequence="/inc/" /> </denyUrlSequences> </requestFiltering> </security> </system.webServer> </configuration>
代替方法2:
保護を必要とするディレクトリに次の web.config ファイルを配置できます。
data
conf
bin
inc
(アクセスしても危険はありませんが)
- web.config
<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <handlers accessPolicy="None" /> </system.webServer> </configuration>
IIS 6.5 以前の場合:
- 設定用のツールを起動します: スタート → 設定 → コントロール パネル → 管理ツール → インターネット インフォメーション サービス
- 保護したいディレクトリまで進みます: ローカル コンピュータ → Web サイト → 規定の Web サイト → ディレクトリへのパス
- フォルダを右クリックしてプロパティを選択 → ディレクトリ セキュリティ → IP アドレスとドメイン名の制限 → 編集
- 「規定では、すべてのコンピュータからの接続を: 拒否する」を選択します。
- /data/ /conf/ /bin/ /inc/ ディレクトリに対して、これを繰り返します。
data ディレクトリを変更する
最も重要なことは data
ディレクトリを安全にすることです。上述のような方法でディレクトリへのアクセス拒否を設定できない場合には、少なくとも data ディレクトリの場所を推測できないように変更すべきです。
具体的には data ディレクトリの名前を複雑なもの(例:英数字からなるランダムな文字列)に代え、その場所を conf/local.php
ファイルの 設定項目: savedir オプションに設定します。
ドキュメントルート外へのディレクトリの移動
上述のディレクトリへのアクセスを避けるための最も安全な方法は、これらのディレクトリを、Web サーバのいわゆる「ドキュメントルート」の外側に移動してしまうことです。
data ディレクトリ
data
ディレクトリをドキュメントルートの外側に移動してください。- 新しい
data
ディレクトリの場所を指し示すため、設定項目: savedir を編集してください。
例えば、data
ディレクトリが /home/yourname/data
に移動された場合は、以下の行を conf/local.php
ファイルに追加してください。
$conf['savedir'] = '/home/yourname/data/';
conf ディレクトリ
conf
ディレクトリ (およびその内容) をドキュメントルートの外側に移動してください。preload.php
という名前のファイルをinc
ディレクトリ内に作成し、新しいconf
ディレクトリの位置を定義するDOKU_CONF
という定数を設定してください。
例えば、conf
ディレクトリが /home/yourname/conf
に移動された場合は、以下の inc/preload.php
ファイルを作成してください。
- inc/preload.php
<?php define('DOKU_CONF','/home/yourname/conf/');
bin ディレクトリ
bin
ディレクトリには、コマンドラインツールが含まれています。もしサーバのシェルにアクセスできない場合は、単純にこのディレクトリとその内容を削除することができます。アクセスできる場合は、このディレクトリをドキュメントルートの外に移動してください。追加の設定は不要です。
inc ディレクトリ
inc
ディレクトリをドキュメントルートの外に移動するための簡単な方法は、現在のところありません。しかし、このディレクトリには注意を払うべき情報が一切含まれていないため、なんとしてでも移動しようと努力する価値はありません。
DokuWiki の設定
DokuWiki には、インストールされた DokuWiki の様々なセキュリティ面に影響を与えるいくつかの設定項目があります。それぞれの設定項目が何を行うためのもので、推奨される設定がどのようなものであるかを知るには、以下のページを参照してください。
- allowdebug – システム情報の漏洩を防ぐためデバッグ出力を無効化する
- fetchsize – 外部データのキャッシュ動作を設定する
- fullpath – ページのフルパスを表示する
- すべての認証の設定
- usewordblock – ブラックリストを用いてスパム投稿を防ぐ
- mailguard – ロボットによるメールアドレスの収集を避ける
- iexssprotect – Internet Explorer が持つ XSS の問題から保護する
- htmlok – HTML コードの埋め込みを許可する
- phpok – PHP コードの埋め込みを許可する
- hidepages – 特定のページを索引や検索結果から隠す
- safemodehack – セーフモードの制限に対処する
プラグインのセキュリティ
DokuWiki には、コミュニティから提供された多数のプラグインがあります。プラグインは、新しいコードを追加することによって DokuWiki に新しい機能を追加します。これは、実質的にコードからあなたのサーバに対して任意にアクセスできるということを意味します。さらにプラグインは DokuWiki とは別に、もっぱらその場限りの方法で配布されています。それらは DokuWiki コアのコードベースが受けているような一定の注目や検査の影響下にはありません。従って、プラグインをインストールする前にはセキュリティへの警戒が必要です。
以下に、インストールするプラグインを選ぶ際に役立ついくつかのヒントを示します。
- インストールする前に、可能であればプラグインのソースコードを自身で検査してください。
- 疑わしい場合は、メーリングリストで質問してください。
- プラグインは、外部から直接アクセス可能な
lib
ディレクトリの下にインストールされます。プラグインに何が含まれているかを精査し、必要に応じて .htaccess ファイルでアクセスを遮断してください。 - プラグインは、DokuWiki プロジェクトとは直接関係のない開発者によって作成されています。彼らは経験不足であったり、悪意を持っていたり、危険にさらされたサーバ上でプラグインのソースコードをホストしている可能性があります。あなたが誰を信頼するかについて注意してください!
- セキュリティ警告の言及に備えてプラグインのページを確認し、新しいリリースが利用可能になった場合はプラグインをアップグレードしてください。
プラグインのセキュリティ問題に関する報告は・・ もご覧ください。
アクセス制御について
アクセス制御リスト (ACL) を設定することによって、DokuWiki のページまたは名前空間に対してユーザがどのようなアクセス権をもつかをコントロールできます。例えば、ユーザが属するグループあるいはユーザごとに、ページの閲覧や編集を許可したり、制限することができます。
追加の読み物
以下に、セキュリティに関する内部および外部のページをもう少し挙げておきます。