Manual:Image Authorisation/ja
From MediaWiki.org
この記事はユーザかつ/またはユーザグループパーミッションに基づいて画像とファイルへのアクセスを制限したいシステム管理者のためにあります。
アップロードされたファイルは一般的にMediaWikiを通してではなくウェブサーバによって直接保存されます。暗号化(例えば、/c/c4/...)を通した難読化による最小レベルのセキュリティが存在しますが、ファイル名から簡単にパスを計算することが出来るので本当の防御方法ではありません。
これは推奨されるコンフィギュレーションではありません; MediaWikiはCMSとして、もしくは機密データを保護するために設計されていません。反対に、可能な限りオープンなものとして設計されました。そういうわけで本質的にはフル機能で、プライベートな内容の隙のない保護はサポートしません。この機能性を使いたい管理者はSecurity issues with authorization extensionsをじっくり読まなければなりません。
Contents
|
[edit] 概要
デフォルトでは、すべてのアップロードされた画像(とファイル)はウェブブラウザで直接アクセス可能です。MediaWikiフレームワークの範囲内でユーザでユーザを認証するアクセスのみ許可したい場合、2つの条件をみたさなければなりません:
- 実際のディレクトリはダイレクトアクセスから保護されなければなりません;
- URLがリクエストされたディレクトリを含むとき、Image/fileアクセスがスクリプトの実行によって起こる時にMediaWiki認証が実行されなければなりません。
基本的な実装が要求されます:
- 画像ディレクトリ($wgUploadDirectory)はファイルシステム上のウェブルートの外側に移動するかさもなければ保護します
- アップロードパス($wgUploadPath)はimg_auth.phpを指定しなければなりません
両方のメカニズムはウェブサーバのプラットフォームによります。この記事では2つのプラットフォームについて詳細なインストラクションを示します。
- Apache (多くのバージョン)
- Microsoft Internet Information Server (IIS)、バージョン6.0以降
すべてのインストラクションでは、MediaWikiが"/path/to"にインストールされていることを前提とします。
例です:
http://wiki.yourwiki.org/MyWiki
"/path/to"は"/MyWiki"
[edit] img_auth.phpはどのようにして動作しますか?
画像認証はURLを解釈することとリマインダー(PATH_INFO)ユーザが標準的なユーザIDと名前空間、割り当てた保護などに基づいてアクセスされるエリアにあるかどうかをチェックすることで動作します。アップロードパス($wgUploadPath)をセットアップしたとき、パスにスクリプトを含むために自動的にリダイレクトするディレクトリを指し示すために、スクリプトが実行されファイルがアクセスできるかどうかを蹴ってします。
何が本当に起きているのか示します。画像/ファイルへのポインタがhttp://wiki.yourwiki.org/MyWikiImg/01/01/Trash.txtにセットアップされている場合、これはMWによってhttp://wiki.yourwiki.org/MyWiki/img_auth.php/01/01/Trash.txtに変換され、PATH_INFOサーバ変数にそれに"/01/01/Trash.txt"を渡すimg_auth.phpをサーバが実際に実行します。
img_auth.phpはユーザが特定のファイルにアクセス権限を持つかチェックをして、そうであるなら、それを戻します。 そうではない場合、標準的な403エラーを表示します。
[edit] ファイルアップロードの設定
このコンフィギュレーションを試してみる前にファイルのアップロードの設定を理解しておくことはとても重要です。この記事を少し時間をかけて読んで理解をして頂くようお願いします - このことによって多くの時間を節約することが出来ます。
[edit] PHP PATH_INFOサポート
PHPセットアップがPATH_INFOをサポートすることが要求され(多くのCGIコンフィギュレーションはしません)$wgWhitelistReadモードもしくはその他にであることが必要です。もちろん、ポイントにはなりません。
[edit] Apacheインストラクション
大抵の管理者は単調直入にApache環境での実装ととても簡単な例を見つけます。
[edit] Apache ステップ 1. インターネットアクセスから画像ディレクトリを保護する
[/path/to]/imagesディレクトリで、次の一行を持つ.htaccessを作成します:
Deny from All
注: ディレクトリを移動しなかった場合、$wgUploadDirectoryを変更する必要はありません。
[edit] Apache ステップ 2. すべてのアクセスのためにimg_auth.phpスクリプトを実行する
[edit] Apache ステップ 2.1. LocalSettings.phpの$wgUploadPathを変更する
$wgUploadPath = "[/path/to]/img_auth.php";
[edit] Apache ステップ 2.2. img_auth.phpを実行するためのエイリアスを作成する
http.confファイルを編集して次の2つのエイリアスを追加します:
Alias [/path/to]/images/ [/path/to]/img_auth.php Alias [/path/to]/images [/path/to]/img_auth.php
[edit] Apache ステップ 2.3. Apacheサーバを再起動する
[edit] ApacheでPATH_INFO無しでmod_rewriteによるインストラクション
[edit] Apache ステップ 1. Download the cgi-supporting image authorization script
PATH_INFOが利用できない時はCGI-supporting image authorization scriptをダウンロードして下さい。mediawikiディレクトリにcgi_img_auth.phpという名前でスクリプトを保存して下さい。
[edit] Apache ステップ 2. インターネットアクセスからの画像ディレクトリの保護
[/path/to]/imagesディレクトリにおいて、次の1行を含む.htaccessを作成して下さい:
Deny from All
注: ディレクトリを移動させていない場合、$wgUploadDirectoryを変更する必要はありません
[edit] Apache ステップ 3. すべてのアクセスのためにcgi_img_auth.phpスクリプトを実行する
[edit] Apache ステップ 3.1. LocalSettings.phpで$wgUploadPathを変更する
$wgUploadPath = "[/path/to]/cgi_img_auth.php";
[edit] Apache ステップ 3.2. .htaccessを編集する
次のように.htaccessを編集します
RewriteEngine on RewriteRule ^/path/to/images(.*)$ /path/to/cgi_img_auth.php/$1 [R] RewriteRule ^path/to/cgi_img_auth.php/(.*)$ path/to/cgi_img_auth.php?path=/$1
[edit] IISインストラクション
IISでの実装はより複雑です。一般的にApacheもしくはUnixが固有に持っている'パイプ'機能が欠如しているからです。しかしながら、いくつかのトリックを使用することで、IISはCGIを実行を可能にして保護を達成することが出来ます。
警告: img_authの方法はWIMPプラットフォーム上(Windows、IIS、MySQL、PHP)でPHP ISAPIモードでのみ動作をします。標準的なWindowsインストレーションインストラクションに従う場合、wikiはCGI(php-cgi.exe)を使用することになり、ISAPIに変換しなければなりません。これをするためのインストラクションは議論のエリアにあります。PATH_INFOの解析におけるphp-cgiの方法では制限されたパスのいくつかのファイル上で"CGI Error: The specified CGI application misbehaved by not returning a complete set of HTTP headers"と表示されるバグがあります。これはPHP/IISの問題でMediaWikiの問題ではありません。
[edit] IIS ステップ 1. 匿名のインターネットアクセスから画像ディレクトリを保護する
IISにおいて、代替的なバーチャルディレクトリリダイレクトへのURLパスを使用することでユーザが画像もしくはファイルにアクセスできないようにすることは重要です。それ故、MediaWikiルート外部に新しいディレクトリが作成されなければなりません。
[edit] IIS ステップ 1.1 新しい物理ディレクトリを作成する
新しい物理ディレクトリを作成します。このディレクトリは他の既存のウェブディレクトリもしくはバーチャルウェブディレクトリの外側になければなりません:
例:
c:\inetpub\wwwroot\MyWikiImg
[edit] IIS ステップ 1.2 ディレクトリを確認/設定する
ディレクトリセキュリティはインターネットゲストアカウント(通常はIUSR_[server name])のために読み込み、書き込み、修正を出来なければなりません。心配をしないでください、次のステップで規制をします。
[edit] IIS ステップ 2. 画像ディレクトリへのすべてのアクセスのためにimg_auth.phpスクリプトを実行する
IISにおいて物理ディレクトリと同じ名前のバーチャルディレクトリを作成することでこれは行われます(ディレクトリがウェブルートから離れている場合)。
[edit] IIS ステップ 2.1 物理ディレクトリと同じ名前のバーチャルディレクトリを作成する
MediaWikiのために使用しているウェブサービスでStart->Administrative Tools->Internet Information Services (IIS) Managerを使用して新しいバーチャルディレクトリを作成して下さい。
web service->New Virtual Directory ...で右クリックをして下さい
ウィザードにおいて、物理ディレクトリと同じ名前の新しいバーチャルディレクトリを作成してそのディレクトリを指定して下さい。
[edit] IIS ステップ 2.2 新しいバーチャルディレクトリをimg_auth.phpにリダイレクトする
IIS Managerにおいて、新しいvirtual directory->Properties select the 'Virtual Directory'タブを右クリックして'The content for this resource should come from:'を'A redirection to a URL'に変更して下さい。MediaWikiで'Redirect To:'にimg_authへのURLを入力して下さい。
例:
http://wiki.yourwiki.org/MyWiki/img_auth.php
Applyをクリックすることを覚えておいて下さい!
[edit] IIS ステップ 3 古いディレクトリを新しいものにコピーする
古い画像ディレクトリ($ip/image)とサブディレクトリの内容を作成した新しいディレクトリにコピーして下さい。 注: 'image'ディレクトリは新しいディレクトリに存在しません。新しいディレクトリは次のようには表示されません:
間違い:
MyWikiImg
images
0
1
. . .
正解:
MyWikiImg 0 1 . . .
[edit] IIS ステップ 4 MediaWikiの画像処理をリダイレクトする
[edit] IIS ステップ 4.1 LocalSettings.phpで$wgUploadPathを変更する
$wgUploadPath = "[/path/to]/img_auth.php";
例:
$wgUploadPath = "/MyWiki/img_auth.php";
[edit] IIS ステップ 4.2 LocalSettings.phpで$wgUploadDirectoryを変更する
$wgUploadDirectory = "[PhysicalNewDirPath]";
例:
$wgUploadDirectory = "c:\inetpub\wwroot\MyWikiImg";
[edit] IIS ステップ 4.3 IISウェブサービスを再起動する
[edit] IIS ステップ 4.4 IIS PATH_INFOのトラブルシュート
インストレーションが動作しない場合、img_ath.phpがどのファイルにアクセスをするのか(例えば、バーチャルディれと利の後でURLにあるすべてのもの)を教えるためにPATH_INFOを返すことをサーバに要求をするからのようです。
IISのバージョンの中には'セキュリティの理由から'PATH_INFOとPATH_TRANSLATEのサーバ変数を許可しないものがあるといういくつかの記事とヒントがあります。現在のサーバとパッチレベル上にはこの問題がないので(IIS 6.0)IIS 4.0(とそれ以前)で有名な問題です。img_auth.phpが現在動作をしていることを調査をなさりたいでしょう。
CGIアプリケーションからPATH_INFOとPATH_TRANSLATEDを使用するの記事で完全な知識の記事が見ることが出来るでしょう。記事ではMS Visual Basicで書かれたプログラムを動作させる方法について説明がされています(CScriptを読み込む必要があるかもしれません)。

