AdminCGIPath による mt.cgi の利用方法(その2)

AdminCGIPath による mt.cgi の利用方法(その2)

Posted at May 15,2005 11:58 PM
Tag:[AdminCGIPath, Customize, MovableType, mt.cfg, Security]

本エントリーは3.17以降での動作確認はできておりません。
前回のエントリーで、

AdminCGIPath を利用する場合、移動した mt.cgi のディレクトリに、移動前のディレクトリ配下の他のディレクトリやファイルをコピーする必要があります

とまとめ、具体的な設定方法を記しました。ですが、mt.cgi 起動時に設定される lib や extliib、および mt.cfg のパスに、移動前のディレクトリを設定することで他のディレクトリやファイルのコピーは不要となり、mt.cgi も正常に動作することを確認しました。

ということで、AdminCGIPath による mt.cgi の利用方法について、改めてカスタマイズ方法を記します。
例で示すURLとパスの対応は下記の通りです。

URL:http://domain/to/mt/
URLのパス:/path/to/mt/

1.ディレクトリ作成

mt.cgi を配置するディレクトリを作成します。

2.mt.cgi 移動

現在の mt.cgi を新しく作ったディレクトリ配下へ移動します。

3.mt.cfg に AdminCGIPath 追加

mt.cfg を任意のエディタで開き、青色部分を追加してください。AdminCGIPath の URLは新しく作ったディレクトリ(この例では "admin")までを指定します。

# Movable Type uses the CGIPath setting to construct links back to
# CGI scripts; for example, the MT tag <$MTCGIPath$> is substituted
# with the value of the CGIPath setting. You will need to change this
# value when you first install MT; instructions for doing so are in
# the Installation Instructions, in INSTALLING THE MOVABLE TYPE
# APPLICATION CODE, Step 3.
 
CGIPath http://domain/to/mt/
AdminCGIPath https://domain/to/mt/admin/

https が利用できない場合は

AdminCGIPath http://domain/to/mt/admin/

とします。

4.mt.cfg に StaticWebPath 追加

既に StaticWebPath を設定している場合はスキップしてください。
StaticWebPath は「ドキュメントルートを起点としたパス」です。「ドキュメントルート」は、例えばこのサイトでは、

http://www.koikikukan.com/

でアクセスされるパスがドキュメントルートとなります。Movable Type 3.x 導入手順mt.cfgの編集 その1 (CGIPath)mt.cfgの編集 その2 (StaticWebPath)に具体的な設定例がありますので参考になれば幸いです。

mt.cfg に StaticWebPath が設定されていない場合、管理ページ用のスタイルや画像データである

images/
mt.js
styles.css

のパスとして AdminCGIPath の値を使ってしまうようですので、index.html があるディレクトリ配下に新しいディレクトリ(例えば mt-static)をつくり、そこへ images/ mt.js styles.css をコピーまたは移動します。mt.cfg は下記の青色部分を追加します。

# If you place all of your MT files in a cgi-bin directory, you
# will need to situate the static files (docs, images, styles.css)
# elsewhere, so that the webserver will not try to execute them. The
# TROUBLESHOOTING section of the manual has more information.
#
StaticWebPath /mt-static/

移動したくない場合は、3項にある CGIPath と全く同じ設定

StaticWebPath http://domain/to/mt/

としてもOKになるようです(ただし cgi-bin 配下にこれらのディレクトリやファイルが存在するのは本来適正な配置ではないようです)。

5.mt.cfg の DataSource 変更

Berkeley DB を使用している場合、データベース・ディレクトリへのパスを相対パスから絶対パスに変更する必要があります。

# The filesystem path to the 'db' directory, where your MT database
# files are stored. You will probably need to change this when you
# first install MT; instructions for doing so are in the Installation
# Instructions, in INSTALLING THE MOVABLE TYPE APPLICATION CODE, Step 8.
# Consider using the MySQL configuration, below.
 
DataSource ./db /path/to/db

6.mt.cgi のパス設定処理変更

移動した mt.cgi をダウンロードして任意のエディタで開き、下記の変更を実施します。6.1または6.2のいずれか一方を行ってください。

