2008年10月30日木曜日

Solaris10でCD(DVD)ROMからパッケージをインストール

wget入れるのに難儀したのでメモ
 

$cd /cdrom/sol_10_508_x86/Solaris_10/Product/
$pkgadd -d . SUNWwgetr SUNWwgetu

 
"." ピリオド(ベースディレクトリ指定?)がいることに中々気づかなかった。
 
 

そして wget の入った先は
"/usr/sfw/bin/wget"
 

デフォルトではパスが通ってないので気づかん…

Solaris10の自動アップデートインターフェイス

Solaris10 の管理でOS関連ファイルのアップデートをしたい場合、smpatch コマンドというのがある。これはyumっぽい。
 


それとは別にGUIで「Sun Update Manager」というのがある。
これはMicrosoftUpdateっぽい。
[caption id="attachment_1024" align="alignnone" width="300" caption="画像:Solarisの「Sun Update Manager」"]画像:Solarisの「Sun Update Manager」[/caption]
 

これは WSUS みたいに集中管理ができる模様、管理のしやすさ(他人への押し付けやすさとも言うな)というのもOSの売りになるなと思った。

メモエントリ:Xenのイメージファイルをマウントする

メモエントリ
Xenで使うHDDイメージファイルをマウントする方法。
 
 

そこはかと::Xenのイメージファイルをマウントする
 

losetup と kpartx コマンドを使えば楽にできるのか。
 
 

ソーシャルブックマーク代わりに。

2008年10月28日火曜日

アクセスログの保存期間は3ヶ月を目安にすればいいんじゃないか

ログの保存期間ってイマイチ迷う。
「アクセスログ 保存期間」「ログ 保存期間」で検索しても中々スパッとした答えが出てない、その代わり期間決定に色々参考になる情報があるという事はよく分かった。
 

それなら自分の中で定義しよう 3ヶ月(90日)でOK。(2008年10月現在の定義)
※最少は30日から、上は各自ストレージと相談してお好きなように
 

結論にいたるまでは、それなりの経過がある。以降は判断までの過程なので興味なければ不要。
 
 
 

プロバイダ責任制限法には制限が無いらしい


関連サイトなど。

 

責任法の第4条では開示要求について記載されている。
「プロバイダは当局のログ提出要請に応じてネ。」という事のようだけど、じゃあどのくらい昔のログを出したらいいのかというと特に触れられていない。
 

外部サイト参考:「プロバイダー責任(逃れ)法可決 」 にあるように、そもそもログの取得が義務で無いため、ログが無ければ無いでよいという解釈になる。
なんでそんな事に?と思うかも知れないが、結局色々しがらみがあるんだろう。
 
 
 


不正アクセス行為の禁止等に関する法律(不正アクセス禁止法)にも期間の指定は無いが…


関連サイトなど。

 

肝心の警察庁案が見当たらなかったが、当時についての記事1当時についての記事2 から、警察丁案ではこちらの法律で 90日間又は30日間が義務付けられそうだった という事が分かった。
 

じゃあコレでいいじゃんという事で。
不正アクセスやら何やらで、当局に提出を求められる可能性があるログの類は、迷ったら3ヶ月(90日)を目安に運用すればOKだ。
(Apache・IIS等のWEBサーバアクセスログ、SMTP・POP3のメールログ、その他ログイン履歴などetc...)
 
 

そうそう、サーバ貸してる場合は、ユーザさんとはちゃんと取り決めを交わしてから消してね。
 
 

続きを書いたのでそっちもよろしく。
続・アクセスログの保存期間は3ヶ月を目安にすればいいんじゃないか

2008年10月24日金曜日

自分のtcsh用の.cshrcを書いておく@solaris10

Solaris10を使うのに、慣れているといってもbashを使うのはなんだか嫌な感じがしたので tcsh を使うぞ。シェルスクリプトはさすがに sh か bash でやりそうだが。
 

