「インストール - MediaWiki(Raspberry Pi)」の版間の差分

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動
 
(2人の利用者による、間の14版が非表示)
1行目: 1行目:
== 概要 ==
== 概要 ==
別ページに記載している[[PHP7.3をインストールする方法(Rspberry Pi)|PHP 7.3]]とApache2と[[MariaDBのインストール方法(Raspberry Pi)|MariaDB 10]]がインストールされていることを確認する。<br>
MediaWikiは、PHPで記述されたオープンソースのウィキソフトウェアであり、<br>
協調的なコンテンツ作成や知識共有のプラットフォームとして広く使用されている。<br>
<br>
GPLライセンスの下で配布されている。<br>
<br>
MediaWikiの特徴を以下に示す。<br>
* 用途
*: 主にWebサイトやオンライン百科事典の作成・運営に使用される。
* 有名な例
*: Wikipediaが最も有名なMediaWikiの使用例である。
* 機能
** ページの作成・編集
** バージョン管理
** ユーザ管理
** 検索機能
** カテゴリ分類
* 拡張性
*: プラグインやスキンを通じてカスタマイズが可能である。
* 言語サポート
*: 多言語対応しており、様々な言語でコンテンツを作成できる。
* データベース
*: MySQL、PostgreSQL、SQLite等のデータベースと連携することができる。
<br><br>
 
== 必要なシステムおよびライブラリのインストール ==
MediaWikiの動作に必要となるパッケージ (Apache2、データベース、PHP) をインストールする。<br>
sudo apt-get install apache2 mariadb-server php php-mysql libapache2-mod-php php-xml php-mbstring
<br>
MediaWikiの拡張機能を全て有効化する場合は、以下に示すライブラリをインストールする。<br>
sudo apt-get install php-apcu php-intlphp-gd php-cli php-curl imagemagick inkscape
<br>
Apache2を再起動する。<br>
sudo systemctl restart apache2
<br>
上記のパッケージのインストールについて詳細を知りたい場合は、[[インストール - PHP|PHP]]、[[インストール - Apache2(Raspberry Pi)|Apache2]][[インストール - MariaDB(Raspberry Pi)|MariaDB]]を参照すること。<br>
<br><br>
<br><br>


