第 11 回 (2004.07.02) -- ネットワーク越しのマシン利用

最終更新日 … $Date: 2004-07-09 20:43:16+09 $
Valid CSS! Valid XHTML 1.1!

コンピュータの本質の一つは相互接続性にあるという人がいるぐらい, ネットワークを介してコンピュータを上手に利用すると非常に様々なことができる.
そこで,今回はネットワークを介してマシンを操作することについて, その仕組みと方法について解説する.

ネットワークの仕組みの簡単な説明

ネットワークは結構複雑な仕組みからなるが, ユーザとしてはそんなに細かいことを知らなくても使えるようになっている. まず,ネットワークでコンピュータを使うときの一般的な呼称であるが, 下のようになっている.

■ ネットワーク越しにコンピュータを使用するときの関係図 ■
machine name when you operate on network ネットワーク上ではコンピュータは一般に「ホスト」と呼ばれる.

コンピュータを使用する者,つまり操作者(オペレータ)が直接接しているホストを 「ローカルホスト(local host)」と呼ぶ.
そして,操作者がネットワーク越しに遠隔操作するコンピュータを 「リモートホスト(remote host)」と呼ぶ.

そして,ネットワーク上で各ホストを区別するための具体的な「名前」として,次の二つの名前が使われる.

■ ネットワーク上でのホストの名前 ■
whats are IP address and hostname?
(我々が通常使っている TCP/IP による) ネットワーク上では各々のホスト(より正確にはネットワークインターフェイス) には二種類の名前がついている.
IP アドレス
32bit の数情報で表される名前(IP ver4 の場合). 具体的には,8bit ずつ 4つに区切って数字を用いて例の様に 172.18.36.119 などと書かれることが多い.
「インターネット」上では IP アドレスとネットワークインターフェイスは 1対1 対応でないといけない.
名前としてはこちらがより正式な名前扱いである.
ホスト名(hostname)
英数字で示されるいわゆる名称的な名前. こちらの方が人間には分かりやすいだろう.
DNS(Domain Name System) という, ネットワークを ドメインという階層で区別して, 必要に応じてその名前をホスト名に組み込むという仕組みを導入することにより, 「インターネット」上ではホスト名は一意になるようになっている. ただし,一つのネットワークインターフェイスに複数のホスト名がついていても良い.

例えば,大阪大学の top web server のホスト名を完全に記述すると, www.osaka-u.ac.jp となる. これは,jp ドメインの中に ac ドメインがあり,さらにその中に osaka-u ドメインがあり,さらにその中に www というホストがある, ということを意味している.

これは現実世界の住所表示と同じ仕組みである.
よって「適切な省略」や「同名の区別」などという柔軟な扱いが可能なのは直感的に理解できるだろう.
# 適切な省略とは,同じ区内にある住所なら区名を省略してもよい,などの行為を指す.
# 同名の区別とは,同じ「日本橋」という地名でも 「大阪市浪速区日本橋」と「東京都中央区日本橋」 とまで記述すれば区別がつく,というようなことを意味する.

となると,この IP アドレスと ホスト名の対応関係がきちんとデータとして管理され, かつ,ユーザから利用できないとネットワークはうまく機能しないことになる.
そこで,この二つの名前の対応関係のデータがどうやって管理されているかについて簡単に述べておく.

この二つの名前の対応関係は,基本的には「表」としてデータ化され, 次のような管理体制を上手に組み合わせて管理している.

例えば,大阪大学情報教育システムでは上の三つの仕組み全てを組み合わせてホスト名を管理している.
# おかげで学生に短い時間内で仕組みを説明するのはほぼ無理なのだが(ToT;)

ネットワークの情報, 状況

ネットワークの情報を得るための unix のコマンドは非常に多い. しかし,security に関わる問題から,その多くは super user でないと実行できないようになっていたり, 実装されていなかったりする.
阪大情教システムも同様であり,多くのコマンドは一般ユーザには使えないように設定されている. しかたないので,ここではごく簡単に, あまり問題のない(^-^;)コマンドを解説するだけにしておく.

hostname
現在のホスト名の表示,設定 … のはずなのだが,阪大情教システムでは NIS を用いて全体を外から隠蔽している関係上,FQDN (インターネット側から見た完全な名前) を得ることはできない.
# hostname -a とするとそれ「っぽい」ものは見えるが.