bash でよく使うのはカーソルキーでのヒストリとTAB補完。
カーソルキーのヒストリは tcsh に標準であるので、TABでのファイル名・コマンド名補完ができりゃOK。
 

とりあえずマイ「.cshrc」を作ってWEBに補完する、ぼちぼち追加していこう。
umask 022
set path=($path /usr/sfw/bin /usr/ccs/bin/ /usr/ucb /opt/csw/bin /opt/csw/sbin)
set prompt = '[%n@%m %c2]\$'
set autolist
set color
 
 
setenv PAGER less

 

ちなみにデフォルトのシェルは "passwd -e" で指定する。
このままコピペすると1行目のシングルクォーテーションが全角になる。
あと、通ってるパスが少ないなぁ。
 
 

色々追加していくうちに、もうBashでいい気がしてくるがそこは気づかないフリで。


・プロンプト修正:c2にした
・path 追加、skelよりumask追加
・pager変更
・path 追加

2008年10月23日木曜日

Filemonでファイルアクセスの調査。アプリのトラブルにも応用できる@Windows

Windows を作っている Microsoft という会社さんは、自分とこのOSを使い勝手のよいものにするため沢山有用なツールを配っている。
 

ここ→Sysinternals Utilities Index に行けばそれらのツールが紹介されており、ダウンロードもできる。
今回はその中から Filemon を使ったトラブルシューティングをとても簡単に紹介。
 
 

[caption id="attachment_1011" align="alignnone" width="300" caption="画像:FIlemon でファイルアクセスの様子をキャッチ"]画像:FIlemon でファイルアクセスの様子をキャッチ[/caption]
 

いきなりだけど、上の画像はFilemonを起動して失敗系のみログをとる設定にして放置、その後に自作のアプリケーションがアクセス拒否でこけたところをキャプチャーした様子だ。
隠しているが、アプリを起動した実際のユーザ名と、アクセスできなかったファイル名がばっちり分かる。アクセス権をつければ動くに違いない。
 

filemon はこのようにファイルシステムへのアクセスを任意のフィルタで記録してくれる代物だ。
アプリがこける理由、ファイルが無いとかアクセス権が無いとかは調査に filemon を使えばよい。
 

他のツールも気が向いたら画像つけて紹介したい。

solarisのデバイス管理_ブロックデバイスHDD編

Solaris10を触っていて面白いと思った点がいっぱい。
 

例えばハードディスクの情報を見ようと、formatコマンドを叩く。
# format
Searching for disks...done
 
 
AVAILABLE DISK SELECTIONS:
0. c1t0d0 <default cyl 2085 alt 2 hd 255 sec 63>
/pci@0,0/pci8086,2829@d/disk@0,0
1. c1t1d0 <ata -VBOX HARDDISK-1.0-15.40GB>
/pci@0,0/pci8086,2829@d/disk@1,0




VirtualBoxで仮想的に2台繋いだハードディスクはそれぞれ c1t0d0 c1t1d0 という名前で管理されている。
 
ついでに df コマンド
# df
/ (/dev/dsk/c1t0d0s0) …

/export/home (/dev/dsk/c1t0d0s7) …


マウント済み領域は c1t0d0s0、c1t0d0s7 など出てきた。一般的なLinuxで言うところの hda1 とか sda1 とかに相当するんだけど、長い。
 
 

なんでこんなに長いんだろうと思ってデバイス管理のドキュメントを見てみる。
c1t0d0s7 の内訳は…

















c1論理コントローラ番号
t0物理バスターゲット番号
d0ドライブ番号
s7スライス番号またはパーティション番号(pn)

 

合理性以外が全く考慮されていない ということが分かった。solaris興味深い。

2008年10月22日水曜日

solaris10を触る

SunのSolaris10を触ることになった。
おかげでUNIXカテゴリを追加することにした、最初から*nix にでもしておけばよかったかもしれない。
 

公式マニュアルの出来がものすごい(日本語ドキュメントリンク)ので何かと窮する事は無いけど、最近Linuxに慣れ親しんでいた為、何ごとにも苦労する。FreeBSDとも違うし。。
 

