「インストール - MediaWiki(Raspberry Pi)」の版間の差分
(→概要) |
|||
(2人の利用者による、間の14版が非表示) | |||
1行目: | 1行目: | ||
== 概要 == | == 概要 == | ||
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のダウンロード == | |||
[https://releases.wikimedia.org/mediawiki/ MediaWikiの公式Webサイト]にアクセスして、MediaWikiをダウンロードする。<br> | |||
ダウンロードしたファイルを解凍する。<br> | |||
tar xf mediawiki-<バージョン>.tar.gz | |||
mv mediawiki-<バージョン> mediawiki | |||
<br> | |||
Apacheのドキュメントルート (デフォルト: /var/www/htmlディレクトリ) に解凍したMediaWikiディレクトリを移動する。<br> | |||
sudo mv mediawiki <ドキュメントルート> | |||
例: | |||
sudo mv mediawiki /var/www/html | |||
<br> | <br> | ||
MediaWikiディレクトリの権限と所有者、所有グループを変更する。<br> | MediaWikiディレクトリの権限と所有者、所有グループを変更する。<br> | ||
cd /var/www/html | cd /var/www/html | ||
sudo chmod 755 mediawiki | |||
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> | |||
== | == Apache2の設定 == | ||
仮想ホストを使用する場合は、[[インストール - Apache2(SUSE)#仮想ホストの構築 (パッケージ管理システムからApache2をインストールした場合)]]のページを参照すること。<br> | |||
<br> | <br><br> | ||
== MariaDBの設定 == | |||
MariaDBサーバのインストール中に、rootアカウントのパスワードの入力を求められる。<br> | |||
もし、rootのパスワードが未設定の場合は、以下のコマンドを実行する。<br> | もし、rootのパスワードが未設定の場合は、以下のコマンドを実行する。<br> | ||
sudo mysqladmin -u root password パスワード | sudo mysqladmin -u root password <パスワード> | ||
<br> | <br> | ||
MediaWikiで使用するデータベースを作成する。 | MediaWikiで使用するデータベースを作成する。<br> | ||
sudo mysql -u root -p | sudo mysql -u root -p | ||
Enter password: | Enter password: | ||
mysql> CREATE DATABASE | |||
mysql> CREATE DATABASE <データベース名>; | |||
<br> | <br> | ||
<code>USE</code>コマンドを使用して、このシェルセッションの今後の操作でそのデータベースを使用するようシェルに指示する。<br> | |||
mysql> USE | mysql> USE <データベース名>; | ||
<br> | <br> | ||
データベースユーザを作成して、パスワードを設定する。<br> | データベースユーザを作成して、パスワードを設定する。<br> | ||
このユーザは、localhostからデータベースに接続できる。<br> | このユーザは、localhostからデータベースに接続できる。<br> | ||
<br> | <br> | ||
<u>※注意</u><br> | |||
<u>シングルクォーテーションも必須であることに注意する。</u><br> | |||
mysql> GRANT ALL PRIVILEGES ON | 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> | ||
# WebブラウザでMediaWikiを配置したURL:http://<ホスト名またはIPアドレス>/mediawiki/mw-config を入力する。 | |||
# MediaWikiのメイン画面が表示されるので、[set up the wiki]を押下する。<br>mbstringやXML等のPHP拡張機能がインストールされているにも関わらず、<br>それらの拡張機能がインストールされていない表示される場合は、以下のコマンドを実行して、手動で有効化する。 | |||
#: <code>sudo phpenmod mbstring</code> | |||
#: <code>sudo phpenmod xml</code> | |||
#: <code>sudo systemctl restart apache2</code> | |||
# 言語設定を日本語にして[続行]を押下する。 | |||
# [環境の確認]画面で、規約を確認して[続行]ボタンを押下する。<br>また、データベースのホストの情報は、localhostではなく127.0.0.1のようにIPアドレスで入力する。<br>データベース名とデータベースのユーザ名は、上記セクションで設定したものを入力する。<br>最下部の[続行]ボタンを押下する。 | |||
# [データベースの設定]画面では、データベースの文字セットをUTF-8にして、[続行]ボタンを押下する。 | |||
# [MediaWikiの名前]画面では、任意の名前を付ける。 | |||
# [管理アカウント]画面では、MediaWikiのWebサイトにログインできるユーザ名とパスワードを入力する。 | |||
# [インストール]画面では、[続行]ボタンを押下する。 | |||
# [インストール完了]画面では、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
上記のパッケージのインストールについて詳細を知りたい場合は、PHP、Apache2、MariaDBを参照すること。
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をインストールすることができる。
- WebブラウザでMediaWikiを配置したURL:http://<ホスト名またはIPアドレス>/mediawiki/mw-config を入力する。
- MediaWikiのメイン画面が表示されるので、[set up the wiki]を押下する。
mbstringやXML等のPHP拡張機能がインストールされているにも関わらず、
それらの拡張機能がインストールされていない表示される場合は、以下のコマンドを実行して、手動で有効化する。sudo phpenmod mbstring
sudo phpenmod xml
sudo systemctl restart apache2
- 言語設定を日本語にして[続行]を押下する。
- [環境の確認]画面で、規約を確認して[続行]ボタンを押下する。
また、データベースのホストの情報は、localhostではなく127.0.0.1のようにIPアドレスで入力する。
データベース名とデータベースのユーザ名は、上記セクションで設定したものを入力する。
最下部の[続行]ボタンを押下する。 - [データベースの設定]画面では、データベースの文字セットをUTF-8にして、[続行]ボタンを押下する。
- [MediaWikiの名前]画面では、任意の名前を付ける。
- [管理アカウント]画面では、MediaWikiのWebサイトにログインできるユーザ名とパスワードを入力する。
- [インストール]画面では、[続行]ボタンを押下する。
- [インストール完了]画面では、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オプションの使用は、アップロードの処理を複雑にするかもしれない。
上記の解決方法のいずれかを使用している場合、以下に示すような簡単なテストで正常に動作しているかどうかを確認できる。
- アップロードディレクトリにtest.phpファイルを作成する。
- test.phpファイルに、<?php phpinfo();を記述する。
- WebブラウザのURL入力欄から、ファイルのパスを入力する。
- ファイルのテキストが表示されれば問題無いが、そうでない場合はどこかが間違っている。
エラー
ログイン
MediaWikiにログインする時、以下のエラーが出力されてログインできない場合がる。
これは、セッションとクッキーをAPCuでキャッシュする関係でエラーが出力される。
ログインのセッションに問題が発生しました。 セッション乗っ取りを防ぐため、操作を取り消しました。 前のページへ戻って再度読み込んだ後に、もう一度試してください。
上記のエラーを修正するには、LocalSettings.phpファイルを以下のように編集する。
# 修正前 $wgMainCacheType = CACHE_ACCEL; # 修正後 $wgMainCacheType = CACHE_ANYTHING;