nslookup
ネームサーバに情報を問い合わせる … 非常に多機能かつ便利なので, ネットワークの仕組みを知るにはもってこいのコマンドなのだが, 阪大情教システムではこのコマンドは実装されていないようだ.
ms-windows でも 2000 以降のバージョンにはこのコマンドがあるので, 自宅の PC などで試してみると面白いだろう.

ping
正式には「ICMP ECHO_REQUEST パケットをネットワーク上のホストに送る」 というコマンドだが,何を言っているかというと, リモートホストに「生きてますか?」と問い合わせるコマンドである.
# ping という名前は潜水艦乗りなどが使う ping という言葉から来ているのだろう.
# ms-windows にも実装されているので試してみると良い.

返答が返ってくれば「リモートホストが対応できる状況であり,かつ, ネットワークが繋がっている」ということがわかる.
逆に,返答が返ってこない場合は次のいずれかである. 昔は最後のケースはほとんどなかったが, セキュリティ対策として最近はこうしたホストも増えているようだ. ただし,こうしてしまうと遠隔地からホストの生死を確認するもっとも素朴な方法を封じてしまうことになり, 管理面からは痛い.

traceroute, tracepath
リモートホストまで,ネットワークがどう繋がっているのかを調べるためのコマンド.
# ms-windows にも tracert という名前で実装されている.
traceroute はセキュリティのためか使えないようになっているが, tracepathは阪大情教システムでも使えるので試してみよ. ただし,NIS とのからみで「外」へは出ていけないが…

rup, ruptime
ネットワークに接続されているホストの現在の状況を報告する.
阪大情教システムでは ruptimerup も実装されていないようだ.
rusers, rwho
ネットワークに接続されているホストにログインしているユーザを調べる.
阪大情教システムでは rwhorusers も実装されていないようだ.
finger
ユーザ情報を調査する. ただし,これもセキュリティ対策のためにその機能が大幅に制限されているか, 実装されていないケースが多い. 阪大情教システムでは実装されているが使えなくなっている.
talk, ntalk
他のユーザと筆談を行う. 便利なコマンドだが,初心者をからかうのに非常に適しているためもあって(^-^;), 実装されていないことが多い.
阪大情教システムでも実装されていないようだ.

実習

上記コマンドについて,動くものだけでも試してみよ.
また,利用できるとしたらどう便利なのか, オンラインマニュアルを読んで考えよ.

ネットワークを流れるデータのセキュリティ

現在,われわれが使用しているネットワークは基本的にデータを「生のまま」 流す設計になっている. これはどういうことかというと,ネットワークのデータを見ることができる人には情報が筒抜けである, ということであり,セキュリティ上大きな問題である.
# 誰でも盗聴できる状態の電話回線,と例えれば分かりやすいか.

そこで,ネットワークの通信全体や流れるデータを暗号化してセキュリティを高めよう, という技術が次第に発展してきている. 近年ではそれらを適切に組み合わせて利用することで比較的安全な通信を行うことができるので, それらについて簡単に全体像を示しておこう.
# ネットワークの次世代規格(既に利用可能)である IPv6 (IP version 6) は基本仕様の段階でセキュリティを確保した規格になっている(IPsec の標準採用). よって,しばらくすれば(数年後?), ネットワークのセキュリティに関しての苦労は少しだけ少なくなるだろう.

現状ではネットワークを流れる通信のセキュリティを確保するには, 暗号化を施すというのが一般的な方法である. で,どういう部分を暗号化するかによって仕組みが異なってくる. 大ざっぱには以下のように理解すれば良いだろう.

■ ネットワークを流れるデータのセキュリティ確保には… ■
IP security
上の図のように,
  • A: 通信経路
  • B: 致命的なデータ部分(パスワードなど)
  • C: 一般データ
と暗号化する部分を分類すると, セキュリティ確保のための暗号化の方法は大体は次のように分類できる.
A B C 備考
暗号化 経路全体が暗号化されるので応用がきく反面, 大量のデータを暗号化するための計算コストが高くつくため, PDA などの小さなシステムには導入しにくい.
今回の講義で説明する s** というコマンドはこれに属する.
暗号化 致命的なデータだけを暗号化するので比較的簡単に実装できるが, 一般データは保護できない.
APOP と呼ばれるメール取得プロトコルなどはこれである. パスワードは保護されるが,転送されるメールの中身はそのまま見えてしまうので, セキュリティは完全とは言えない.
暗号化 通信経路を全く信用せず, データだけを(事前に)暗号化しておく方法などがこれにあたる.
通信だけでなく,保持しているファイルの暗号化などと共通で使えるシステムが多いので, ある意味もっとも安全な方法だろう. 例としては PGP などが有名.
セキュリティを全く考慮しない通信. 現在のネットワーク上の通信はデフォルトはこの状態なので, ユーザは意識してセキュリティを確保しなくてはならない.
その他.
上の方法を組み合わせたもの. セキュリティを高めるためにいくつかの方法を組み合わせるのはけして悪い方法ではない.

