Manual:ファイルのアップロードの設定

From mediawiki.org
This page is a translated version of the page Manual:Configuring file uploads and the translation is 96% complete.

MediaWikiはメディアファイルのアップロードと統合をサポートします。 このページではこの機能の技術的な面を説明します。一般的な使い方の情報については Manual:画像の管理 および Help:画像 を参照してください。

アップロード機能は MediaWiki バージョン 1.1 から実装されていますが、セキュリティを考慮し既定では無効になっています。 アップロードはコンフィギュレーション設定によって有効にすることが出来ますが、いくつかの前提条件を確認しておくことをお勧めします。

前提条件

アップロードがPHPで有効になっていることを確認する

以下の項目は php.ini で設定する必要があります:

file_uploads = On

設定されていない場合、PHPスクリプトはアップロード機能を使用できないのでMediaWikiのアップロード機能も有効になりません。

「open_basedir」が設定されている場合、MediaWiki インストレーションのディレクトリ({$IP}/images)と「upload_tmp_dir」フォルダ(設定していない場合は既定のシステムフォルダ)の両方を対象に指定する必要があります。 「upload_tmp_dir」を追加すると「Could not find file "/var/tmp/php31aWnF"」(「upload_tmp_dir」が「/var/tmp」である場合)のようなメッセージを避けることができます。 より詳しくはPHPのファイルアップロードについての文書ファイルアップロードの基本そして特にmove_uploaded_file()を参照してください。

この変数の正規値は論理演算子で記述します。 PHPはFalse値として認識されない各文字列をtrueとして扱います。したがって、よく使われる「on」値は同じ結果をもたらします。

Windows と IIS 利用者対策

%SystemRoot%\TEMP の設定により Internet Guest Account (IUSR_MachineName または IIS 7 以降はIUSR): を読み取り・書き込み・実行可能に設定。

ディレクトリのセキュリティを調査する

アップロードディレクトリの設定では、エンドユーザーによるwikiもしくはウェブサイトに損害を与える可能性のある外部スクリプトを実行不能にして (参照)、アップロードとウェブディレクトリへの不正なアクセスを予防する必要があります。

/images フォルダ (または以前のバージョンでは/uploadsフォルダ ) に「755」許可を設定。

  • ユーザーは読み取り、書き込み、実行ができるようにします。
  • グループは読み取り、実行ができるようにします。
  • ワールドは読み取り、実行ができるようにします。
許可の設定は必ずフォルダに限定します。実行パーミッションをファイル単位で設定してはいけません。 Linuxにおいて、あるフォルダー内のすべてのファイルから実行権限を削除し、フォルダーとすべてのサブフォルダーに実行権限を追加することです。 chmod -x+X uploads_folder -R

SELinux を使用する場合は、それに応じて ACL を調整するようにしてください(そちらを参照してください)。

  • イメージフォルダのディレクトリリストを制限する

パブリックユーザにイメージフォルダのリストを表示させたくない場合は、これをApache設定で設定することもできます:

        <Directory /var/www/wiki/images>
                Options -Indexes
        </Directory>

.htaccess ファイルの確認

MediaWikiのインストールフォルダにあるimagesディレクトリには、いくつかの設定がある.htaccessファイルが含まれています。 このファイルの目的は、アップロードフォルダをより安全にすることです。アップロードディレクトリを別の場所に置く場合は、.htaccessファイルを新しい場所にコピーするか、サーバー上でその設定を直接適用することをお勧めします。 ただし、これらの構成の中には、サーバーの構成によっては競合やエラーの原因となるものがあります。

いくつか注意点があります。

  • サーバーが.htaccessファイルのディレクティブを設定または上書きできない場合、そのフォルダーの下のファイルにアクセスすると、一般的な「HTTP 500エラー」が発生する可能性があります。 その場合は、行をコメントアウトし、それらのディレクティブをサーバー構成ファイルに直接適用する必要があります。 問題の原因となる可能性の高いディレクティブは、HTMLとPHPファイルがHTMLとして扱われるのを防ぐ AddType とPHPファイルがサーバー上で解析されて実行されないようにするphp_admin_flagです。