shutdown コマンド の書式で困ったり、サービスの登録や再起動が分からなくてマニュアル引いたり、基本の運用管理を一通り把握するのに一苦労。
 

そんな所で、とりあえず「Solaris10初めました」的な状態で参考になりそうな管理系情報にについてまとまっているサイトがあったのでメモ。

 

まあ、Solaris10巻理系を自分のところで簡単にまとめようかと思ったら、すでにあったので一安心。ということなんですけど。
2年近く更新が無いので中の人は元気なのかといらん心配をしてみる。
 
 

公式マニュアルで、どのバージョンを見たらよいのか最初分からなかったが、Solarisの版数書式はどうやら「Solaris 10 リリース月/リリース年」と書くみたい。
「Solaris 10 5/8」 なら2008年5月にリリースしたバージョンのSolaris10、これが今のところ最新のようだ。

2008年10月17日金曜日

プロセス毎の環境変数を参照する

メモエントリ
 

Linuxサーバで、動作中のプロセスが独自に使っている環境変数などが調べたくなった。
proc 以下に書いてあるらしいので参照する。
/proc/{プロセスID}/environ
 

参考としてpostfix の master を調べてみた。
# cat /proc/6348/environ | tr "\000" "\n"
MAIL_CONFIG=/etc/postfix
sample_directory=/usr/share/doc/postfix-2.3.3/samples
OLDPWD=/etc/postfix
setgid_group=postdrop
sendmail_path=/usr/sbin/sendmail.postfix
mailq_path=/usr/bin/mailq.postfix
manpage_directory=/usr/share/man
readme_directory=/usr/share/doc/postfix-2.3.3/README_FILES
newaliases_path=/usr/bin/newaliases.postfix
PATH=/bin:/usr/bin:/sbin:/usr/sbin
PWD=/var/spool/postfix
queue_directory=/var/spool/postfix
LANG=C
mail_owner=postfix
daemon_directory=/usr/libexec/postfix
SHLVL=1
config_directory=/etc/postfix
MAIL_LOGTAG=postfix
html_directory=no
command_directory=/usr/sbin
_=/usr/libexec/postfix/master


ファイルの中身はnull文字で区切られているらしいのでtrコマンド で「NULL=\000」を「改行=\n」に置換して表示するとよい模様。
参考にしたページがあるんだけど、コメント投稿欄がビミョーだったのでリンクしない。
 

いろんな 環境変数 あるんだなー。という感じだ。
元々はプロセスに LOCALDOMAIN 環境変数が渡されて無いかの調査だったので、コレでOKかな。
 

procのmanページも参考にされたし。

2008年10月16日木曜日

日経NETWORKの「ネットワーク検定2008」をやってみた

先日、日経NETWORK2008年10月号の企画、「ネットワーク検定2008」と言うのがあったので、WEBで回答してみた。
 

先ほど採点結果がメールできたので発表。
ちなみに問題と回答はこちら。「ネットワーク検定2008」 全問題と解答・解説
 
 

私の受験結果はこちら↓
■あなたの得点と順位
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  あなたの総合得点  16点/20点中 (平均:11.4点)
  あなたの総合順位  89位/2707人中
  ─────────────────────────────────
   あなたの「ネットワークを構築する力」
    4点 (平均:2.2点/4点中)
    
   あなたの「トラブルを解決する力」
    4点 (平均:1.6点/4点中)
    
   あなたの「ネットワークを管理する力」
    4点 (平均:2.6点/4点中)
    
   あなたの「ネットワーク機器を選択する力」
    1点 (平均:2.0点/4点中)
    
   あなたの「セキュリティ対策をする力」
    3点 (平均:3.0点/4点中)
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━