リモートホストの操作

これよりリモートホストの操作について具体的に説明を行う.
ネットワークを通じてリモートホストの操作を行うのは, unix をはじめとする「きちんとした OS」の醍醐味であり, よくよく学習して習熟しておくのが良い.
また,初学者が忘れがちな注意点として, リモートホストを操作する「権限」を持っていないと リモートホストを操作できないということを挙げておく.
# 使える権限のないリモートホストを使おうとしてあがくと, 「クラック(crack)」と見なされて黒い手帳を持った方々の訪問を受ける可能性があるので, そういうことをしないようにすること(^-^).

コマンド操作

まずは,リモートホスト上で「指定したコマンドを実行させる」機能について示そう. 後で示すリモートホストへのログインに比べると比較的単純なことしかできないが, 非対話的であるため,単純で決まった操作やシェルスクリプトなどにはこちらの方が向いている.

rsh
リモートホスト上でコマンドを実行する. もっとも簡単な使い方は, rsh リモートホスト名 コマンド である(詳しくは man rsh で調べよ).
ただし,リモートホストのホームディレクトリに .rhosts というファイルを用意し, 遠隔操作を許可するローカルホスト名(とユーザ名…省略可)を書き込んでおかないと rsh は動作しない. つまり, .rhosts に書いておいたホストからは rsh による遠隔操作が可能になるのである.

実習
まず,ホームディレクトリに .rhosts ファイルを作成し, 今ログインしているホスト名を書き込む. それから友人が今ログインしているホスト名を聞き, rsh そのホスト名 ps としてみよ.
その結果と,単に ps とした結果を比較して何が起っているか理解せよ.

# 本来は「リモートホスト」の .rhosts ファイルを編集する必要があるが, 阪大情教システムではどのマシンから操作してもホームディレクトリ以下の内容は同じなため, どのホストの .rhosts か,を区別する必要がなくなっている.


rsh はかなり古くからあるコマンドで使い勝手はなかなか良い.
リモートホストに実行させたコマンドの結果をリダイレクトすることもできる.
例えば, rsh rigaku107 "ps -axu" | grep bash とすれば,rigaku107 というホストで bash が起動されているかどうかがチェックできる.

注意
rsh には というセキュリティ上の問題点がある.
そのため,特に理由がない限り,近年は rsh を使用せずに,代わりに後述の ssh を使うことが強く推奨されている.
# よって,上の実習が終わったら .rhosts ファイルは削除しておいた方が良い.

ssh
リモートホスト上でコマンドを実行する … ただし, ネットワーク上を伝わる情報は暗号化されており, 盗聴・解読される恐れはかなり低い.
使い方は rsh とほぼ同じであるが, .rhosts の設定をしなくても使える点と,より高度な認証方法が使える点が異なる.

実習
友人が今ログインしているホスト名を聞き, ssh そのホスト名 "ps -axu" | grep bash としてみよ(パスワードを聞かれるので,適切に答えよ).
その結果と,単に ps -axu | grep bash とした結果を比較して何が起っているか理解せよ.

ssh の持つより高度な認証方法は公開鍵暗号というシステムであるが, この説明は面倒なので省略する(講義では時間があれば口頭で説明する). 詳しく知りたい者は ■ SSH のセッティング & 利用法 (SSH1) ■ のポインタなどを参考にして調べよ.

ログイン

telnet
リモートホストにログインする. もっとも簡単な使い方は, telnet リモートホスト名 である(詳しくは man telnet で調べよ).

実習
友人が今ログインしているホスト名を聞き, telnet そのホスト名 として,いろいろ操作してみよ.

注意
telnet には というセキュリティ上の問題点がある.
そのため,特に理由がない限り,近年は telnet を使用せずに,代わりに後述の ssh を使うことが強く推奨されている.

(備考) telnet はより正確には「telnet プロトコルを用いて他のホストと通信する」というコマンドであり, ログインするだけのものではない. 例えばリモートホストの接続 port 名を指定すれば,ログイン以外の接続も可能である. 時間があればこれについてもいくらか講義を行う.