注:6.1は動作NGのため適用しないでください。

6.1 mt.cgi のディレクトリを起点とした相対パスで指定

赤色部分を青色部分に置き換えます。

my($MT_DIR);
BEGIN {
    if ($0 =~ m!(.*[/\\])!) {
        $MT_DIR = $1;
    } else {
        $MT_DIR = './';
    }
    $MT_DIR = 'path';
    unshift @INC, $MT_DIR . 'lib';
    unshift @INC, $MT_DIR . 'extlib';
}

変更後の path は下記のように設定します。まず、以前のディレクトリ配下に新しくディレクトリを作成した場合です。例えば、

以前 mt.cgi があったディレクトリ:/path/to/mt/
新しく mt.cgi を置くディレクトリ:/path/to/mt/dir/

というディレクトリ構成であれば、mt.cgi は

$MT_DIR = '../';

とします。つまりひとつ上のディレクトリを指すように記述します。
次に以前のディレクトリと同じならびに新しくディレクトリを作成した場合です。例えば、

以前 mt.cgi があったディレクトリ:/path/to/mt/ 新しく mt.cgi を置くディレクトリ:/path/to/mt2/

というディレクトリ構成であれば、mt.cgi は

$MT_DIR = '../mt/';

とします。
いずれも最後は必ず "/" で終わるようにしてください。またディレクトリは 「'」で括ってください。

6.2 絶対パスで指定

my($MT_DIR);
BEGIN {
    if ($0 =~ m!(.*[/\\])!) {
        $MT_DIR = $1;
    } else {
        $MT_DIR = './';
    }
    $MT_DIR = 'path';
    unshift @INC, $MT_DIR . 'lib';
    unshift @INC, $MT_DIR . 'extlib';
}

変更後の path は下記の例のように設定します。

以前 mt.cgi があったディレクトリ:/path/to/mt/
新しく mt.cgi を置くディレクトリ:/path/to/mt/admin/
$MT_DIR = '/path/to/mt/';

こちらはシステムのルートディレクトリからの設定です。言い換えると CGIPath のパスです。Windows の場合、ドライブの指定は不要ですが、"C:/path/to/mt/"と設定しても大丈夫です。1項と同様、最後は必ず "/" で終わるようにしてください。またディレクトリは 「'」で括ってください。

7.mt.cfg の保護

Movable Type を cgi-bin ディレクトリから実行していない場合は、CGIPath で設定されたディレクトリ(mt.cfg のあるディレクトリ)に .htaccess ファイルを作成し、以下の内容を挿入します(すでに存在する場合は追加)。これを設定していないと mt.cfg にアクセスされるおそれがあります。

<Files mt.cfg>
<Limit GET>
deny from all
</Limit>
</Files>

この内容は、Movable Typeのインストール手順mt.cfgの保護からの引用です。

以上です。
本カスタマイズがセキュリティ上問題あるようでしたらご指摘ください。

2005.05.16 追記
7項のタグを修正しました。"Limit" と書かれたタグを削除しています。

2005.05.16 追記
5項(StaticWebPath 設定)および6項を追加しました。それに伴って項番を振り直しました。

2005.05.24 追記
6.1項の相対パス指定では plugins ディレクトリが正常に参照できないことが判明したため、手順より削除致しました。

2005.05.26 追記
6.2項の絶対パスに誤りがありましたので修正致しました。また説明用のパス名を若干変更しました。

関連記事
トラックバックURL


トラックバック

AdminCGIPathの設定方法 from TS-Works Blog
よく調べずにちゃっちゃっと設定したら、エラーが出て、うまく動作しなかったので、 ... [続きを読む]

Tracked on May 16, 2005 10:00 PM

AdminCGIPath による mt.cgi の利用方法。 from swimmer's blog ver. 2.0
なんだかこの記事を見てると気になってしょうがなかったのでとりあえず措置を取ってみ... [続きを読む]

Tracked on May 18, 2005 1:59 AM

ブロガー必見! Movable Type の脆弱性対処法について from Under The Red Sky
ちょっと今回はカタイけど重要なお話です。 最近ネット事情に疎くなっていてちょっと... [続きを読む]