(ノ∀`) アチャー
最近ちゃんと機器を触ってないのがバレバレだな。俺仕事でネットワークやってんだから満点じゃなきゃダメだろ。
 

WEB表彰状はもらえたので、まあいいか。
[caption id="attachment_1001" align="alignnone" width="300" caption="画像:WEBで表彰状"]画像:WEBで表彰状[/caption]
一応悪用されないように署名っぽい事をしておく。

2008年10月10日金曜日

env コマンドで一時的に環境変数を差し替える

自分用メモエントリ
 

次に実行するコマンドだけ特別な環境変数で実行したい場合 env コマンドを使う。
 
 

普通に date を叩くと英語という環境で
# date
Fri Oct 10 12:06:24 JST 2008

 

日本語にしたければ LANGを書き換えて渡す、直後にちゃんと元に戻っている
# env LANG="ja_JP.UTF-8" date
2008年 10月 10日 金曜日 12:07:44 JST
 
# date
Fri Oct 10 12:08:01 JST 2008

 

複数指定はスペースで区切ればOK、ついでにいうと後のほうが優先
# env LANG="ja_JP.UTF-8" LANG="en_US.UTF-8" date
Fri Oct 10 12:09:24 JST 2008

 
 
 

注意、下記のような使いかたはできない。
# env LANG="ja_JP.UTF-8" echo $LANG
en_US.UTF-8

30kのJpegをBase64エンコードしました、さてお幾ら?@テクネ過去問

テクニカルエンジニア(ネットワーク)平成18年過去問午前を見ていた。もちろんスライスした参考書で。


30k バイトの JPEG ファイルを電子メールに添付するとき、大体どのくらいのサイズになるでしょう。添付ファイルのエンコードは MIME Base64 が使われますよ。


という問題があり、これってそのまま以前の記事、「Base64符号化で簡単な組み合わせを編み出す」の内容が活きてくるじゃないと思って驚いた。サイズは 4/3 になる。
 

ネタ重視のエントリも事前調査・裏づけを伴うものは役に立つ事もあるのだなあ。

2008年10月9日木曜日

マウス嫌いシリーズ(2)_「ALTキーショートカット」@Windows

マウス触るの面倒くさいので何でもキーボード入力でやってしまいたいというシリーズ物、2つ目。マウスなしでやるほうが早いことも多いし、にわかに玄人っぽい。
内容は社内向き、客先でさりげなくやるとハッタリが効いてよい。
 
前作:マウス嫌いシリーズ(1)_「ALT+スペース」@Windowsも宜しく。
 
 

ALTキーショートカット


OSインストール時などに「次へ(N)」 とか、「Next」 とかのボタンがあります。
このときのカッコやらアンダーバーは一体なんぞやと思う人はご丁寧にマウスでボタンを押してることだろう。
 
Next」 って書いてあるボタンは、「ALT + N」 でもこのボタンが押せますよーという目印、というかむしろそうしてくれというボタン側からのアピールです。
 
 
ということでもう言いたいこと終了と言えなくもないですが、折角なのでALTキーショートカットを使ったオペレーションの例をあげてみます。
大量のPCで同じ設定をする時、特にノートPCが相手だと能率が恐ろしいほど上がるのでお勧め。
 
 

仮想メモリの設定をマウスに触らずに変更してみる


仮想メモリのサイズを固定するというオペレーションをします。
 

まずは「Windowsキー + Pause」でシステムプロパティを一発出し。この後はマウス触っちゃ駄目
[caption id="attachment_988" align="alignnone" width="300" caption="画像:システムプロパティ"]画像:システムプロパティ[/caption]
さっそくショートカットの「ALT+A」で詳細設定に入る。
 


[caption id="attachment_989" align="alignnone" width="476" caption="画像:システムのプロパティ2"]画像:システムのプロパティ2[/caption]
「Ctrl + TAB」でタブを移動できる、各ボタンは見た目のとおり「ALT + 対応キー」で一発でメニューに入ることができる。
 
 

[caption id="attachment_990" align="alignnone" width="425" caption="画像:パフォーマンスオプション1"]画像:パフォーマンスオプション1[/caption]
「Ctrl + TAB」でタブを移動すればいいだけだが、ついでに言うとタブの名前にフォーカスがあっていればカーソルキー(矢印キー)で左右のタブに動ける
 
 

[caption id="attachment_991" align="alignnone" width="425" caption="画像:パフォーマンスオプション2"]画像:パフォーマンスオプション2[/caption]
ここも特にないが、あえて言うとESCキーで色々となかったことにできる。
 
 

[caption id="attachment_992" align="alignnone" width="400" caption="画像:仮想メモリ1"]画像:仮想メモリ1[/caption]
「ALT +A」 を使ってチェックボックスのチェックを ON/OFF しまくれる。
 
 

[caption id="attachment_993" align="alignnone" width="400" caption="画像:仮想メモリ2"]画像:仮想メモリ2[/caption]
ALTショートカットでどんどんフォーカスを飛ばして設定する。
今更だがTABキーで次の項目に移れるので利用したい。
最後はTABキーでOKまでフォーカスを持って行ってEnter or Space キー で完了。
 
設定後に残ったウインドウは…
「ALT + F4」、「Ctrl + wキー」、「ALT + Space →cキー」
どれも共通してウインドウを閉じるという動作、「Ctrl + wキー」は使いやすい。
 
 

やっておいて何だが、唯一引っかかるのがOKボタン、いろんな局面で「Ctrl+TAB」の連打が必要。
OKのいい押しかたってないんだろうか。

2008年10月8日水曜日

通勤中に参考書を読む、裁って3つの冴えたやり方

通勤時間は本を読む為にあると思っていい、少なくとも私はそう。そりゃあケータイいじってる日も結構あるけど。
 
 

資格試験だなぁとか思うと参考書を読む。
[caption id="attachment_984" align="alignnone" width="320" caption="写真:参考書_正面"]写真:参考書_正面[/caption]
そうそう、次はテクネだ、テクニカル2つ目をと思って。
しかし…
 

[caption id="attachment_985" align="alignnone" width="240" caption="写真:参考書_背表紙"]写真:参考書_背表紙[/caption]
太いよ厚いよ! 重たくて電車で読めないよ!
こんなの持ち歩くのも面倒だよ…
 
 
 
 
 

なので。↓ こうする。

[caption id="attachment_986" align="alignnone" width="320" caption="写真;参考書_3枚おろし"]写真;参考書_3枚おろし[/caption]

[caption id="attachment_982" align="alignnone" width="240" caption="写真:3冊の本"]写真:3冊の本[/caption]
 

写真で分かるかな?
「参考書をカッターでちょん切って、それぞれブックカバーをつける。」
 

重たい参考書も、裁断してしまうことでとても持ち運びやすい本に変身。
真ん中部分は100円ショップで買ったビニールのブックカバーを使っている、表紙・裏表紙の厚紙がないので強度を補ってやらないとボロボロになってしまう。
 

後から参考にすることの多い専門書の類は裁断するともったいないが、資格試験にむけた参考書などはどんどんぶった切ればよいと思う。
ちぎって喰らう位の気合で、頭に突っ込む事を最優先。

2008年10月7日火曜日

Base64符号化で簡単な組み合わせを編み出す

頭に結論を書いてしまうと、一番簡単なのは
UUU(平文で3文字) ⇔ VVVV(Base64で4文字)
だと思うんです。もちろん「UUUUUU」 ⇔ 「VVVVVV」 もあり。
※追記:「DDD」⇔「RERE」 も覚えやすい。
 
 

Base64への道のり


ちょっとしたテストをTelnetでしたいときに、Base64エンコードが必要なケースがある。そんなときにツールやPerlを呼ばなくても簡単にできたらよいなと思って仕組みを調べてみた。
    平文はこのようなプロセスを経てBase64文字列になる
  1. 各文字をASCIIコードに変換する

  2. 得たASCIIコードを2進数(8ビット)に変換して並べる

  3. 並んだビット文字列を6桁(6ビット)ずつ区切る、最後足りない分は0をつける

  4. 6ビットの文字列をBase64文字列変換表を参考にBase64文字列に変換する、これは一応4文字づつ

  5. できた文字列が4の倍数に満たない場合は=(イコール)をパディング、符号化完了


 

Base64変換について、普通はperl一行野郎などで変換してもらう。
$ perl -MMIME::Base64 -e "print &MIME::Base64::encode_base64(hogehoge);"
encode_base64関数でhogehogeを変換して表示する。自分用メモ

 

最小公倍数の24ビットを軸にする


変換の仕組を調べて、暗算するには相応の努力が必要だということが分かったので楽な方法を考えることにした。。
 
「ASCII = 8ビット」、「Base64 = 6ビット」 ということは公倍数の24ビットの所で丁度キリがよくなる。
つまり平文3文字をBase64で符号化すると4文字になり、その組み合わせは1対1と言うことになるので、Base64変換表からよさそうなのを探す。
 
「010101 = V」
 
これならどこで切っても同じになる、これがよさそう。
 
 

変換して確かめる


さて、Base64なので4文字並べて「VVVV
これをそれぞれ6ビットに変換して「010101 010101 010101 010101」
8ビットに繋ぎかえて「01010101 01010101 01010101」
ASCIIに変換すると「UUU
 
 

3文字単位ならいくら並べてもOK、たまに使い道があるかもしれない。他にも簡単な組み合わせがあったら是非教えて欲しいですね。
 
 

まとめ


結局、Basic認証ではコロンがいるし、メールアカウントではアットマークが必要なことが多い、それがネックだ。
一応3文字のユニットとして扱えば覚えておけないこともないかも知れないので書いておこう。
 

U:U = VTpV
U@U = VUBV
 

よし、メールは複数ドメイン環境では無理だな。

2008年10月3日金曜日

telnet があれば、サーバ間でファイルの転送ができる(後編)

前編からの続き
telnet があれば何でもできる! と言ってみたかっただけですが。
 

ということで、telnet2本使いによるFTPファイル転送を実際にやってみる。
実験にはIISのFTPサーバを使い、サーバ間のファイル転送ができるかを確かめた。
 
 

突然つまづく、最近はデフォルトセキュア(寄り)なのか…


リハーサルとして一通り試していたら、PORTコマンドの所でどうしてもつまづく。
パケットキャプチャしたら、PORT発行後もIPによる通信すら しに行っていない様子。IISの設定を見直すためにMSへ。

 
なるほどそうか。最近はそんなことやらないからか、単に脆弱性の脅威からか、デフォルト設定ではできない。レジストリをいじってFTPサービスを再起動しないといけなかった。
レジストリ変更箇所は下記。









ファイル受信側
(PASV)
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSFTPSVC\Parameters\EnablePasvConnFrom3rdIP=1
※第3者からのデータコネクションを許可する
ファイル送信側
(PORT)
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSFTPSVC\Parameters\EnableDataConnTo3rdIP=1
※第3者あてへのPORTコネクション接続要求を受け付ける。

これで問題はなかろう、よそへのPORTコマンドもちゃんと受け付けてくれる。
 
 

そして実験へ


test.txtと言うファイルを転送してみる。



































ファイル受信側ファイル送信側メモ
USER hogehoge
PASS *****
 
230
USER hogehoge
PASS *****
 
230
ユーザ認証してログインOK
PASV
 
227 Entering Passive Mode (xxx,xxx,xxx,xxx,xx,xx).
 待ち受けポートを決定する。
xxxはIPアドレスと待ち受けポート
 PORT xxx,xxx,xxx,xxx,xx,xx
 
200 PORT command successful.
データ転送用のセッションが確立
stor test.txt
 
125 Data connection already open; Transfer starting.
 STORでローカルに空ファイル"test.txt"作成、
データの受け入れ準備
 
125 Data connection already open; Transfer starting.
226 Transfer complete.
retr test.txt
 
150 Opening ASCII mode data connection for test.txt(23 bytes).
226 Transfer complete.

RETRで "test.txt"ファイルを転送、
受信側は待ち構えていた"test.txt" にASCIIデータとしてデータを送り込んで完了

 

OK、うまく行った。
 
 

次はどうしよう。
定番の「telnet があれば メールの送信ができる」や、「telnet があれば HTTPコンテンツを受け取れる」、あたりでやっておきたい。

2008年10月2日木曜日

telnet があれば、サーバ間でファイルの転送ができる(前編)

telnet ですかー!?
と、分からないかもしれないネタはこの辺にして、「telnet があれば、サーバ間でファイルの転送ができる(前編)」と題して FTP (File Transfer Protocol) の仕様を確認するコラム。
 
 

前置き、PASVコマンド


FTPというと、通常のPORTコマンドを使うやり取りを初めて理解したときは驚いた。
「PORTコマンドの発行を受け付けたサーバは、接続元ポートTCP/20クライアントにむけてTCPセッションを張りに来る。
そうやって接続されたセッションがデータ転送ポートとして、ファイルリストのテキストデータや、バイナリデータの転送に使用される。
 

嘘やん、そんなのこちらポート空けてないのにどうすんの?って思う節があるかもしれないが、最近のファイアウォールやルータはその辺をヨロシクやってくれて、意識しなくてよいようになっている。
しかしそうではないルータの下にいるFTPクライアントの為に、PASVを使うという手順がある。
 
 

FTPサーバがPASVコマンドを受け付けると、任意のポートでLISTEN のTCP状態を取り、クライアントに通知します。
 
    [PASV] → [227 Entering Passive Mode (192,168,10,15,239,11)]
 
カッコ内がカンマ区切りで、IPアドレス・待ち受けポートです。このメッセージからは「IPアドレス:192.168.10.15、ポート:61195」 でLISTENしますよ、と言うこと。ちなみに 61195 は 「239 * 256 + 11」 で計算します。
 
 

PASVに割りこんだらどうなるの?


PASVでポートの通知を受けたFTPのクライアントは、当然LISTENしているポートにTCPセッションを張りに行き、データはこのポートから送信されます。
 
と、ここでPASVで教えてもらったポートに telnet で接続するとどうなるか試した(※実験はPASVも telnet で発行しました。)ら、ちゃんとセッションが張れる。
そのまま最初に接続したコマンド用のセッションで、LISTなど発行すればPASVで張ったほうのセッションからリストデータが、RETRをすればファイルの中身が流れてくるといった具合。
 

基本的に接続元の制限などない模様なので、これはこれで危なっかしいとも思えるが、もうちょっと突っ込んで考えてみる。
 
 

PORT と PASV の組み合わせで、と思ってRFCを参照する


使わないから意識していなかったが、FTPはサーバ同士のデータ転送という役割を与えられたプロトコルでもある、と言うのを形だけ知っていた。
上の割り込み実験から、「PASV で待ちうけ、PORTで接続」 とすればサーバ間の転送ができるんじゃないかと思って、RFCを読んでみた。
   RFC:959(原文)(日本語訳)
 

すると、「5.2. CONNECTIONS」 の所にしっかり書いてあった、今でこそ一般的ではないやり方だけど、RFCでは一番シンプルなFTPの使い方としてサーバ間のデータ転送が紹介されている方法だった。
 
 


telnet2本張って サーバ間のデータ転送


コントロールはクライアントから、データの転送は2台のサーバ間で。
サーバA(SV-A)からサーバB(SV-B)にファイルを転送したい場合、ざっとこういう手順で達成できるはず。図が崩れてたらごめんなさい、Firefoxだと一応きれい。
 

















┌──────┐        ┌──────┐
│ SV-A │ │ SV-B │
└──────┘ └──────┘
↑ ↑
│ │
│telnet 21 │telnet 21
│ ┌──────┐ │
└←│ Ctrl │→┘
└──────┘
コントロールするクライアントから、両方にtelnet でFTPログイン
                        LISTEN
┌──────┐ ┌──────┐
│ SV-A │ ★ SV-B │
└──────┘ └──────┘
│ ↑
│ │
│ │PASV
│ ┌──────┐ │
└─│ Ctrl │→┘
└──────┘
SV-B にPASVコマンドを発行、ポートをLISTENさせる
                        LISTEN
┌──────┐ ┌──────┐
│ SV-A →───→★ SV-B │
└──────┘ └──────┘
↑ │
│ │
│PORT(SV-B) │
│ ┌──────┐ │
└←│ Ctrl │─┘
└──────┘
SV-Bが待ち受け中なので、SV-AへPORTコマンドを送る。送信内容はSV-BのIPアドレスとポート
すると、SV-A と SV-B の間でFTPデータ用のセッションが確立するはず
┌──────┐→data→┌──────┐
│ SV-A ====== SV-B │
└──────┘ └──────┘
↑ ↑
│ │
│RETR(File) │STOR(File)
│ ┌──────┐ │
└←│ Ctrl │→┘
└──────┘
後編作成後に認識間違いを修正。図も修正。
初版ではここの解釈に嘘があった、STORで待ち構え、RETRで送るというオペレーションが必要ということだ。
 
(初版)データコネクションが確立したら、STORコマンドでファイルの転送が行えるはず。
RFCではSV-B側でRETRコマンドが必要とあったが、この辺がよく分からない。

 

さて、手元に実験できるサーバがないので今度試してみよう。
後編につづく

2008年10月1日水曜日

VirtualBox のVRDP接続を試してみる

サンマイクロシステムズ の VirtualBox という仮想化ソフトがありますが、これが マイクロソフト の リモートデスクトッププロトコル(RDP) が使えるということなので、試してみる。
 
 

VirtualBox 側で設定を行う


設定は仮想マシンごとにできます、ポートの重複に注意。
[caption id="attachment_967" align="alignnone" width="500" caption="画像:VRDPの設定画面"]画像:VRDPの設定画面[/caption]
 
デフォルトの "3389" ではWindowsの標準と被ってしまうので、この例では "13389" ポートを使用するようにセットアップ。VirtualBox側の設定はこれだけでOKでした。
 

リモートデスクトップクライアントから接続する


では適当なリモートデスクトップのクライアントから接続してみる、ここではVistaから。
例ではローカルホストだけど、他のIPからでも問題なかった。忘れないようにFireWallのポートもあけておく。
[caption id="attachment_968" align="alignnone" width="403" caption="画像:リモートデスクトップ起動"]画像:リモートデスクトップ起動[/caption]
まずはクライアントを起動して、
 
 

[caption id="attachment_969" align="alignnone" width="479" caption="画像:ローカルホスト宛にポートを指定して接続"]画像:ローカルホスト宛にポートを指定して接続[/caption]
接続先のIPアドレスにコロンで区切って、VirtualBox の VRDP待ち受けに設定したポートを指定。
 
 

[caption id="attachment_970" align="alignnone" width="300" caption="画像:VirtualBoxのBIOS画面"]画像:VirtualBoxのBIOS画面[/caption]
VirtualBox のBIOS画面にリモートデスクトップ接続しているのがわかるだろうか。
今回は認証をNullにしているのでユーザ名などは必要ない。
 
 

適当なOSを起動してみる


ということで手元の slax-ja を起動する。
[caption id="attachment_971" align="alignnone" width="300" caption="画像:slax起動直後"]画像:slax起動直後[/caption]
違和感バリバリの斬新な光景だ。タイトルバーの能天気な「リモート デスクトップ」がポイント高い。
 
 

[caption id="attachment_972" align="alignnone" width="300" caption="画像:Xを起動"]画像:Xを起動[/caption]
デフォルトのウインドウマネージャを起動してみる。さすがに自動で画面は伸長しないいけど、ちゃんとリモートデスクトップっぽい。
 
 
 

なかなか面白い機能だと思った。