アップロードをon/offに設定する

MediaWiki バージョン:
1.5

MediaWiki バージョン 1.5以降は、設定する属性は LocalSettings.php に存在し、その $wgEnableUploads の内容は以下の通りです:

$wgEnableUploads = true; # アップロードを有効にする

アップロード機能を無効にするためにはこの属性をfalseに設定します:

$wgEnableUploads = false; # アップロードを無効にする

集中リポジトリを使う

InstantCommonsは設定変更が可能な機能で、ウィキメディアコモンズの何百万という無料の(自由にライセンスされた)ファイルにすぐにアクセスできます。

アップロードの権限

既定では、登録されているすべての利用者がファイルをアップロードできます。 これを制限するには $wgGroupPermissions を変更してください:

  • 一般利用者にはファイル アップロードを許可しない:
    $wgGroupPermissions['user']['upload'] = false;
  • 「uploadaccess」という名前の特殊グループを作成し、所属するメンバーにファイル アップロードを許可する:
    $wgGroupPermissions['uploadaccess']['upload'] = true;
  • 自動承認された利用者 (新規ではない利用者) にファイル アップロードを許可する:
    $wgGroupPermissions['autoconfirmed']['upload'] = true;

既存ファイルを置き換える権限は、reuploadと呼ばれる追加の許可で制御されています。

  • 一般利用者に既存ファイルの上書きを許可しない:
    $wgGroupPermissions['user']['reupload'] = false;
  • 自動承認された利用者 (新規ではない利用者) にファイル更新を許可する:
    $wgGroupPermissions['autoconfirmed']['reupload'] = true;

ForeignFileRepoが設定されている場合、ローカルにあるファイルを置き換える権限は reupload-shared と呼ばれる特別な権限で制御されています。

  • ローカルにあるファイル リポジトリのファイルの上書きを一般利用者に許可しない:
    $wgGroupPermissions['user']['reupload-shared'] = false;
  • 自動承認された利用者 (新規ではない利用者) に対しローカルのファイル リポジトリにあるファイルの置換を許可する:
    $wgGroupPermissions['autoconfirmed']['reupload-shared'] = true;

ユーザ権限について詳しくはManual:User rightsを、アクセス制限について詳しくはManual:Preventing accessをご覧ください。

ファイルタイプの設定

LocalSettings.php $wgFileExtensions を追加することにより、その他のご希望の種類のファイルをアップロードできるようになります。 例えば、$wgFileExtensions の行を以下のように変更することができます。

$wgFileExtensions = array( 'png', 'gif', 'jpg', 'jpeg', 'doc',
    'xls', 'mpp', 'pdf', 'ppt', 'tiff', 'bmp', 'docx', 'xlsx',
    'pptx', 'ps', 'odt', 'ods', 'odp', 'odg'
);

もしくは

$wgFileExtensions = array_merge( $wgFileExtensions,
    array( 'doc', 'xls', 'mpp', 'pdf', 'ppt', 'xlsx', 'jpg', 
        'tiff', 'odt', 'odg', 'ods', 'odp'
    )
);

もしくは

# DefaultSettings.php で定義されている既存のアップロード許可ファイル種別リストに、新たなファイル種を追加してください。
$wgFileExtensions[] = 'docx';
$wgFileExtensions[] = 'xls';
$wgFileExtensions[] = 'pdf';
$wgFileExtensions[] = 'mpp';
$wgFileExtensions[] = 'odt';
$wgFileExtensions[] = 'ods';

ブラックリストに掲載されているファイルタイプの制限があります。 ブラックリストの拡張子を持つファイルをアップロードするには、ブラックリストを変更する必要があります。 たとえば、利用者が実行可能ファイルをアップロードできるようにするには:

$wgFileExtensions[] = 'exe';
$wgFileBlacklist = array_diff( $wgFileBlacklist, array ('exe') );