Tracked on May 18, 2005 12:59 PM

Movable Typeに不正アクセスを許す脆弱性だと!? from Zero Divide
まぁなんていうか、こんな辺鄙なところはだれもなにもしないと思うけど、いちおうやっ... [続きを読む]

Tracked on May 20, 2005 11:45 PM

MovableTypeの脆弱性への対処 from [AT]A-tak on PC Weblog
MovableTypeに脆弱性が見つかったので対処しました。... [続きを読む]

Tracked on May 21, 2005 1:06 PM
コメント

Limit GET
は無い方が安全です。

[1] Posted by Vigorpants : May 16, 2005 12:44 AM

>Vigorpantsさん
こんばんは。
他サイトで理由確認しました。
ご指摘ありがとうございました。

[2] Posted by yujiro : May 16, 2005 1:03 AM

こんにちは。はじめまして。
いつも記事を参考にさせてもらっています。
今回もこの記事を見つつMTをいじっていました。このエントリーを見つつ設定を終え、いざ管理画面を起動してみると
「ライン:2 文字:1 構文エラーです。 (mt.cgiのパス)」
と出て管理画面のレイアウトが崩れてしまいます。
(もちろんライン2のあたりなどいじっていません)
こんな感じです

機能はほぼ問題なく使えるのですが…。
何か他のディレクトリをコピーする必要あるでしょうか。

[3] Posted by wIng : May 16, 2005 3:08 PM

>wIngさん
こんにちは。
記事参照ありがとうございます。

ご質問の件ですが、4項を新たに追加致しましたので試して頂けますでしょうか。
カスタマイズの考慮不足ですいませんでした。

以上です。
それではどうぞよろしくお願い致します。

[4] Posted by yujiro : May 16, 2005 5:21 PM

初めまして。「Under The Red Sky」というブログをやっておりますKotaと申します。

遅まきながらこの脆弱性のことを知り、こちらのページ通りに設定変更をいたしました。大変助かりました。どうもありがとうございます。

ところで一つわからなかったのですが、こちらのページの通りにやったところ、mt.cgiの画像やスタイルシートがリンクされませんでした。

「4.mt.cfg に StaticWebPath 追加」のところで引っ掛かったのだと思いますが、私はルート直下に「xx」というフォルダを作成してmt.cgiを置きました。

そしてCSSやimages/, jsなどはindex.htmlのあるディレクトリ「blog」の下に「mt-static」というフォルダを作成して移動させました。

mt.cfgも「blog」ディレクトリですから、その直下の「mt-static」にこれらのファイルがあり、例題通りの設定をいたのですがうまくいきませんでした。

mt.cgiのソースを見ると、どうもmt.cgiからの相対パスになっているように思い、StaticWebPathを「../blog/mt-static/」と変更したところ、うまく行きました。

これはこれで正しいのでしょうか? つまりStaticWebPathはmt.cfgからの相対パスでなく、mt.cgiからの相対パス、ということなのでしょうか?

よろしければその辺教えていただければと思います。長々と失礼いたしました。

[5] Posted by Kota : May 18, 2005 1:12 PM

>Kotaさん
はじめまして。
記事参照ありがとうございます。

ご質問の件ですが、StaticWebPath は「ドキュメントルートを起点としたパス」という認識でおります。Kota さんの場合、ドキュメントルート配下に "blog" ディレクトリを作成され、さらにその配下に "mt-static" ディレクトリを作成されているので、

StaticWebPath /blog/mt-static/

になると思われます。プログラム的には、

mt.cgi の起動で mt.cfg のパス(mt.cgi からの相対パス)取得
    ↓
mt.cfg 取得
    ↓
StaticWebPath の値(ドキュメントルートを起点としたパス)を取得

という流れです。
正常に動作しないようでしたら私の認識誤りですのでお許しください。

なお、Movable Type 3.x 導入手順mt.cfgの編集 その1 (CGIPath)mt.cfgの編集 その2 (StaticWebPath)に具体的な設定例がありますので参考になれば幸いです。

説明不足ですいませんでした。
以上です。
それではどうぞよろしくお願い致します。