== MediaWikiをインストールする前に ==
== MediaWikiのダウンロード ==
===== MediaWikiのダウンロード =====
[https://releases.wikimedia.org/mediawiki/ MediaWikiの公式Webサイト]にアクセスして、MediaWikiをダウンロードする。<br>
MediaWikiを[https://releases.wikimedia.org/mediawiki/ ここ]でダウンロードして解凍する。<br>
ダウンロードしたファイルを解凍する。<br>
(ここでは、2019/06/25現在の最新のMediaWikiをダウンロードする)
  tar xf mediawiki-<バージョン>.tar.gz
  wget https://releases.wikimedia.org/mediawiki/1.32/mediawiki-1.32.1.tar.gz
  mv mediawiki-<バージョン> mediawiki
  tar -zxvf mediawiki-1.32.1.tar.gz
<br>
Apacheのドキュメントルート (デフォルト: /var/www/htmlディレクトリ) に解凍したMediaWikiディレクトリを移動する。<br>
sudo mv mediawiki <ドキュメントルート>
例:
sudo mv mediawiki /var/www/html
<br>
<br>
Apacheのドキュメントルート(ここでは、/var/www/htmlとする)に解凍したMediaWikiディレクトリをコピーする。<br>
sudo cp -a ~/mediawiki /var/www/html
MediaWikiディレクトリの権限と所有者、所有グループを変更する。<br>
MediaWikiディレクトリの権限と所有者、所有グループを変更する。<br>
  cd /var/www/html
  cd /var/www/html
  sudo chmod 755 mediawiki && sudo chown Raspbianのユーザ名:Raspbianのグループ名 mochiuwiki
  sudo chmod 755 mediawiki
sudo chown <Raspberry Piのユーザ名>:<Raspberry Piのグループ名> mediawiki
<br><br>
 
== PHPの設定 ==
==== APCuモジュールを使用する場合 ====
APCuモジュールを使用する場合は、APCuモジュールをソースコードからインストールする必要がある。<br>
<br>
まず、[https://github.com/krakjoe/apcu APcuモジュールのGithub]にアクセスして、ソースコードをダウンロードする。<br>
ダウンロードしたファイルを解凍する。<br>
tar xf apcu-<バージョン>.tar.gz
cd apcu-<バージョン>
<br>
次に、APCuモジュールをビルドおよびインストールする。<br>
<u>モジュールのインストールディレクトリは、/usr/lib64/extensionsディレクトリ、または、/<PHPのインストールディレクトリ>/lib64/extensions/no-debug-zts-xxxxxxxxディレクトリとなる。</u><br>
<u>ヘッダファイルのインストールディレクトリは、/usr/include/phpディレクトリ、または、/<PHPのインストールディレクトリ>/include/phpディレクトリとなる。</u><br>
phpize
./configure --enable-apcu
make -j $(nproc)
make install
<br>
最後に、APCuモジュールの使用を許可するため、PHPの設定ファイルに以下に示す設定を記述する。<br>
<syntaxhighlight lang="ini">
# php.iniファイル
extension = "/PHPのインストールディレクトリ>/lib64/extensions/no-debug-zts-20220829/apcu.so"
apc.enabled = 1
apc.shm_size = "2048M"
apc.mmap_file_mask = "/tmp/apc.XXXXXX"
</syntaxhighlight>
<br>
==== PHP-FPMを使用する場合 ====
PHP-FPMを使用する場合は、/etc/php-fpm.d/www.confディレクトリ、または、/<PHPのインストールディレクトリ>/etc/php-fpm.d/www.confファイルにおいて、<br>
メモリエラー回避のために使用できるメモリサイズを変更する必要がある。<br>
<syntaxhighlight lang="ini">
# /etc/php-fpm.d/www.confディレクトリ
# または
# /<PHPのインストールディレクトリ>/etc/php-fpm.d/www.confファイル
# 編集前
;php_admin_value[memory_limit] = 32M
# 編集後
# 128[MB]以上の値に変更する。
php_admin_value[memory_limit] = 128M
</syntaxhighlight>
<br>
<br>
設定を反映させるため、NginXおよびPHP-FPMを再起動する。<br>
sudo systemctl restart nginx php-fpm
<br><br>


===== Apache 2.xの設定 =====
== Apache2の設定 ==
特になし。<br>
仮想ホストを使用する場合は、[[インストール - Apache2(SUSE)#仮想ホストの構築 (パッケージ管理システムからApache2をインストールした場合)]]のページを参照すること。<br>
<br>
<br><br>


===== MariaDBの設定 =====
== MariaDBの設定 ==
MySQLサーバのインストール中に、rootアカウントのパスワードの入力を求められるが、<br>
MariaDBサーバのインストール中に、rootアカウントのパスワードの入力を求められる。<br>
もし、rootのパスワードが未設定の場合は、以下のコマンドを実行する。<br>
もし、rootのパスワードが未設定の場合は、以下のコマンドを実行する。<br>
  sudo mysqladmin -u root password パスワード
  sudo mysqladmin -u root password <パスワード>
<br>
<br>
MediaWikiで使用するデータベースを作成する。(ここでは、wikiというデータベースを作成する)<br>
MediaWikiで使用するデータベースを作成する。<br>
  sudo mysql -u root -p
  sudo mysql -u root -p
  Enter password:
  Enter password:
  mysql> CREATE DATABASE wiki;
  mysql> CREATE DATABASE <データベース名>;
<br>
<br>
USEコマンドを使用して、このシェルセッションの今後の操作でそのデータベースを使用するようシェルに指示する。<br>
<code>USE</code>コマンドを使用して、このシェルセッションの今後の操作でそのデータベースを使用するようシェルに指示する。<br>
   mysql> USE wiki;
   mysql> USE <データベース名>;
<br>
<br>
データベースユーザを作成して、パスワードを設定する。<br>
データベースユーザを作成して、パスワードを設定する。<br>
このユーザは、localhostからデータベースに接続できる。<br>
このユーザは、localhostからデータベースに接続できる。<br>
ここでは、ユーザ名をwiki、パスワードをpasswordとしている。<br>
'''※シングルクォーテーションも必須'''<br>
mysql> CREATE USER 'wiki'@'localhost' IDENTIFIED BY 'password';
<br>
<br>
新しいデータベースユーザには権限が無いため、GRANTコマンドを使用して幾つかのアクセス権を付与する必要がある。<br>
<u>※注意</u><br>
ここでは、ALLを使用しているが、実際のアプリケーションでは、より多くの制限された権限をユーザに付与する方が良い。<br>
<u>シングルクォーテーションも必須であることに注意する。</u><br>
  mysql> GRANT ALL PRIVILEGES ON wiki.* TO 'wiki'@'localhost';  
mysql> CREATE USER '<データベースユーザ名>'@'localhost' IDENTIFIED BY '<パスワード>';
<br>
新しく作成したデータベースユーザには権限が無いため、<code>GRANT</code>コマンドを使用して幾つかのアクセス権を付与する必要がある。<br>
ここでは、<code>ALL</code>オプションを使用しているが、実際には、より多くの制限された権限をユーザに付与する方が良い。<br>
  mysql> GRANT ALL PRIVILEGES ON <データベース名>.* TO '<データベースユーザ名>'@'localhost';  
  mysql> FLUSH PRIVILEGES;
  mysql> FLUSH PRIVILEGES;
  mysql> quit
  mysql> quit
49行目: 138行目:
== MediaWikiのインストール ==
== MediaWikiのインストール ==
上記の設定が全て完了しているとき、MediaWikiをインストールすることができる。<br>
上記の設定が全て完了しているとき、MediaWikiをインストールすることができる。<br>
インストール方法を以下に記載する。<br>
<br>
<br>
1. WebブラウザでMediaWikiを配置したURL:http://localhost/mediawiki//mw-config を入力する。<br>
# WebブラウザでMediaWikiを配置したURL:http://<ホスト名またはIPアドレス>/mediawiki/mw-config を入力する。
2. MediaWikiのメイン画面が表示されるので、[set up the wiki]を押下する。<br>
# MediaWikiのメイン画面が表示されるので、[set up the wiki]を押下する。<br>mbstringやXML等のPHP拡張機能がインストールされているにも関わらず、<br>それらの拡張機能がインストールされていない表示される場合は、以下のコマンドを実行して、手動で有効化する。
3. 言語設定を日本語にして[続行]を押下する。<br>
#: <code>sudo phpenmod mbstring</code>
4. [環境の確認]画面で、規約を確認して[続行]を押下する。<br>
#: <code>sudo phpenmod xml</code>
  また、データベースのホストの情報は、localhostではなく127.0.0.1のようにIPアドレスで入力する。<br>
#: <code>sudo systemctl restart apache2</code>
  データベース名とデータベースのユーザ名は上記で設定したものを入力する。<br>
# 言語設定を日本語にして[続行]を押下する。
  [続行]を押下する。<br>
# [環境の確認]画面で、規約を確認して[続行]ボタンを押下する。<br>また、データベースのホストの情報は、localhostではなく127.0.0.1のようにIPアドレスで入力する。<br>データベース名とデータベースのユーザ名は、上記セクションで設定したものを入力する。<br>最下部の[続行]ボタンを押下する。
5. [データベースの設定]画面では、データベースの文字セットをUTF-8にして、[続行]を押下する。<br>
# [データベースの設定]画面では、データベースの文字セットをUTF-8にして、[続行]ボタンを押下する。
6. [MediaWikiの名前]画面では、任意の名前を付ける。<br>
# [MediaWikiの名前]画面では、任意の名前を付ける。
7. [管理アカウント]画面では、MediaWikiのWebサイトにログインできるユーザ名とパスワードを入力する。<br>
# [管理アカウント]画面では、MediaWikiのWebサイトにログインできるユーザ名とパスワードを入力する。
8. [インストール]画面では、[続行]を押下する。<br>
# [インストール]画面では、[続行]ボタンを押下する。
9. [インストール完了]画面では、LocalSettings.phpをダウンロードして、/var/www/html/mediawikiディレクトリ直下に配置する。<br>
# [インストール完了]画面では、LocalSettings.phpをダウンロードして、/var/www/html/mediawikiディレクトリ直下に配置する。
<br><br>
<br><br>
== MediaWikiの設定 ==
==== アップロード設定 ====
ファイルのアップロードはMediaWikiのオプション機能であり、デフォルトでは無効になっている。<br>
有効にする場合、Webサーバのユーザによって書き込み可能なディレクトリをWebルートに提供する必要がある。<br>
<br>
これはセキュリティのためにいくつかの意味を持つ。<br>
* このディレクトリは、書き込み可能でなければならない。<br>また、Webサーバの限定されたユーザアカウントが所有しなければならないかもしれない。<br>しかし、マルチユーザシステムでは、他のローカルユーザがアップロードディレクトリに悪意のあるファイルを紛れ込ませることが可能かもしれない。<br>可能な限り、Webサーバのアカウントのみが書き込み可能なディレクトリにする必要がある。
* PHPの設定は、個々のアップロードに対してファイルサイズの制限を設定するが、MediaWikiは総アップロードに対していかなる制限も設定していない。<br>悪意のある訪問者は多くのファイルをアップロードすることでディスクパーティションを一杯にすることができてしまう。
* 生成されたサムネイルと上書き確認のためにアップロードされたファイルはMediaWikiのWebインターフェイスに表示されることなくimages/thumbディレクトリとimages/tmpディレクトリに保持される。<br>そのため、それらのサイズにも注意する必要がある。
<br>
デフォルトの設定では、安全のためにアップロードできるファイルの種類を制限しようとしている。<br>
* デフォルトでは、ファイル拡張子.png、.gif、.jpg、.jpeg、.webpはホワイトリスト($wgFileExtensions)である。
* ユーザがホワイトリスト($wgStrictFileExtensions)を上書きすることを許可する場合でも、様々な実行可能な拡張子とスクリプト拡張子は明示的にブラックリスト($wgFileBlacklist)に登録される。
* いくつかの既知の画像ファイル拡張子は、PHPのgetimagesize()関数を使用してそのタイプを検証する。
* アップロードされたファイルは、Webブラウザのファイルタイプ検出バグに引っかかり、HTMLとして表示されないかチェックされる。
<br>
予防措置として、アップロードディレクトリ(デフォルトではimagesディレクトリ)にあるPHPスクリプト(およびその他のスクリプトタイプ)のサーバサイドでの実行を明示的に無効にする必要がある。<br>
また、<code>X-Content-Type-Options: nosniff</code>ヘッダを設定することにより、ファイルをスニッフしないようにブラウザに指示する必要がある。<br>
<br>
例えば、MediaWikiのインスタンスが/var/www/html/MediaWikiにある場合、これを行うhttpd.confファイルは、以下に示すような設定になる。<br>
<syntaxhighlight lang="apache">
# httpd.confファイル
<Directory "/var/www/html/MediaWiki/images">
    # Ignore .htaccess files
    AllowOverride None
    # Serve HTML as plaintext, don't execute SHTML
    AddType text/plain .html .htm .shtml .phtml
    # Don't run arbitrary PHP code.
    php_admin_flag engine off
    # Tell browsers to not sniff files
    Header set X-Content-Type-Options nosniff
    # If you've other scripting languages, disable them too.
</Directory>
</syntaxhighlight>
<br>
Apache2の設定ファイル(httpd.confファイル)にアクセスできない場合、かつ、.htaccessファイルを作成して特定のディレクトリの設定を上書きできる場合、<br>
アップロードディレクトリ直下に以下に示すような.htaccessファイルを作成することができる。<br>
<syntaxhighlight lang="apache">
# アップロードディレクトリ直下の.htaccessファイル
# Serve HTML as plaintext, don't execute SHTML
AddType text/plain .html .htm .shtml .phtml .php .php3 .php4 .php5 .php7 .php8
# Old way of registering php with AddHandler
RemoveHandler .php
# Recent way of registering php with SetHandler
<FilesMatch "\.ph(p[3457]?s?|tml)$">
  SetHandler None
</FilesMatch>
# If you've other scripting languages, disable them too.
</syntaxhighlight>
<br>
PHP設定ファイルのopen_basedirオプションの使用は、アップロードの処理を複雑にするかもしれない。<br>
<br>
上記の解決方法のいずれかを使用している場合、以下に示すような簡単なテストで正常に動作しているかどうかを確認できる。<br>
# アップロードディレクトリにtest.phpファイルを作成する。
# test.phpファイルに、<?php phpinfo();を記述する。
# WebブラウザのURL入力欄から、ファイルのパスを入力する。
# ファイルのテキストが表示されれば問題無いが、そうでない場合はどこかが間違っている。
<br><br>
== エラー ==
==== ログイン ====
MediaWikiにログインする時、以下のエラーが出力されてログインできない場合がる。<br>
これは、セッションとクッキーをAPCuでキャッシュする関係でエラーが出力される。<br>
ログインのセッションに問題が発生しました。 セッション乗っ取りを防ぐため、操作を取り消しました。
前のページへ戻って再度読み込んだ後に、もう一度試してください。
<br>
上記のエラーを修正するには、LocalSettings.phpファイルを以下のように編集する。<br>
# 修正前
$wgMainCacheType = CACHE_ACCEL;
# 修正後
$wgMainCacheType = CACHE_ANYTHING;
<br><br>
__FORCETOC__
__FORCETOC__
[[カテゴリ:Raspberry_Pi]]
[[カテゴリ:Raspberry_Pi]]

2024年8月12日 (月) 02:02時点における最新版

概要

MediaWikiは、PHPで記述されたオープンソースのウィキソフトウェアであり、
協調的なコンテンツ作成や知識共有のプラットフォームとして広く使用されている。

GPLライセンスの下で配布されている。

MediaWikiの特徴を以下に示す。

  • 用途
    主にWebサイトやオンライン百科事典の作成・運営に使用される。
  • 有名な例
    Wikipediaが最も有名なMediaWikiの使用例である。
  • 機能
    • ページの作成・編集
    • バージョン管理
    • ユーザ管理
    • 検索機能
    • カテゴリ分類
  • 拡張性
    プラグインやスキンを通じてカスタマイズが可能である。
  • 言語サポート
    多言語対応しており、様々な言語でコンテンツを作成できる。
  • データベース
    MySQL、PostgreSQL、SQLite等のデータベースと連携することができる。



必要なシステムおよびライブラリのインストール

MediaWikiの動作に必要となるパッケージ (Apache2、データベース、PHP) をインストールする。

sudo apt-get install apache2 mariadb-server php php-mysql libapache2-mod-php php-xml php-mbstring


MediaWikiの拡張機能を全て有効化する場合は、以下に示すライブラリをインストールする。

sudo apt-get install php-apcu php-intlphp-gd php-cli php-curl imagemagick inkscape 


Apache2を再起動する。

sudo systemctl restart apache2


上記のパッケージのインストールについて詳細を知りたい場合は、PHPApache2MariaDBを参照すること。


MediaWikiのダウンロード

MediaWikiの公式Webサイトにアクセスして、MediaWikiをダウンロードする。
ダウンロードしたファイルを解凍する。

tar xf mediawiki-<バージョン>.tar.gz
mv mediawiki-<バージョン> mediawiki


Apacheのドキュメントルート (デフォルト: /var/www/htmlディレクトリ) に解凍したMediaWikiディレクトリを移動する。

sudo mv mediawiki <ドキュメントルート>

例:
sudo mv mediawiki /var/www/html


MediaWikiディレクトリの権限と所有者、所有グループを変更する。

cd /var/www/html

sudo chmod 755 mediawiki
sudo chown <Raspberry Piのユーザ名>:<Raspberry Piのグループ名> mediawiki



PHPの設定

APCuモジュールを使用する場合

APCuモジュールを使用する場合は、APCuモジュールをソースコードからインストールする必要がある。

まず、APcuモジュールのGithubにアクセスして、ソースコードをダウンロードする。
ダウンロードしたファイルを解凍する。

tar xf apcu-<バージョン>.tar.gz
cd apcu-<バージョン>


次に、APCuモジュールをビルドおよびインストールする。
モジュールのインストールディレクトリは、/usr/lib64/extensionsディレクトリ、または、/<PHPのインストールディレクトリ>/lib64/extensions/no-debug-zts-xxxxxxxxディレクトリとなる。
ヘッダファイルのインストールディレクトリは、/usr/include/phpディレクトリ、または、/<PHPのインストールディレクトリ>/include/phpディレクトリとなる。

phpize

./configure --enable-apcu
make -j $(nproc)
make install


最後に、APCuモジュールの使用を許可するため、PHPの設定ファイルに以下に示す設定を記述する。

 # php.iniファイル
 extension = "/PHPのインストールディレクトリ>/lib64/extensions/no-debug-zts-20220829/apcu.so"
 apc.enabled = 1
 apc.shm_size = "2048M"
 apc.mmap_file_mask = "/tmp/apc.XXXXXX"


PHP-FPMを使用する場合

PHP-FPMを使用する場合は、/etc/php-fpm.d/www.confディレクトリ、または、/<PHPのインストールディレクトリ>/etc/php-fpm.d/www.confファイルにおいて、
メモリエラー回避のために使用できるメモリサイズを変更する必要がある。

 # /etc/php-fpm.d/www.confディレクトリ
 # または
 # /<PHPのインストールディレクトリ>/etc/php-fpm.d/www.confファイル
 
 # 編集前
 ;php_admin_value[memory_limit] = 32M
 
 # 編集後
 # 128[MB]以上の値に変更する。
 php_admin_value[memory_limit] = 128M


設定を反映させるため、NginXおよびPHP-FPMを再起動する。

sudo systemctl restart nginx php-fpm



Apache2の設定

仮想ホストを使用する場合は、インストール - Apache2(SUSE)#仮想ホストの構築 (パッケージ管理システムからApache2をインストールした場合)のページを参照すること。


MariaDBの設定

MariaDBサーバのインストール中に、rootアカウントのパスワードの入力を求められる。
もし、rootのパスワードが未設定の場合は、以下のコマンドを実行する。

sudo mysqladmin -u root password <パスワード>


MediaWikiで使用するデータベースを作成する。

sudo mysql -u root -p

Enter password:

mysql> CREATE DATABASE <データベース名>;


USEコマンドを使用して、このシェルセッションの今後の操作でそのデータベースを使用するようシェルに指示する。

 mysql> USE <データベース名>;


データベースユーザを作成して、パスワードを設定する。
このユーザは、localhostからデータベースに接続できる。

※注意
シングルクォーテーションも必須であることに注意する。

mysql> CREATE USER '<データベースユーザ名>'@'localhost' IDENTIFIED BY '<パスワード>';


新しく作成したデータベースユーザには権限が無いため、GRANTコマンドを使用して幾つかのアクセス権を付与する必要がある。
ここでは、ALLオプションを使用しているが、実際には、より多くの制限された権限をユーザに付与する方が良い。

mysql> GRANT ALL PRIVILEGES ON <データベース名>.* TO '<データベースユーザ名>'@'localhost'; 
mysql> FLUSH PRIVILEGES;
mysql> quit



MediaWikiのインストール

上記の設定が全て完了しているとき、MediaWikiをインストールすることができる。

  1. WebブラウザでMediaWikiを配置したURL:http://<ホスト名またはIPアドレス>/mediawiki/mw-config を入力する。
  2. MediaWikiのメイン画面が表示されるので、[set up the wiki]を押下する。
    mbstringやXML等のPHP拡張機能がインストールされているにも関わらず、
    それらの拡張機能がインストールされていない表示される場合は、以下のコマンドを実行して、手動で有効化する。
    sudo phpenmod mbstring
    sudo phpenmod xml
    sudo systemctl restart apache2
  3. 言語設定を日本語にして[続行]を押下する。
  4. [環境の確認]画面で、規約を確認して[続行]ボタンを押下する。
    また、データベースのホストの情報は、localhostではなく127.0.0.1のようにIPアドレスで入力する。
    データベース名とデータベースのユーザ名は、上記セクションで設定したものを入力する。
    最下部の[続行]ボタンを押下する。
  5. [データベースの設定]画面では、データベースの文字セットをUTF-8にして、[続行]ボタンを押下する。
  6. [MediaWikiの名前]画面では、任意の名前を付ける。
  7. [管理アカウント]画面では、MediaWikiのWebサイトにログインできるユーザ名とパスワードを入力する。
  8. [インストール]画面では、[続行]ボタンを押下する。
  9. [インストール完了]画面では、LocalSettings.phpをダウンロードして、/var/www/html/mediawikiディレクトリ直下に配置する。



MediaWikiの設定

アップロード設定

ファイルのアップロードはMediaWikiのオプション機能であり、デフォルトでは無効になっている。
有効にする場合、Webサーバのユーザによって書き込み可能なディレクトリをWebルートに提供する必要がある。

これはセキュリティのためにいくつかの意味を持つ。

  • このディレクトリは、書き込み可能でなければならない。
    また、Webサーバの限定されたユーザアカウントが所有しなければならないかもしれない。
    しかし、マルチユーザシステムでは、他のローカルユーザがアップロードディレクトリに悪意のあるファイルを紛れ込ませることが可能かもしれない。
    可能な限り、Webサーバのアカウントのみが書き込み可能なディレクトリにする必要がある。
  • PHPの設定は、個々のアップロードに対してファイルサイズの制限を設定するが、MediaWikiは総アップロードに対していかなる制限も設定していない。
    悪意のある訪問者は多くのファイルをアップロードすることでディスクパーティションを一杯にすることができてしまう。
  • 生成されたサムネイルと上書き確認のためにアップロードされたファイルはMediaWikiのWebインターフェイスに表示されることなくimages/thumbディレクトリとimages/tmpディレクトリに保持される。
    そのため、それらのサイズにも注意する必要がある。


デフォルトの設定では、安全のためにアップロードできるファイルの種類を制限しようとしている。

  • デフォルトでは、ファイル拡張子.png、.gif、.jpg、.jpeg、.webpはホワイトリスト($wgFileExtensions)である。
  • ユーザがホワイトリスト($wgStrictFileExtensions)を上書きすることを許可する場合でも、様々な実行可能な拡張子とスクリプト拡張子は明示的にブラックリスト($wgFileBlacklist)に登録される。
  • いくつかの既知の画像ファイル拡張子は、PHPのgetimagesize()関数を使用してそのタイプを検証する。
  • アップロードされたファイルは、Webブラウザのファイルタイプ検出バグに引っかかり、HTMLとして表示されないかチェックされる。


予防措置として、アップロードディレクトリ(デフォルトではimagesディレクトリ)にあるPHPスクリプト(およびその他のスクリプトタイプ)のサーバサイドでの実行を明示的に無効にする必要がある。
また、X-Content-Type-Options: nosniffヘッダを設定することにより、ファイルをスニッフしないようにブラウザに指示する必要がある。

例えば、MediaWikiのインスタンスが/var/www/html/MediaWikiにある場合、これを行うhttpd.confファイルは、以下に示すような設定になる。

 # httpd.confファイル
 
 <Directory "/var/www/html/MediaWiki/images">
    # Ignore .htaccess files
    AllowOverride None
 
    # Serve HTML as plaintext, don't execute SHTML
    AddType text/plain .html .htm .shtml .phtml
 
    # Don't run arbitrary PHP code.
    php_admin_flag engine off
 
    # Tell browsers to not sniff files
    Header set X-Content-Type-Options nosniff
 
    # If you've other scripting languages, disable them too.
 </Directory>


Apache2の設定ファイル(httpd.confファイル)にアクセスできない場合、かつ、.htaccessファイルを作成して特定のディレクトリの設定を上書きできる場合、
アップロードディレクトリ直下に以下に示すような.htaccessファイルを作成することができる。

 # アップロードディレクトリ直下の.htaccessファイル
 
 # Serve HTML as plaintext, don't execute SHTML
 AddType text/plain .html .htm .shtml .phtml .php .php3 .php4 .php5 .php7 .php8
 
 # Old way of registering php with AddHandler
 RemoveHandler .php
 
 # Recent way of registering php with SetHandler
 <FilesMatch "\.ph(p[3457]?s?|tml)$">
   SetHandler None
 </FilesMatch>
 
 # If you've other scripting languages, disable them too.


PHP設定ファイルのopen_basedirオプションの使用は、アップロードの処理を複雑にするかもしれない。

上記の解決方法のいずれかを使用している場合、以下に示すような簡単なテストで正常に動作しているかどうかを確認できる。

  1. アップロードディレクトリにtest.phpファイルを作成する。
  2. test.phpファイルに、<?php phpinfo();を記述する。
  3. WebブラウザのURL入力欄から、ファイルのパスを入力する。
  4. ファイルのテキストが表示されれば問題無いが、そうでない場合はどこかが間違っている。



エラー

ログイン

MediaWikiにログインする時、以下のエラーが出力されてログインできない場合がる。
これは、セッションとクッキーをAPCuでキャッシュする関係でエラーが出力される。

ログインのセッションに問題が発生しました。 セッション乗っ取りを防ぐため、操作を取り消しました。
前のページへ戻って再度読み込んだ後に、もう一度試してください。


上記のエラーを修正するには、LocalSettings.phpファイルを以下のように編集する。

# 修正前
$wgMainCacheType = CACHE_ACCEL;

# 修正後
$wgMainCacheType = CACHE_ANYTHING;