rlogin
リモートホストにログインする. もっとも簡単な使い方は, rlogin リモートホスト名 である(詳しくは man rlogin で調べよ).
また,リモートホストのホームディレクトリに .rhosts というファイルを用意しておき, 遠隔操作を許可するローカルホスト名(とユーザ名…省略可)を書き込んでおくとログインの際にパスワードを要求されない. つまり, .rhosts に書いておいたホストからは無条件で rlogin によるログインが可能になるのである.
なお, 阪大教育用情報システムでは,rlogin による接続を受け付けないようになっているようである.

注意
rlogin には というセキュリティ上の問題点がある.
そのため,特に理由がない限り,近年は rlogin を使用せずに,代わりに後述の ssh を使うことが強く推奨されている.

ssh
リモートホストにログインする… ただし, ネットワーク上を伝わる情報は暗号化されており, 盗聴・解読される恐れはかなり低い.
使い方は telnet にかなり近いが, より高度な認証方法が使える点が異なる.

実習
友人が今ログインしているホスト名を聞き, ssh そのホスト名 としてログインし(パスワードを聞かれるので,適切に答えよ),いろいろ操作してみよ.


(備考) 上で見れば分かるように, ssh は使い方によって,「リモートホスト上でコマンドを実行する」機能も 「リモートホストにログインする」機能も使える. しかもネットワーク上を流れる情報が暗号化されていて安全である. というわけで,特に理由がない限り rsh, rlogin, telnet を使わずに, ssh を使うべきである.

ファイルの転送

rcp
ネットワーク上のファイルを転送する. もっとも簡単な使い方は, rcp リモートホストA:ファイルA リモートホストB:ファイルB であり,これにより リモートホストA のファイルA をリモートホストB のファイルB にコピーすることができる. ホスト名: を省略した場合は,ローカルホスト名: のことであると解釈される. より詳しくは man rcp で調べよ.
ただし,リモートホストのホームディレクトリに .rhosts というファイルを用意し, 遠隔操作を許可するローカルホスト名(とユーザ名…省略可)を書き込んでおかないと rcp は動作しない. つまり, .rhosts に書いておいたホストからのみ, rsh によるファイル転送が可能になるのである.

実習
次の手順で実習を行ってみよ.
  1. まず,ホームディレクトリに .rhosts ファイルを作成し, 今ログインしているホスト名を書き込む.
  2. ホームディレクトリに適当なディレクトリを新しく作り, そこに移動しておく.
    例えば,
    mkdir tmpNew
    cd tmpNew

    などで良いだろう.
  3. 友人が今ログインしているホスト名を聞き, rcp そのホスト名:.bashrc . などとしてみて,何が起るか観察,把握せよ.
  4. 今作った適当なディレクトリを削除しておく.
    例えば,
    cd ..
    rmdir tmpNew

    などで良いだろう.
  5. 安全のため,ホームディレクトリの .rhosts ファイルを削除しておく.


注意
rcp には というセキュリティ上の問題点がある.
そのため,特に理由がない限り,近年は rcp を使用せずに,代わりに後述の scp sftp を使うことが強く推奨されている.

ftp
ftp サーバデーモンとよばれるソフトウェアを動かしているホスト(これを ftp サーバと呼ぶ)に接続し,ファイル転送を行う. もっとも簡単な使い方は ftp リモートホスト名 である(詳しくは man ftp で調べよ).
ファイル転送といえばこのコマンドを使うことと同値, と言っても良いぐらい普及していたコマンドであるが, 後述するセキュリティ上の問題によって近年は ftp サーバ機能をそもそも使えないように設定しているホストが多くなった.
実際,阪大情教システムでは ftp サーバ機能を停めている.

注意
ftp には というセキュリティ上の問題点がある.
そのため,特に理由がない限り,近年は ftp を使用せずに,代わりに後述の scp sftp を使うことが強く推奨されている.

scp
ネットワーク上のファイルを転送する… ただし, ネットワーク上を伝わる情報は暗号化されており, 盗聴・解読される恐れはかなり低い.
使い方は rcp とほぼ同じであるが, .rhosts の設定をしなくても使える点と,より高度な認証方法が使える点が異なる.

実習
次の手順で実習を行ってみよ.
  1. ホームディレクトリに適当なディレクトリを新しく作り, そこに移動しておく.
    例えば,
    mkdir tmpNew
    cd tmpNew

    などで良いだろう.
  2. 友人が今ログインしているホスト名を聞き, scp そのホスト名:.bashrc . などとしてみて,何が起るか観察,把握せよ.
  3. 今作った適当なディレクトリを削除しておく.
    例えば,
    cd ..
    rmdir tmpNew

    などで良いだろう.