[6] Posted by yujiro : May 19, 2005 12:23 AM

こんにちは。返事が遅れてすみません。
追加された項目を試してみたところ、無事に動作しました。ありがとうございました。
これからもHP運営頑張って下さい。

[7] Posted by wIng : May 19, 2005 12:53 PM

yujiroさまご丁寧なお返事、本当にどうもありがとうございました。

昨日書いた通り「../blog/mt-static/」でうまく言っていたのですが、試しに「/blog/mt-static/」にしたらどうなるんだろう、と試したところ、これも問題なく動いております(^^;

どうなってるのかよくわかりませんが、とりあえず問題はなさそうなのでこのままにしておこうと思います。

わざわざどうもありがとうございました。

[8] Posted by Kota : May 19, 2005 2:57 PM

>Kotaさん
こんばんは。
どういたしまして。
ご連絡くださりありがとうございました。
"../"での動作については内部で適正に処理しているのかも知れませんね。

[9] Posted by yujiro : May 19, 2005 8:41 PM

MT公式サイトの対応方法では、全然よく分からず、うまくいなかったので、大変助かりました。
Kotaさんのような問題も起こったので、そのコメントに関連する説明もありがたかったです。
いつもありがとうございます。

[10] Posted by Minako : May 20, 2005 8:26 PM

>Minakoさん
こんばんは。
記事参照&コメントありがとうございます。
実は私も全然分かりませんでした。(爆)
お役に立てたようで良かったです。

[11] Posted by yujiro : May 21, 2005 10:44 PM

yujiroさん

こんにちは。今回はいろいろとありがとうございました。

> "../"での動作については内部で適正に処理しているのかも知れませんね。

これは納得、そういうことのように思えますね。

ところでまた一つ別の問題が発生してしまいました。

pluginsが表示されなくなってしまいました。MTにプラグインを追加しているとメインメニューに表示が出るのですが、それが出なくなってしまいました。

MTのヘルプマニュアルには「mt.cgiと同じディレクトリにpluginsディレクトリを置いてください」とあるので、今回作成したmt.cgi用の新しいディレクトリに移動させたのですが、反映されていません。スパムコメントやスパムTBをフィルタリングするプラグインなので、実際作動しているかどうか、スパムが来ないとわからない、ということもありまして(^^;

たびたび申し訳ありませんが、もし何かお分かりでしたらご教授頂けると幸いです。本当に「おんぶにだっこ」ですいませんm(__)m

[12] Posted by Kota : May 22, 2005 3:07 PM

>Kotaさん
こんばんは。
ご質問の件ですが、私の環境では plugins ディレクトリを移動しない状態でメインメニューにプラグインが正常に表示されております。
MTのヘルプマニュアルはそこ(= AdminCGIPath が設定された場合の記述)まで考慮して書かれていないという読みです。

以上です。
それではどうぞよろしくお願い致します。

[13] Posted by yujiro : May 23, 2005 1:18 AM

yujiro様

たびたびのご回答ありがとうございました。

私も最初は移動させなかったのですが、表示がされなかったのでいろいろ移動させてみてやはりダメだった、という状態です。

とりあえずこのまま3.16を待つことにします。

お付き合い下さいましてどうもありがとうございました。

[14] Posted by Kota : May 23, 2005 12:53 PM

>Kotaさん
こんにちは。
返事が遅くなってすいません(裏で動作を確認しておりましたため)。

原因ですが、mt.cgi で相対パスを設定した場合、MT.pm の下記の処理で plugins ディレクトリを正常に参照できないことが判明しました。

      : my $plugin_dir = $cfg->PluginPath; local *DH; if (opendir DH, $plugin_dir) {       :

ということで、6項のパスにつきましては6.2項の絶対パス指定で試して頂けますでしょうか。絶対パス指定でのプラグインの動作までは確認致しましたが何か不具合がございましたら再度ご連絡ください。

以上です。
記事に不備がありましたこと、お詫び申し上げます。

[15] Posted by yujiro : May 24, 2005 2:11 PM

MTの脆弱性対策にあたり参考にさせていただきました。
6.2の変更点ですが、例のパスでいくならば、
====
$MT_DIR = '/path/to/mt/dir/';
====
ではなく
====
$MT_DIR = '/path/to/mt/';
====
とすべきでないでしょうか。
その後で、
====
unshift @INC, $MT_DIR . 'lib';
unshift @INC, $MT_DIR . 'extlib';
?
my $app = MT::App::CMS->new( Config => $MT_DIR . 'mt.cfg',
Directory => $MT_DIR )
====
といった使い方をしていますので、移動する対象をmt.cgiのみとし、他のライブラリやcfgファイルを移動・コピーしない前提であれば、$MT_DIRはオリジナルのMTのパスをしていすべきかと存知ます。

こちらのページは、シックス・アパートの問題の記事からたどれるので、参考にしている方も多いと思いますので、コメントしました。

[16] Posted by やまいし : May 26, 2005 2:36 PM

>やまいしさん
こんにちは。
記述ミスですいません。
ということで先ほど修正致しました。
ご指摘くださりありがとうございました。

[17] Posted by yujiro : May 26, 2005 6:58 PM

こんにちは。
この度、例のMovable Type 3.17-jaへアップグレードしたところ、AdminCGIPathで設定している管理画面へ入ることができなくなってしましました。
リンク先が、http://mt/dir/mt.cgiのようになってしまい、ドメイン名が抜けているようです。
それまできちんと動いていたので、バージョンアップによってどこか設定を変える必要がでてきたんでしょうか?
いろいろ確認してみましたが、あまり詳しくないもので自己解決できませんでした。
他の方は大丈夫なのかな?

[18] Posted by kazu : June 11, 2005 2:58 PM

>kazuさん
こんばんは。

ご質問の件ですが、アップグレード後に本エントリーの設定を再度行われたという理解でよろしいでしょうか。私はまだアップグレードしていないのではっきりとした原因は不明ですが、バージョンアップでこの辺りの機能が変更されている可能性があります。

まずは AdminCGIPath と CGIPath を同じ内容にして(またはAdminCGIPathを削除)、 mt.cgi も元のディレクトリに戻して mt.cgi を起動してみてください。

以上です。
それではよろしくお願い致します。

[19] Posted by yujiro : June 12, 2005 12:13 AM

yuriroさま

アップグレード前に本エントリーの設定を行い、運用していましたので、アップグレードの際は、3.17-jaに含まれていたmt.cgiの内容を本エントリーに沿って書き換え、AdminCGIPathのディレクトリに入れただけです。
とりあえずどうしようもなかったので、AdminCGIPathをコメントアウトして元に戻して運用しています。

ありがとうございました。

[20] Posted by kazu : June 12, 2005 12:51 AM

>kazuさん
こんばんは。
ご連絡ありがとうございました。
記事の方は注意書きを追記しておきました。

[21] Posted by yujiro : June 12, 2005 11:38 PM

yujiroさま

その後、色々設定を試してみたところ、AdminCGIPathを違う階層に移動するだけでしたらきちんと動作しました!!

私はXREAのサーバを使っていてSSL通信をさせようとしたのですが、XREA特有の問題かもしれません。
XREAではSSL通信を行う場合、アクセスするURLに「https://SSLサーバ名/」を付けるように設定するのですが、通信に代替サーバーを介するため、REMOTE_ADDR,REMOTE_HOSTが取得出来ないとのことでした。
あまりこの辺のところが詳しくないので全く見当外れなのかもしれませんが、3.151-jaの場合にはきちんとSSL通信できていましたので、何かしら仕様が変わっていることには違いないと思うのですが・・・。

もう少し自分で勉強します。
ご迷惑おかけしました。

[22] Posted by kazu : June 15, 2005 5:58 PM

>kazuさん
こんにちは。
情報ありがとうございました。

私の方も時間をみつけて試してみたいと思います。
ではでは!

[23] Posted by yujiro : June 16, 2005 12:24 PM
コメントする
greeting

*必須

*必須(非表示)


ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。また、すべてのご質問にはお答えできない可能性があります。予めご了承ください。

太字イタリックアンダーラインハイパーリンク引用
[サインインしない場合はここにCAPTCHAを表示します]

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)