MovableTypeの復元方法(ざっくり説明)

2021/10に発表されたMTのXMLRPC APIの脆弱性の影響で、MTの本体が消されてしまって、管理画面にログインできなくなった人もいるかと思います。

本サイトでも、この脆弱性について書きました。
https://www.eripyon.com/mt/2021/11/vulnerability_mt-xmlrpc.html

ここでは、
・さくらのレンタルサーバーを使っている(そうでない人もOKかも)
・MTの本体が消される被害にあった
・DBは残っている
・特別なプラグインは使っていない(使っていても、そのファイルがあればOK)
という人向けに、復元手順の概要を書いてみます。

mt_recovery2.png

1.まず、使っていたMTのバージョンを確認しましょう。
わからない時は、さくらのコンパネにログインして、phpMyAdminでMT用のDBへアクセスし、mt_config内に書いてあるバージョンを確認します。
DBのパスワードがわからなくて、mt-config.cgiのバックアップもない場合は、DBのパスワードを変更しちゃいましょう。ただし、他の目的でDBを使っている場合は、そちらにも影響が出るので要注意です。

ここでヒント。
MTは、mt_xxxという感じで、mt_で始まるテーブルを見に行くようになっているのですが、それ以外のプリフィックスになっていた場合は、のちに説明する手順でMT本体を復元したあとで、以下のプログラムの mt_ をその違っているものに書き換えてください。
/lib/MT/ObjectDriver/Driver/DBI.pm の $param{prefix} ||= 'mt_';
/lib/MT/ObjectDriver/Driver/DBD/Legacy.pm の $table =~ s{ \A mt_ }{}xms;

2.該当バージョンのMT本体を入手します。
古いバージョンの場合は、
GitHub https://github.com/movabletype/movabletype の master の Tagsタブより
MTOS https://movabletype.org/downloads/archives/ の 4.x、5.x

3.MT
本体をサーバーの所定の場所にアップロードして、実行権の付与や、mt-config.cgiの内容を適切なものに変更します。
この時、mt-xmlprc.cgiの削除(または実行権の削除)を忘れないでやっておきましょう。
また、手もとにあるプラグインもアップロードします。

以上でMTの管理画面にアクセスできるようになったはずなので、アクセスしてみます。

ここでもうひとつヒント。
MTをバージョンアップしてしまい、Upgrade.pmで
failed to execute statement CREATE INDEX
failed to execute statement ALTER TABLE
などのエラーが出てしまったら、
MT本体の下にある lib/MT/Upgrade.pm の以下のように修正します。
# ignore drop errors; the table/sequence/constraint
# didn't exist
if (( ( $stmt !~ m/^drop /i )
&& ( $stmt !~ m/DROP CONSTRAINT /i ) )
&& (( $stmt !~ m/^create /i )
&& ( $stmt !~ m/ALTER TABLE /i )
&& ( $stmt !~ m/CREATE INDEX /i ) ))
{
die "failed to execute statement $stmt: $err";
}

mt_recovery3.png

ざっくりとこんな感じです。

ぐっどらっこ。