MediaWiki on さくら
この記事はIS17er Advent Calendar 2016の4日目の記事として書かれました。
どうも。こおしいずです。
ご報告が遅れましたが、東京大学学部後期課程は今のところ理学部情報科学科に内定し、そこに進学するつもりです。*1
その理学部情報科学科内定勢は、オンラインのコミュニケーション手段として、SlackとWikiを使っています*2。
URLが何処とは言いませんが、Wikiはさくらのレンタルサーバを借りて、そこにMediaWikiをインストールする形を取っています。(僕が借りたりインストールしたわけではありませんが。)
このMediaWiki導入時の問題がわりとさくらレンタルサーバ固有っぽいので書きます。
私は導入はやってません。他のレンタルサーバで個人用に導入したことはあって、対話的に丁寧な解説付きでできた記憶があるので、それはあまり問題ないでしょう。
添付ファイルにアクセスできない(500 Internal Server Errorと表示される)
うちのWikiでは、文書をスキャンしたものがPDF化されてアップされたりしています。
が、初期設定のままではすべての添付ファイルに対してアクセスしたとき、500 Internal Server Errorがでてしまいました。
どういうわけだろうとさくらのレンタルサーバーのコントロールパネルにログインして、エラーログを見てみたところ、「Optionsは使えない」みたいなことが書いてありました。*3
調べてみると、確かにさくらのレンタルサーバでは.htaccessにOptions指定はできない旨が書いてありました。
さらに、MediaWikiのimages/.htaccessには
Options +FollowSymLinks
が書いてあります。このOptionsはいつ書かれたのだろうとこのファイルのHistoryを見てみると、2014/12/02のcommit b981cf92が見つかります。commit messageはミスっているようですが、これはbug T64289へのpatchらしいです。
バグ内容は、OSXでthumbnailにアクセスしようとしたときに500 Internal Server Errorしてしまうと。
確認したところ、さくらのレンタルサーバーでは、特にimages/thumb以下でもシンボリックリンクは使っていなさそうなので、まあ消してもええやろっつってこのOptionsの行をコメントアウトしました。
これで正常に添付ファイルにアクセスできるようになりました。
Indexes案件
さくらのレンタルサーバでは規定でIndexesが表示されます。
index.html,index.phpなどが置かれていないディレクトリにアクセスしたときに、FTPサイトを閲覧したみたいにファイル一覧が表示されるあれです。CTFerとして、これには反応せざるを得ません。
特にさっきのimages以下などは、とくにアクセス制御をしていないので、このディレクトリの存在をエスパーされただけで任意の添付ファイルにアクセス可能となってしまいます。
このIndexes機能を無効にする正しい方法は、.htaccessに
Options -Indexes
を追加することですが、前述のとおりさくらのレンタルサーバではOptions指定が無効にされています。ということでググったところ、同じことで悩んでいる人は多いらしく、なんとも頭のいい方法を見つけました。
.htaccess中で
DirectoryIndex index.html index.htm index.php .ht
のように、DirectoryIndexの末尾に.htをつけるというものです。なるほどなぁ。
(やるべきではありませんが)その辺のApacheとか使ってそうなサイトで適当に/.htとかにアクセスしようとすると、大抵403 Forbiddenと言われます。
というのは、先ほどから話題にしている.htaccessや、Basic認証の認証情報を入れておく.htpasswdなど、.htから始まるファイルはhttpdの設定ファイルとして機能しており、たいていの場合は設定では.htから始まるファイルへのアクセスは拒否するようになっています。
DirectoryIndexの設定によって、httpdはindex.html -> index.htm -> index.phpまで順番に見てファイルがなかった時、.htにアクセスしようとしますが、それはこのルールによって拒否されて、その結果アクセス拒否がクライアントには返ることになります。
つよいなぁ。
MediaWiki使用について
利用者各位に注意です。
添付ファイルについてはアクセス制御が特に行われていません。
これは別にいいんじゃないかとは思います。よくある例として、スマホでPDFを開こうとして、ChromeではログインをしていてSession情報からPDFにたどり着けるのに、ChromeがAdobeReaderにURLを渡すだけだったりすると、AdobeReaderは認証情報を持っていないためにPDFにアクセスできない場合があります。(ChromeでダウンロードしてからAdobeReaderで開くということをすればいけます。)
さらに、/.htaccessで紹介したDirectoryIndexのテクを使うことによって、仮にimagesのURLが特定されたとしても、ファイル一覧は見れないようになっています。ので、特に問題はありません。
が、imagesのURLおよび添付ファイルのファイル名を同時に特定された場合は、残念ながら、そのファイルは閲覧されてしまうことになります。
具体的には、ここに書いてある通り、ファイル名のMD5ハッシュ値をとることで、当該ファイルのURLが完全に復元できるからです。
こういうわけで、MediaWikiのファイルアップロード機能を使用する際は、それが機密な情報であるなら、特定され得ないファイル名を使うとか、暗号化するとかしてください。