AdminCGIPath による mt.cgi の利用方法(その2)
本エントリーは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 追記
57項のタグを修正しました。"Limit" と書かれたタグを削除しています。
2005.05.16 追記
5項(StaticWebPath 設定)および6項を追加しました。それに伴って項番を振り直しました。
2005.05.24 追記
6.1項の相対パス指定では plugins ディレクトリが正常に参照できないことが判明したため、手順より削除致しました。
2005.05.26 追記
6.2項の絶対パスに誤りがありましたので修正致しました。また説明用のパス名を若干変更しました。
- Movable Type 8リリース
- MovableType 7のコンテンツデータのデータ識別ラベルを自動入力する方法
- 「MovableTypeを導入したときに参考になる記事まとめ」で紹介されました
- Movable Typeの新規記事投稿で公開日に現在時刻を設定する方法
- 上位100ブログの利用ブログツール1位はWordPressではなくMovable Type
- Movable Typeの旧バージョンを入手する方法
- 第2回「MTCafe Tokyo」開催のお知らせ
- MTCafe Tokyoに参加しました
- 「スマートフォンオプション for Movable Type」の発売開始
- MTCafe開催のお知らせ
- Movable Type 10周年とMovable Typeを知らない方へ
- MovableType.jpに寄稿しました
- 「Movable Type 5.1 プロの現場の仕事術」Amazonで予約開始
- Movable Type 5を始める前に設定しておきたい10の項目
- 書籍「Movable Type 5.1プロの現場の仕事術」をMovable Type 5.1購入時にもれなくプレゼント
≫ AdminCGIPathの設定方法 from TS-Works Blog
よく調べずにちゃっちゃっと設定したら、エラーが出て、うまく動作しなかったので、 ... [続きを読む]
≫ AdminCGIPath による mt.cgi の利用方法。 from swimmer's blog ver. 2.0
なんだかこの記事を見てると気になってしょうがなかったのでとりあえず措置を取ってみ... [続きを読む]
≫ ブロガー必見! Movable Type の脆弱性対処法について from Under The Red Sky
ちょっと今回はカタイけど重要なお話です。 最近ネット事情に疎くなっていてちょっと... [続きを読む]
≫ Movable Typeに不正アクセスを許す脆弱性だと!? from Zero Divide
まぁなんていうか、こんな辺鄙なところはだれもなにもしないと思うけど、いちおうやっ... [続きを読む]
≫ MovableTypeの脆弱性への対処 from [AT]A-tak on PC Weblog
MovableTypeに脆弱性が見つかったので対処しました。... [続きを読む]
Limit GET
は無い方が安全です。
>Vigorpantsさん
こんばんは。
他サイトで理由確認しました。
ご指摘ありがとうございました。
こんにちは。はじめまして。
いつも記事を参考にさせてもらっています。
今回もこの記事を見つつMTをいじっていました。このエントリーを見つつ設定を終え、いざ管理画面を起動してみると
「ライン:2 文字:1 構文エラーです。 (mt.cgiのパス)」
と出て管理画面のレイアウトが崩れてしまいます。
(もちろんライン2のあたりなどいじっていません)
こんな感じです
機能はほぼ問題なく使えるのですが…。
何か他のディレクトリをコピーする必要あるでしょうか。
>wIngさん
こんにちは。
記事参照ありがとうございます。
ご質問の件ですが、4項を新たに追加致しましたので試して頂けますでしょうか。
カスタマイズの考慮不足ですいませんでした。
以上です。
それではどうぞよろしくお願い致します。
初めまして。「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からの相対パス、ということなのでしょうか?
よろしければその辺教えていただければと思います。長々と失礼いたしました。
>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)に具体的な設定例がありますので参考になれば幸いです。
説明不足ですいませんでした。
以上です。
それではどうぞよろしくお願い致します。
こんにちは。返事が遅れてすみません。
追加された項目を試してみたところ、無事に動作しました。ありがとうございました。
これからもHP運営頑張って下さい。
yujiroさまご丁寧なお返事、本当にどうもありがとうございました。
昨日書いた通り「../blog/mt-static/」でうまく言っていたのですが、試しに「/blog/mt-static/」にしたらどうなるんだろう、と試したところ、これも問題なく動いております(^^;
どうなってるのかよくわかりませんが、とりあえず問題はなさそうなのでこのままにしておこうと思います。
わざわざどうもありがとうございました。
>Kotaさん
こんばんは。
どういたしまして。
ご連絡くださりありがとうございました。
"../"での動作については内部で適正に処理しているのかも知れませんね。
MT公式サイトの対応方法では、全然よく分からず、うまくいなかったので、大変助かりました。
Kotaさんのような問題も起こったので、そのコメントに関連する説明もありがたかったです。
いつもありがとうございます。
>Minakoさん
こんばんは。
記事参照&コメントありがとうございます。
実は私も全然分かりませんでした。(爆)
お役に立てたようで良かったです。
yujiroさん
こんにちは。今回はいろいろとありがとうございました。
> "../"での動作については内部で適正に処理しているのかも知れませんね。
これは納得、そういうことのように思えますね。
ところでまた一つ別の問題が発生してしまいました。
pluginsが表示されなくなってしまいました。MTにプラグインを追加しているとメインメニューに表示が出るのですが、それが出なくなってしまいました。
MTのヘルプマニュアルには「mt.cgiと同じディレクトリにpluginsディレクトリを置いてください」とあるので、今回作成したmt.cgi用の新しいディレクトリに移動させたのですが、反映されていません。スパムコメントやスパムTBをフィルタリングするプラグインなので、実際作動しているかどうか、スパムが来ないとわからない、ということもありまして(^^;
たびたび申し訳ありませんが、もし何かお分かりでしたらご教授頂けると幸いです。本当に「おんぶにだっこ」ですいませんm(__)m
>Kotaさん
こんばんは。
ご質問の件ですが、私の環境では plugins ディレクトリを移動しない状態でメインメニューにプラグインが正常に表示されております。
MTのヘルプマニュアルはそこ(= AdminCGIPath が設定された場合の記述)まで考慮して書かれていないという読みです。
以上です。
それではどうぞよろしくお願い致します。
yujiro様
たびたびのご回答ありがとうございました。
私も最初は移動させなかったのですが、表示がされなかったのでいろいろ移動させてみてやはりダメだった、という状態です。
とりあえずこのまま3.16を待つことにします。
お付き合い下さいましてどうもありがとうございました。
>Kotaさん
こんにちは。
返事が遅くなってすいません(裏で動作を確認しておりましたため)。
原因ですが、mt.cgi で相対パスを設定した場合、MT.pm の下記の処理で plugins ディレクトリを正常に参照できないことが判明しました。
: my $plugin_dir = $cfg->PluginPath; local *DH; if (opendir DH, $plugin_dir) { :
ということで、6項のパスにつきましては6.2項の絶対パス指定で試して頂けますでしょうか。絶対パス指定でのプラグインの動作までは確認致しましたが何か不具合がございましたら再度ご連絡ください。
以上です。
記事に不備がありましたこと、お詫び申し上げます。
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のパスをしていすべきかと存知ます。
こちらのページは、シックス・アパートの問題の記事からたどれるので、参考にしている方も多いと思いますので、コメントしました。
>やまいしさん
こんにちは。
記述ミスですいません。
ということで先ほど修正致しました。
ご指摘くださりありがとうございました。
こんにちは。
この度、例のMovable Type 3.17-jaへアップグレードしたところ、AdminCGIPathで設定している管理画面へ入ることができなくなってしましました。
リンク先が、http://mt/dir/mt.cgiのようになってしまい、ドメイン名が抜けているようです。
それまできちんと動いていたので、バージョンアップによってどこか設定を変える必要がでてきたんでしょうか?
いろいろ確認してみましたが、あまり詳しくないもので自己解決できませんでした。
他の方は大丈夫なのかな?
>kazuさん
こんばんは。
ご質問の件ですが、アップグレード後に本エントリーの設定を再度行われたという理解でよろしいでしょうか。私はまだアップグレードしていないのではっきりとした原因は不明ですが、バージョンアップでこの辺りの機能が変更されている可能性があります。
まずは AdminCGIPath と CGIPath を同じ内容にして(またはAdminCGIPathを削除)、 mt.cgi も元のディレクトリに戻して mt.cgi を起動してみてください。
以上です。
それではよろしくお願い致します。
yuriroさま
アップグレード前に本エントリーの設定を行い、運用していましたので、アップグレードの際は、3.17-jaに含まれていたmt.cgiの内容を本エントリーに沿って書き換え、AdminCGIPathのディレクトリに入れただけです。
とりあえずどうしようもなかったので、AdminCGIPathをコメントアウトして元に戻して運用しています。
ありがとうございました。
>kazuさん
こんばんは。
ご連絡ありがとうございました。
記事の方は注意書きを追記しておきました。
yujiroさま
その後、色々設定を試してみたところ、AdminCGIPathを違う階層に移動するだけでしたらきちんと動作しました!!
私はXREAのサーバを使っていてSSL通信をさせようとしたのですが、XREA特有の問題かもしれません。
XREAではSSL通信を行う場合、アクセスするURLに「https://SSLサーバ名/」を付けるように設定するのですが、通信に代替サーバーを介するため、REMOTE_ADDR,REMOTE_HOSTが取得出来ないとのことでした。
あまりこの辺のところが詳しくないので全く見当外れなのかもしれませんが、3.151-jaの場合にはきちんとSSL通信できていましたので、何かしら仕様が変わっていることには違いないと思うのですが・・・。
もう少し自分で勉強します。
ご迷惑おかけしました。
>kazuさん
こんにちは。
情報ありがとうございました。
私の方も時間をみつけて試してみたいと思います。
ではでは!