加えて、$wgMimeTypeBlacklist MIME type に基づいて特定のファイルタイプを防止します; 例えば .zip ファイルは MIME type (MediaWiki version 1.14 から 1.17 まで) に基づいて禁じられます。

$wgStrictFileExtensions を設定することもできます

$wgStrictFileExtensions = false;

ほとんどの種類のファイルをアップロードできるようにします。ただし、ブラックリストに載っているファイルタイプとMIMEタイプは引き続き許可されません。

警告 警告: $wgStrictFileExtensionsをfalseに設定するか、$wgFileBlacklistを変更すると、セキュリティリスクにさらされる可能性があります。

「ファイルが壊れているか、拡張子が間違っています」というエラーが表示された場合は、mime type detectionが正しく動作していることを確認してください。

どんな種類のファイルでも許可することにした場合、MIME検出が機能していることを確認し、アップロードのためのウイルススキャンを有効にする について考えてみてください。

拡張子zipを有効にするには、LocalSettings.phpファイルに次の記述が必要です (MediaWiki v1.19.23 でテスト済み)。

$wgFileExtensions[] = 'zip';
// $wgTrustedMediaFormats[] = 'ARCHIVE';
$wgTrustedMediaFormats[] = 'application/zip';

ログイン

標準では、anonymousによるアップロードは許可されていません。 ツールボックスに「ファイルのアップロード」リンクが表示される前に、登録とログインが必要です。

サムネイル

自動的な画像処理/サムネイル化の情報は、Image thumbnailing (画像サムネイル) を参照してください。 サムネイルに関する問題については、画像のサムネイルが機能しない、または表示されないを参照してください。

MediaWiki バージョン:
1.11

ファイルが画像やビデオのように視覚的でない場合、代わりにファイルアイコンが使用されます。 FileRepoグループのFileクラスのiconThumb()関数で生成されます。 "$wgStyleDirectory/common/images/icons/"に格納されているアイコンを "fileicon-$extension.png"フォーマットで表示します。

ファイルのアップロードのための最大サイズを設定する

ブラウザは、実際にファイルを送信する前に、アップロードするファイルのサイズをサーバーに知らせます。

アップロードのサイズが大きすぎる場合、ターゲット(サーバー)に拒否され、どの層で制限がかかったかによって複数のエラーを出してアップロードが失敗します。

  • サーバー(nginx, Apache)が送信データの最大量を制限している場合、単純にHTTP 500エラーまたはHTTP 413 - Request entity too largeで失敗する可能性があります。
  • PHPレベルでの制限の場合、post_max_sizeがヒットした場合、一般的なHTTP 500エラー(もしくは単に空白ページ)を得るかもしれません、そうでなければ、MediaWikiはより意味のあるエラーメッセージを与えるはずです。
php.iniのpost_max_sizeとupload_max_filesize

既定では、php.ini の設定は、アップロードされるファイルのサイズを2メガバイト(およびポスト操作の最大サイズは8メガバイト)に制限します。 さらに大きなファイルをアップロードできるようにしたい場合、php.ini 内でこれらのパラメーターを編集してください:

これはサーバにアクセスするroot権限が必要です - 共有サーバ上にある場合、サーバの管理者に連絡をして下さい。

最大アップロードファイルサイズを100MBより大きな値に変更する場合は、LocalSettings.php に新しいアップロードファイルサイズの値と共に$wgMaxUploadSize を追加する必要があります。
php.iniファイルの場所を確認する

php.ini ファイルの保存先はご利用の配布により異なります。 サーバーで使用されているphp.iniを探す方法はManual:php.ini を参照してください。

1つのサーバーで複数のウェブサイトをホストする

If you have more than one website hosted on a server and want to change only for MediaWiki, insert into your /etc/apache2/sites-enabled/your_wiki_site.com inside <Virtual Host>:

php_value upload_max_filesize 100M
php_value post_max_size 100M

