コンピュータの本質の一つは相互接続性にあるという人がいるぐらい,
ネットワークを介してコンピュータを上手に利用すると非常に様々なことができる.
そこで,今回はネットワークを介してマシンを操作することについて,
その仕組みと方法について解説する.
ネットワークは結構複雑な仕組みからなるが, ユーザとしてはそんなに細かいことを知らなくても使えるようになっている. まず,ネットワークでコンピュータを使うときの一般的な呼称であるが, 下のようになっている.
![]() |
ネットワーク上ではコンピュータは一般に「ホスト」と呼ばれる.
コンピュータを使用する者,つまり操作者(オペレータ)が直接接しているホストを 「ローカルホスト(local host)」と呼ぶ. そして,操作者がネットワーク越しに遠隔操作するコンピュータを 「リモートホスト(remote host)」と呼ぶ. |
そして,ネットワーク上で各ホストを区別するための具体的な「名前」として,次の二つの名前が使われる.
![]() |
(我々が通常使っている TCP/IP による)
ネットワーク上では各々のホスト(より正確にはネットワークインターフェイス)
には二種類の名前がついている.
|
となると,この IP アドレスと ホスト名の対応関係がきちんとデータとして管理され,
かつ,ユーザから利用できないとネットワークはうまく機能しないことになる.
そこで,この二つの名前の対応関係のデータがどうやって管理されているかについて簡単に述べておく.
この二つの名前の対応関係は,基本的には「表」としてデータ化され,
次のような管理体制を上手に組み合わせて管理している.
/etc/hosts
というファイルを見てみよ).
例えば,大阪大学情報教育システムでは上の三つの仕組み全てを組み合わせてホスト名を管理している.
# おかげで学生に短い時間内で仕組みを説明するのはほぼ無理なのだが(ToT;)
ネットワークの情報を得るための unix のコマンドは非常に多い.
しかし,security に関わる問題から,その多くは super user
でないと実行できないようになっていたり,
実装されていなかったりする.
阪大情教システムも同様であり,多くのコマンドは一般ユーザには使えないように設定されている.
しかたないので,ここではごく簡単に, あまり問題のない(^-^;)コマンドを解説するだけにしておく.
hostname -a
とするとそれ「っぽい」ものは見えるが.
tracert
という名前で実装されている.
traceroute
はセキュリティのためか使えないようになっているが,
tracepath
は阪大情教システムでも使えるので試してみよ.
ただし,NIS とのからみで「外」へは出ていけないが…
ruptime
も rup
も実装されていないようだ.
rwho
もrusers
も実装されていないようだ.
実習
上記コマンドについて,動くものだけでも試してみよ.
また,利用できるとしたらどう便利なのか,
オンラインマニュアルを読んで考えよ.
現在,われわれが使用しているネットワークは基本的にデータを「生のまま」
流す設計になっている.
これはどういうことかというと,ネットワークのデータを見ることができる人には情報が筒抜けである,
ということであり,セキュリティ上大きな問題である.
# 誰でも盗聴できる状態の電話回線,と例えれば分かりやすいか.
そこで,ネットワークの通信全体や流れるデータを暗号化してセキュリティを高めよう,
という技術が次第に発展してきている.
近年ではそれらを適切に組み合わせて利用することで比較的安全な通信を行うことができるので,
それらについて簡単に全体像を示しておこう.
# ネットワークの次世代規格(既に利用可能)である IPv6 (IP version 6)
は基本仕様の段階でセキュリティを確保した規格になっている(IPsec の標準採用).
よって,しばらくすれば(数年後?),
ネットワークのセキュリティに関しての苦労は少しだけ少なくなるだろう.
現状ではネットワークを流れる通信のセキュリティを確保するには,
暗号化を施すというのが一般的な方法である.
で,どういう部分を暗号化するかによって仕組みが異なってくる.
大ざっぱには以下のように理解すれば良いだろう.
![]() 上の図のように,
|
|||
A | B | C | 備考 |
---|---|---|---|
暗号化 | 素 | 素 |
経路全体が暗号化されるので応用がきく反面,
大量のデータを暗号化するための計算コストが高くつくため,
PDA などの小さなシステムには導入しにくい.
今回の講義で説明する s** というコマンドはこれに属する. |
素 | 暗号化 | 素 |
致命的なデータだけを暗号化するので比較的簡単に実装できるが,
一般データは保護できない.
APOP と呼ばれるメール取得プロトコルなどはこれである. パスワードは保護されるが,転送されるメールの中身はそのまま見えてしまうので, セキュリティは完全とは言えない. |
素 | 素 | 暗号化 |
通信経路を全く信用せず,
データだけを(事前に)暗号化しておく方法などがこれにあたる.
通信だけでなく,保持しているファイルの暗号化などと共通で使えるシステムが多いので, ある意味もっとも安全な方法だろう. 例としては PGP などが有名. |
素 | 素 | 素 | セキュリティを全く考慮しない通信. 現在のネットワーク上の通信はデフォルトはこの状態なので, ユーザは意識してセキュリティを確保しなくてはならない. |
その他. 上の方法を組み合わせたもの. セキュリティを高めるためにいくつかの方法を組み合わせるのはけして悪い方法ではない. |
これよりリモートホストの操作について具体的に説明を行う.
ネットワークを通じてリモートホストの操作を行うのは,
unix をはじめとする「きちんとした OS」の醍醐味であり,
よくよく学習して習熟しておくのが良い.
また,初学者が忘れがちな注意点として,
リモートホストを操作する「権限」を持っていないと
リモートホストを操作できないということを挙げておく.
# 使える権限のないリモートホストを使おうとしてあがくと,
「クラック(crack)」と見なされて黒い手帳を持った方々の訪問を受ける可能性があるので,
そういうことをしないようにすること(^-^).
まずは,リモートホスト上で「指定したコマンドを実行させる」機能について示そう.
後で示すリモートホストへのログインに比べると比較的単純なことしかできないが,
非対話的であるため,単純で決まった操作やシェルスクリプトなどにはこちらの方が向いている.
rsh リモートホスト名 コマンド
である(詳しくは
man rsh
で調べよ).
.rhosts
というファイルを用意し,
遠隔操作を許可するローカルホスト名(とユーザ名…省略可)を書き込んでおかないと
rsh
は動作しない.
つまり,
.rhosts
に書いておいたホストからは
rsh
による遠隔操作が可能になるのである.
.rhosts
ファイルを作成し,
今ログインしているホスト名を書き込む.
それから友人が今ログインしているホスト名を聞き,
rsh そのホスト名 ps
としてみよ.
ps
とした結果を比較して何が起っているか理解せよ.
.rhosts
ファイルを編集する必要があるが,
阪大情教システムではどのマシンから操作してもホームディレクトリ以下の内容は同じなため,
どのホストの
.rhosts
か,を区別する必要がなくなっている.
rsh
はかなり古くからあるコマンドで使い勝手はなかなか良い.
rsh rigaku107 "ps -axu" | grep bash
とすれば,rigaku107 というホストで bash が起動されているかどうかがチェックできる.
rsh
には
.rhosts
に書いてあるホストからの(許可ユーザ名を名乗る者の)アクセスを無条件で許可してしまう,
rsh
を使用せずに,代わりに後述の
ssh
を使うことが強く推奨されている.
.rhosts
ファイルは削除しておいた方が良い.
rsh
とほぼ同じであるが,
.rhosts
の設定をしなくても使える点と,より高度な認証方法が使える点が異なる.
ssh そのホスト名 "ps -axu" | grep bash
としてみよ(パスワードを聞かれるので,適切に答えよ).
ps -axu | grep bash
とした結果を比較して何が起っているか理解せよ.
ssh
の持つより高度な認証方法は公開鍵暗号というシステムであるが,
この説明は面倒なので省略する(講義では時間があれば口頭で説明する).
詳しく知りたい者は
■ SSH のセッティング & 利用法 (SSH1) ■
のポインタなどを参考にして調べよ.
telnet リモートホスト名
である(詳しくは
man telnet
で調べよ).
telnet そのホスト名
として,いろいろ操作してみよ.
telnet
には
telnet
を使用せずに,代わりに後述の
ssh
を使うことが強く推奨されている.
(備考) telnet
はより正確には「telnet プロトコルを用いて他のホストと通信する」というコマンドであり,
ログインするだけのものではない.
例えばリモートホストの接続 port 名を指定すれば,ログイン以外の接続も可能である.
時間があればこれについてもいくらか講義を行う.
rlogin リモートホスト名
である(詳しくは
man rlogin
で調べよ).
.rhosts
というファイルを用意しておき,
遠隔操作を許可するローカルホスト名(とユーザ名…省略可)を書き込んでおくとログインの際にパスワードを要求されない.
つまり,
.rhosts
に書いておいたホストからは無条件で
rlogin
によるログインが可能になるのである.
rlogin
による接続を受け付けないようになっているようである.
rlogin
には
.rhosts
に書いてあるホストからの(許可ユーザ名を名乗る者の)アクセスを無条件で許可してしまう,
rlogin
を使用せずに,代わりに後述の
ssh
を使うことが強く推奨されている.
telnet
にかなり近いが,
より高度な認証方法が使える点が異なる.
ssh そのホスト名
としてログインし(パスワードを聞かれるので,適切に答えよ),いろいろ操作してみよ.
(備考)
上で見れば分かるように,
ssh
は使い方によって,「リモートホスト上でコマンドを実行する」機能も
「リモートホストにログインする」機能も使える.
しかもネットワーク上を流れる情報が暗号化されていて安全である.
というわけで,特に理由がない限り
rsh, rlogin, telnet
を使わずに,
ssh
を使うべきである.
rcp リモートホストA:ファイルA リモートホストB:ファイルB
であり,これにより
リモートホストA のファイルA をリモートホストB のファイルB
にコピーすることができる.
ホスト名: を省略した場合は,ローカルホスト名: のことであると解釈される.
より詳しくは
man rcp
で調べよ.
.rhosts
というファイルを用意し,
遠隔操作を許可するローカルホスト名(とユーザ名…省略可)を書き込んでおかないと
rcp
は動作しない.
つまり,
.rhosts
に書いておいたホストからのみ,
rsh
によるファイル転送が可能になるのである.
.rhosts
ファイルを作成し,
今ログインしているホスト名を書き込む.
mkdir tmpNew
cd tmpNew
rcp そのホスト名:.bashrc .
などとしてみて,何が起るか観察,把握せよ.
cd ..
rmdir tmpNew
.rhosts
ファイルを削除しておく.
rcp
には
.rhosts
に書いてあるホストからの(許可ユーザ名を名乗る者の)アクセスを無条件で許可してしまう,
rcp
を使用せずに,代わりに後述の
scp
か
sftp
を使うことが強く推奨されている.
ftp
サーバデーモンとよばれるソフトウェアを動かしているホスト(これを
ftp
サーバと呼ぶ)に接続し,ファイル転送を行う.
もっとも簡単な使い方は
ftp リモートホスト名
である(詳しくは
man ftp
で調べよ).
ftp
サーバ機能をそもそも使えないように設定しているホストが多くなった.
ftp
サーバ機能を停めている.
ftp
には
ftp
を使用せずに,代わりに後述の
scp
か
sftp
を使うことが強く推奨されている.
rcp
とほぼ同じであるが,
.rhosts
の設定をしなくても使える点と,より高度な認証方法が使える点が異なる.
mkdir tmpNew
cd tmpNew
scp そのホスト名:.bashrc .
などとしてみて,何が起るか観察,把握せよ.
cd ..
rmdir tmpNew
ftp
とほぼ同じである.
sftp リモートホスト名
として接続してから,
sftp
プログラム中で次のようなコマンドを用いてファイルを転送するものである.
(より詳しくは
man sftp
で調べよ)
pwd | 接続しているリモートホスト上で今いるディレクトリを表示する. |
---|---|
lpwd | ローカルホスト上で今いるディレクトリを表示する. |
cd ディレクトリ名 | 接続しているリモートホスト上でディレクトリを移動する. |
lcd ディレクトリ名 | ローカルホスト上でディレクトリを移動する. |
ls | 接続しているリモートホスト上でのディレクトリの中身を表示する. |
lls | ローカルホスト上でのディレクトリの中身を表示する. |
get ファイル名 | リモートホストのファイルをローカルホストに転送する. |
put ファイル名 | ローカルホストのファイルをリモートホストに転送する. |
exit, quit | 終了. |
mkdir tmpNew
cd tmpNew
sftp そのホスト名
として,接続する.
cd ..
rmdir tmpNew
sftp
を使うのが良いことが分かるだろう.
しかし,いろいろな都合で
sftp
が実装されていないシステムも世の中には多い.
そうした場合にも
scp, ssh
は実装されていることがあるので,そうした場合にはなるべくこれらのコマンドを用いるようにして,
rcp, ftp
などを使わないようにし,セキュリティ上の不安をなくしておこう.
rsh, ssh
とリダイレクトを組み合わせてファイルを転送することもできる…
というか,大量のファイルを構造を保ったまま転送するときには昔からよく使われてきた
「裏技」である.
unix らしいコマンドの使い方であるので,これを覚えておくとちょっとかっこいいだろう(^-^).
具体的には次の実習を見てみよ.
mkdir tmpNew
mkdir tmpNew2
などで良いだろう.
cp .bash* tmpNew
などで良いだろう.
cd tmpNew2
などで良いだろう.
ssh そのホスト名 "tar cpf - tmpNew" | tar xpvf -
としてみよ.
そして,何が起るか観察,理解,把握せよ.
cd ..
rmdir tmpNew
rmdir tmpNew2
以下に示された課題について
AppliedMath-Report-10
という題名をつけて e-mail にて教官宛にレポートとして提出せよ(教官のメールアドレスは授業中に口頭で伝える).
なお,レポートを e-mail の代わりに TeX で作成した書面にて提出してもよい.
課題内容
ssh そのホスト名 "tar cpf - tmpNew" | tar xpvf -
というコマンドでなぜファイルがまとまって転送されるのか,解説せよ.
ssh
の公開鍵暗号というシステムについて,その根本原理を調べ,簡単に解説せよ.