sftp
リモートホストとローカルホストの間のファイル転送を行う… ただし, ネットワーク上を伝わる情報は暗号化されており, 盗聴・解読される恐れはかなり低い.
使い方は高度な認証方法の使い方を除いて ftp とほぼ同じである.
もっとも簡単な使い方は sftp リモートホスト名 として接続してから, sftp プログラム中で次のようなコマンドを用いてファイルを転送するものである. (より詳しくは man sftp で調べよ)

■ sftp 中で使える主なコマンド ■
pwd 接続しているリモートホスト上で今いるディレクトリを表示する.
lpwd ローカルホスト上で今いるディレクトリを表示する.
cd ディレクトリ名 接続しているリモートホスト上でディレクトリを移動する.
lcd ディレクトリ名 ローカルホスト上でディレクトリを移動する.
ls 接続しているリモートホスト上でのディレクトリの中身を表示する.
lls ローカルホスト上でのディレクトリの中身を表示する.
get ファイル名 リモートホストのファイルをローカルホストに転送する.
put ファイル名 ローカルホストのファイルをリモートホストに転送する.
exit, quit 終了.


実習
次の手順で実習を行ってみよ.
  1. ホームディレクトリに適当なディレクトリを新しく作り, そこに移動しておく.
    例えば,
    mkdir tmpNew
    cd tmpNew

    などで良いだろう.
  2. 友人が今ログインしているホスト名を聞き, sftp そのホスト名 として,接続する.
  3. 上に示したコマンドを一通り試してみて, 使い方を把握する.
  4. 今作った適当なディレクトリを削除しておく.
    例えば,
    cd ..
    rmdir tmpNew

    などで良いだろう.


これまでの記述を読めば,通常はファイル転送には sftp を使うのが良いことが分かるだろう. しかし,いろいろな都合で sftp が実装されていないシステムも世の中には多い. そうした場合にも scp, ssh は実装されていることがあるので,そうした場合にはなるべくこれらのコマンドを用いるようにして, rcp, ftp などを使わないようにし,セキュリティ上の不安をなくしておこう.

(番外編) rsh, ssh を使ってのファイル転送
実は rsh, ssh とリダイレクトを組み合わせてファイルを転送することもできる… というか,大量のファイルを構造を保ったまま転送するときには昔からよく使われてきた 「裏技」である. unix らしいコマンドの使い方であるので,これを覚えておくとちょっとかっこいいだろう(^-^). 具体的には次の実習を見てみよ.

実習
次の手順で実習を行ってみよ.
  1. ホームディレクトリに適当なディレクトリを二つ新しく作る.
    例えば,
    mkdir tmpNew
    mkdir tmpNew2
    などで良いだろう.
  2. 新しくつくったディレクトリの片方にいくつかファイルを入れておく.
    例えば,
    cp .bash* tmpNew
    などで良いだろう.
  3. 新しくつくったもう一つのディレクトリに移動しておく.
    例えば,
    cd tmpNew2
    などで良いだろう.
  4. 友人が今ログインしているホスト名を聞き, ssh そのホスト名 "tar cpf - tmpNew" | tar xpvf - としてみよ. そして,何が起るか観察,理解,把握せよ.
  5. 今作った適当なディレクトリを削除しておく.
    例えば,
    cd ..
    rmdir tmpNew
    rmdir tmpNew2

    などで良いだろう.

レポート課題

以下に示された課題について

AppliedMath-Report-11

という題名をつけて e-mail にて教官宛にレポートとして提出せよ(教官のメールアドレスは授業中に口頭で伝える).
なお,レポートを e-mail の代わりに TeX で作成した書面にて提出してもよい.

課題内容

  1. 「クラック」と「ハック」の違いについて調べ,きちんと述べよ.
    # 「クラッカー」と「ハッカー」の違いでも良い.

  2. ファイル転送の(番外編)で示した ssh そのホスト名 "tar cpf - tmpNew" | tar xpvf - というコマンドでなぜファイルがまとまって転送されるのか,解説せよ.

  3. ssh の公開鍵暗号というシステムについて,その根本原理を調べ,簡単に解説せよ.

  4. ファイルや文字列そのものを暗号化するシステムについて調べ,簡単に解説せよ.