上記の設定は、mod_phpを使用しているサイトであれば、.htaccess ファイルでも有効です。 もしPHP 5.3 以降をご利用で利用可能に設定するには、php.ini ディレクティブを .user.ini ファイル内に配置します。

Webサーバの制限

ご利用のWebサーバによっては、アップロードできるファイルのサイズにさらに制限条件が付加されます。 Apache では LimitRequestBody もそのような設定の一つです。 [1] Nginx 向けはclient_max_body_size が該当の設定です[2] Lighttpd では場合により server.max-request-size の調整が必要[3]

php.ini もしくはWebサーバ設定を編集後、Apache または IIS の再起動が必要な場合があります。

Ubuntu 16.04: sudo service apache2 restart

PHP (Ngingx サーバも対象?) 設定を変更後にも、php5-fpmの再起動が必要な場合があります。

(たとえば Linux の sudo /etc/init.d/php5-fpm リスタート。)

画像ファイルが重すぎるときの警告

MediaWiki は $wgUploadSizeWarning オプションよりも大きなファイルをアップロードしようとすると警告を発します。 これはPHPによる制限とは独立しています。

一時的なアップロード制限

アップロード制限を一時的に変更するには (特定のファームウェアで複数のウィキを走らせる場合など)、次の行を追加します。

ini_set( 'post_max_size', '50M' );
ini_set( 'upload_max_filesize', '50M' );

追加はウィキ単位で、場所は MediaWiki LocalSettings.php 設定ファイルです。 このサンプルの PHP 上限は 50 Mb 。 これらの設定は、上で設定した最大値を上書きしないことに注意しましょう (コア php.ini および apache2 php.ini ファイルは絶対的な最大値を設定するからです)。 このメソッドは、絶対最大値よりも小さい最大値を設定する。

IIS7 アップロード上限
デフォルトでは、Windows 2008 の 'IIS7 <ref>IIS7 は、Windows Vista と次の Windows Server バージョンに含まれる インターネット情報サービス の新しいリビジョン (バージョン 7.0) です。</ ref> Windows 2008では、Webアプリケーションを介してアップロードできるのは30MBのみです。 大きなファイルは、アップロード後に404エラーが返されます。 この問題が発生した場合、web.configファイルの‎<system.webServer>に以下のコードを追加することで、最大ファイルサイズを大きくすることで解決できます。
<security>
  <requestFiltering>
    <requestLimits maxAllowedContentLength="50000000" />
  </requestFiltering>
</security>

上記のmaxAllowedContentLengthでは、ユーザーは50,000,000バイト(50MB)の大きさのファイルをアップロードすることができます。 この設定は、IISのサービスを再起動することなく、すぐに動作します。 web.config ファイルは、Web サイトのルートディレクトリにあります。

アップロードできるファイルの上限を2ギガにする:

以下を LocalSettings.php に追加:

$wgUploadSizeWarning = 2147483647;
$wgMaxUploadSize = 2147483647;

php.ini で以下の行を調整

memory_limit = 2048M (this line may not be necessary)
post_max_size = 2048M
upload_max_filesize = 2048M

IIS web.config file で maxRequestLength 設定値を上書きします。 例えば、web.configの以下の項目は、2GB以下のファイルをアップロードすることを許可しています。

<httpRuntime maxRequestLength="2097151" executionTimeout="18000"/>

IIS 7では、大容量のアップロードを許可する設定も必要です。 これは、ウィンドウ中央のIISセクションにある「要求フィルタリング > 機能設定の編集」をクリックすることで確認できます。 Set the ”Maximum allowed content length (Bytes)” field to 2147482624. If you don’t see "Request Filtering" in the IIS section, it needs enabled via Internet Information Services > World Wide Web Services > Security in the "Turn Windows features on or off" area in Control Panel.

上記の方法で大容量アップロードができない場合は、コマンドプロンプトを開いて、以下のコマンドも実行してください。

%windir%\system32\inetsrv\appcmd set config -section:requestFiltering -requestLimits.maxAllowedContentLength: 2147482624

