Table of Contents

セキュリティ

DokuWiki は Web アプリケーションであり、多くの場合インターネットから到達可能な公開サーバ上で利用されています。これは、例えばデスクトップシステム上のローカルアプリケーションに比べると、悪意のある人々から攻撃されるリスクがより大きいということを意味します。

DokuWiki はセキュリティを念頭に置いて開発されています。私たちはユーザビリティとセキュリティのバランスを取ろうと試みていますが、満足のいく妥協点が見つけられない場合はセキュリティを優先しています。

このページでは、あなたの DokuWiki が安全であることを確認するためにはどのような面に気を配らなければならないのかについて、概要を説明します。

報告と通知

DokuWiki にセキュリティの問題を発見した場合は、私たちにお知らせください。推奨される通知方法は以下の通りです。

非常に重大な、パッチが提供される前にバグを公開することで世界中の DokuWiki を危険にさらしてしまう可能性があるようなバグを除き、最初の 2 つの方法が推奨されます。

これまでのすべてのセキュリティの問題は、バグトラッキングシステムで見ることができます。

発見されたセキュリティの問題の重大性によって、将来のリリースの中で修正されるか (非常に小さな問題の場合)、もしくはバグ修正版リリースが作成されることになります。後者の場合、ユーザーにはアップデートの確認機構を通して通知されます。

古いバージョンの DokuWiki に対してはセキュリティ問題の修正が一切リリースされないため、常に最も新しいバージョンの DokuWiki を利用するべきです。

Web アクセスのセキュリティ

DokuWiki は、設定データとページデータをファイルに保管します。これらのファイルは、絶対に Web から直接アクセスできてはいけません。DokuWiki の配布用 tar ボールには、通常 Apache Web サーバに対して特定のディレクトリへのアクセス拒否を指示するための .htaccess ファイル一式が含まれています。

もし Apache Web サーバを使用していない場合、もしくは Apache が .htaccess ファイルを利用しない設定となっている場合は、DokuWiki の安全を自分の手で確保する必要があります。

以下に示すディレクトリは、Web からアクセスできてはいけません

アクセス権限を調整する必要があるかどうかを確認するには、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) の場合:

  1. “IIS Request Filtering” を選択します。
  2. URL” タブを選びます。
  3. “Allow URL” をクリックします。
  4. ポップアップボックスに “/data/media/” を入力し、“OK” をクリックします。
  5. “Deny Sequence…” をクリックします。
  6. ポップアップボックスに “/data/” を入力し、“OK” をクリックします。
  7. /conf/ /bin/ /inc/ ディレクトリに対して、“Deny Sequence…” 指示を繰り返します。

s30.postimg.org_osgziov3l_iis8_filters.jpg

IIS7 の場合:

  1. “IIS Request Filtering” を選択します。
  2. URL” タブを選びます。
  3. “Deny Sequence” をクリックします。
  4. ポップアップボックスに “/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 ファイルを配置できます。

web.config
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <handlers accessPolicy="None" />
    </system.webServer>
</configuration>

IIS 6.5 以前の場合:

  1. 設定用のツールを起動します: スタート → 設定 → コントロール パネル → 管理ツール → インターネット インフォメーション サービス
  2. 保護したいディレクトリまで進みます: ローカル コンピュータ → Web サイト → 規定の Web サイト → ディレクトリへのパス
  3. フォルダを右クリックしてプロパティを選択 → ディレクトリ セキュリティ → IP アドレスとドメイン名の制限 → 編集
  4. 「規定では、すべてのコンピュータからの接続を: 拒否する」を選択します。
  5. /data/ /conf/ /bin/ /inc/ ディレクトリに対して、これを繰り返します。

data ディレクトリを変更する

最も重要なことは data ディレクトリを安全にすることです。上述のような方法でディレクトリへのアクセス拒否を設定できない場合には、少なくとも data ディレクトリの場所を推測できないように変更すべきです。

具体的には data ディレクトリの名前を複雑なもの(例:英数字からなるランダムな文字列)に代え、その場所を conf/local.php ファイルの 設定項目: savedir オプションに設定します。

ドキュメントルート外へのディレクトリの移動

上述のディレクトリへのアクセスを避けるための最も安全な方法は、これらのディレクトリを、Web サーバのいわゆる「ドキュメントルート」の外側に移動してしまうことです。

data ディレクトリ

  1. data ディレクトリをドキュメントルートの外側に移動してください。
  2. 新しい data ディレクトリの場所を指し示すため、設定項目: savedir を編集してください。

例えば、data ディレクトリが /home/yourname/data に移動された場合は、以下の行を conf/local.php ファイルに追加してください。

$conf['savedir'] = '/home/yourname/data/';

conf ディレクトリ

  1. conf ディレクトリ (およびその内容) をドキュメントルートの外側に移動してください。
  2. 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 の様々なセキュリティ面に影響を与えるいくつかの設定項目があります。それぞれの設定項目が何を行うためのもので、推奨される設定がどのようなものであるかを知るには、以下のページを参照してください。

プラグインのセキュリティ

DokuWiki には、コミュニティから提供された多数のプラグインがあります。プラグインは、新しいコードを追加することによって DokuWiki に新しい機能を追加します。これは、実質的にコードからあなたのサーバに対して任意にアクセスできるということを意味します。さらにプラグインは DokuWiki とは別に、もっぱらその場限りの方法で配布されています。それらは DokuWiki コアのコードベースが受けているような一定の注目や検査の影響下にはありません。従って、プラグインをインストールする前にはセキュリティへの警戒が必要です。

以下に、インストールするプラグインを選ぶ際に役立ついくつかのヒントを示します。

プラグインのセキュリティ問題に関する報告は・・ もご覧ください。

アクセス制御について

アクセス制御リスト (ACL) を設定することによって、DokuWiki のページまたは名前空間に対してユーザがどのようなアクセス権をもつかをコントロールできます。例えば、ユーザが属するグループあるいはユーザごとに、ページの閲覧や編集を許可したり、制限することができます。

追加の読み物

以下に、セキュリティに関する内部および外部のページをもう少し挙げておきます。