Java JAR のアップロードの許可

MediaWiki は既定ですべての ZIP 形式に見えるファイルをスキャンし、Java .class を検出するとファイルを拒否します。 セキュリティ上、悪意のある Java applet のアップロードの予防策として実施されています。 非公開サイト限定で、以下を使いこの検知を無効にします。

$wgAllowJavaUploads = true;

これを利用し、制限を迂回して mimetypes を無差別にアップロードさせることができます。 たとえば Word 2007 で作成した .doc ファイルをアップロードしたい場合、テキスト リストを添付しても、また mimetype 検知の許可と拒否に無関係に、以下のメッセージが表示される場合があります。

このファイルは破損しているか、さもなければ読めないZIPファイルです。セキュリティチェックを適切に行うことができません

Word 2007 で保存した拡張子.doc のファイル (おそらくそれ以降のバージョンでも) には小さな ZIP 形式の圧縮が含まれ、2007以前のワードと異なりバイナリの .doc 形式で表現可能できない metadata が書き込まれています。 この埋め込み ZIP データが引っかかり、Java archive 検査器は .doc ファイルを拒否します。 それより新しい .docx 形式のファイルは ZIP 圧縮に問題がまったくないため、アップロードは正常に行われ $wgAllowJavaUploads の設定は不要です。

URLより直接アップロード("Sideloading")

コンピューター内のファイルの代わりに URL を指定する直接アップロードを利用者に対し許可する場合、$wgAllowCopyUploads = true を設定してください。

既定では URL からの直接アップロードは API (または UploadWizard などの拡張機能) の使用が条件です。 「特別:アップロード」でこのオプションを有効にするには、 $wgCopyUploadsFromSpecialUpload を true に変えることも忘れないでください。 するとアップロード用フォームのファイル名記入欄の下に、URL記入欄が追加されます。 このURL欄は既定では記入できなうようにグレー表示ですが、欄の横のボタン (チェックボックス) で有効と無効を切り替えます。

ただしこの機能の利用は、利用者権限 upload_by_urlのある場合に限定されます。 システム管理者は、MediaWiki 1.20 以前とは異なり、既定ではなく個別に権限を申請することになりました。 通常のユーザ向けに許可する方法。

 $wgGroupPermissions['user']['upload_by_url'] = true;

ウェブ上の任意の場所から直接アップロードできるようにすると、ランダムで不要なものをアップロードしやすくなり、人々がウェブ上で遭遇する可能性のあるものなら何でもアップロードしてよいというように誤解される可能性があることを心に留めておいてください。

この機能をサポートするためには、PHPのcURLサポートが有効になっている必要があります。 インストール時に--with-curlオプションでPHPを設定します。
If your server is accessing internet through a proxy then $wgHTTPProxy needs to be set accordingly. 直接提供するか、あるいは、サーバーが phpinfo() で環境変数 "http_proxy" を提供している場合は、LocalSettings.php で以下のコードを使用することができます。
/*
 * Proxy to use for CURL requests.
 */
if ( isset( $_ENV['http_proxy'] )) $wgHTTPProxy = $_ENV['http_proxy'];

まとめてアップロード

複数のファイルをアップロードするには、個別ではなくまとめて処理するツールがいくつかあります。

拡張機能 説明 リリースの状態 要件
Extension:UploadWizard ウィキメディア・コモンズで使用されています 安定版 MediaWiki 1.23+
Extension:MsUpload Allows a user to upload multiple files including by dragging & dropping files. 安定版 1.17, 1.18, 1.19, 1.20, 1.21, 1.22
Extension:SimpleBatchUpload Basic, no-frills uploading of multiple files to MediaWiki 安定版 1.26+
Commonist (external link to Wikimedia Commons) api.php 経由でのファイル アップロードに必要です。
importImages.php "Place the files on the server in a readable location and execute the maintenance/importImages.php script from the command line."[4]

アップロード ディレクトリ

画像を1件アップロードすると、いくつか生成されるものがあります。

  1. ファイル名前空間の記事。記事のタイトルにはファイル名、たとえば File:MyPicture.png を使用。 このページが保存されると、通常のページ同様に編集できます。
  2. ファイル自体はファイルシステムの$wgUploadDirectory で設定されたフォルダもしくはそのサブフォルダに保存されます (以下を参照してください。)
  3. サムネイル化が用意できる場合は、ファイルのサムネイル版画像を作成して提供します (ファイル説明ページで使用する場合など。 それぞれのサムネイルはメインの画像ファイル名にしたがって、個別のフォルダに入れてサムネイルディレクトリに保存します。

If $wgHashedUploadDirectory is enabled (by default), MediaWiki creates several subdirectories in the images directory.

If $wgHashedUploadDirectory is set to true, uploaded files will be distributed into sub-directories of $wgUploadDirectory based on the first two characters of the md5 hash of the filename. (e.g. $IP/images/a/ab/foo.jpg) このようなサブディレクトリの作成は、自動的に行われます。 ファイルシステムによっては、1つのフォルダに大量のファイルがあるとうまく動作しないことがあるため、これを利用して1つのフォルダに大量のファイルが存在しないようにします。

もし、アップロードされる画像が少なく、小さなWikiしか管理していないのであれば、$wgHashedUploadDirectory = falseを設定することでこれをオフにし、すべての画像は$wgUploadDirectory自体にアップロードされるようにすることができます。(例: $IP/images/foo.jpg)

Multiwiki サイト

  • LocalSettings.phpのサイトの場所を、例えば/var/lib/mediawikiからあなたのインストールした場所に変更し、書き込み可能な画像ディレクトリを作成したことを確認してください(残りのほとんどはシンボリックリンクで可能です)。

そうしないと、画像のアップロードが不思議とうまくいきません。

アップロード用フォームの設定

インストールに含まれる既定のアップロード用フォームはメッセージを (「ファイルをアップロード」リンクやSpecial:Uploadリンクを押した時に) 表示しますが、必ずしもご利用のウィキに適しているとは限りません。

その場合にはMediaWiki:Uploadtextの内容を編集し、メッセージを書き換えます。 ご利用のウィキが多言語版の場合は、MediaWiki:Uploadtext/deなどを編集して地域化するのをお忘れなく。

MediaWiki:Licenses ページにあるドロップダウンメニューで、 ご利用のウィキのアップロードのライセンスを個別化します。 See the documentation of this feature.

ただしMediaWiki:Licenses/deなど地域化したバージョンは既定では表示されません。 有効にするには、$wgForceUIMsgAsContentMsg 変数を設定します。

アップロードフォームの「要約欄」に表示する既定のメッセージは、MediaWiki:Upload-default-descriptionを編集して追加します(例えばご利用のウィキサイトでアップロード要約欄に既定のテンプレートを設定して全員に使用させたい場合など。)

Windowsにおける既知の問題

Windows サーバ上で MediaWiki を走らせると 、PHP バグが原因でファイル名にいくつか制限があります。 PHP は非ASCII文字を使ったファイル名を正しく処理できないため(訳注:後出)、MediaWiki ではアップロード失敗の予防策としてファイル名にそれら文字を使ったファイルに対し、このウィキではファイル名に特殊文字を使用できません。 を表示して受付を拒否する (タスク T3780) ことがあります。

MediaWiki 1.31 以降で PHP 7.1 以降を使う場合、MediaWiki で非ASCII文字が処理できるようになりました。

英字・数字以外の文字を使用したデータベースにおける既知の問題

もし $wgDBname に 英字・数字以外の文字が含まれている場合、以下のようなエラーが発生する場合があります: Could not create directory "mwstore://local-backend/local-public/<path>".. ファイル バックエンドの有効なコンテナ名を内部チェックが原因ですが、構成に $wgDBname を使用しています。

MediaWiki 1.26 より、$wgDBname にドットが含まれている場合でのアップロードが可能となりました。

関連項目

脚注