導入6日前

 いかんです。帰ってくるのが遅すぎて、大したことができませんでした。(が本日の講釈は長い・・・・)

 とりあえず昨日は一般ユーザーを作成しましたので、外からTelnetで繋いでみます。 いちいちモニタ切り替え機でカチカチ切り替えるよりは、せっかくのネットワークです。外からWindowsで繋いで見えるようにしておきたいと思います。
 私はWindows上ではTeratermというソフトを使っています。 で早速立ち上げてIPアドレスを指定してつないで・・・・みようとすると(お約束通りに)速攻でTeraterm窓は消滅します。 これはTelnetでの接続を受け取るプログラムがLinux側で動いてくれていないためです。 ということで、とりあえずその原因をつぶします。

 要は/etcにあるinetd.confです。中身を見ると

#
# These are standard services.
#
#ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a
#telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd -h
(途中を省いて肝心な所だけ抜き出してあります)

 という具合になっています。 行頭のシャープ記号「#」がその行を無効(コメントアウト)にしているので、それ以下に書いていることが無視されているという寸法ですな。 (以降、こういった定義ファイル内に#が出ると、その行は#以降に何が記述されても無視されていますので覚えておきましょう)  で、「#ftp」と「#telnet」の所のシャープを取っちゃいます。(ftpも後々使うことになるので、とりあえず私はここで使えるようにしちゃいます)

 「よし取った」で安心してはいけません。ちょっとおまじないを唱えてから再トライです。 「ps x」とコマンドを打ち込んでみてください。

PID TTY STAT TIME COMMAND
1 ? S 0:04 init [3]
2 ? SW 0:00 [kflushd]
3 ? SW 0:00 [kupdate]
4 ? SW 0:00 [kpiod]
5 ? SW 0:00 [kswapd]
6 ? SW< 0:00 [mdrecoveryd]
170 ? SW 0:00 [apmd]
180 ? S 0:00 syslogd -m 0
188 ? S 0:00 klogd
208 ? S 0:00 crond
219 ? S 0:00 inetd
(以下略)


こんな風なモノがぞろっと出て参ります。「inetd」を探してください。そのinetdの行の一番左の数字を記憶しよう。それで、

kill -HUP [inetdの番号]

というおまじないコマンドを入れます。上の例なら「 kill -HUP 219 」となります。(他にもやり方はありますがとりあえずこれで)

 このおまじないでさっき#を消したことが有効になります。(これがWindowsなら「再起動してください」というところです) さてもう1度Telnetから接続してみました・・・・・が、やっぱりつながりません。 さらに阻害要因があるのです。

 TL6にはTCP Wrapperというモノが最初から組み込まれています。 こいつが正しく設定されていないと外側からのアクセスは(たとえ受け口となるプログラムがあっても)全く受け付けてくれません。

 TCP Wrapperの実体は実はすでにここに出ています。さっきのinetd.confの中身です。

telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd -h

この /usr/sbin/tcpd が言うなればTCP Wrapperの実体ということになるでしょうか。 詳しいお話は(またしても)他をあたってみるといいです。わたしのチョロい説明よりもっと参考になるところがあります。

 ということで正しく設定してみるのです。今回正しい設定の肝は2つのファイルにあります。

/etc/hosts.allow
/etc/hosts.deny

 2つのファイルの役目はファイル名の通り。allowは「許す」、denyは「だめよ(無視)」ってことです。 つまり外側からアクセスを許可してあげる"hosts"の名前(この場合ネットワーク上の名前・・・・IPアドレスとか・・・・です)を"allow"に記述し、こいつは相手にせん!という名前を"deny"の方に記述すればいいということです。(故に"hosts"."allow"ってなファイル名と・・・)
 ただし、この2つのファイルは存在すれば両方評価されることに注意です。(ただし両方とも無いと何でもOKという評価になります)

 入れたばっかりのTL6では

hosts.allow ALL : 127.0.0.1
hosts.deny ALL: ALL

という内容になっています。

 allowもdenyもまず"ALL:"で始まっていますが、このALLは先程述べたinetd.conf内に記述してある事全部を指すんだよということです。(有効なのは当然行頭に#がない行です) いいわけ:厳密に言うとinetd.confじゃないんですが・・・ぼそっ
 127.0.0.1というのはIPアドレス(正しくはループバックアドレス)です。これは自分(TL6のPC自身)を指します。 つまりallowの方は「自分は何でもOK」ということになります。
 denyにはALLのあとにまたALL(これは全てのネットワーク上のコンピュータを指しています)となっていますので「誰も何もやっちゃだめ」ということになります。

 つまり2つの評価を合わせれば「誰も何もやっちゃだめ。ただし自分は何でもOK」という結論になります。ですので外から入ろうとしたTelnetは門前払いを食ったのです。

 じゃ、PC1(前回の私の部屋ネットワーク図参照のこと)からのアクセスを許可するにはallowにPC1を足してやれば良いことになります。 「誰も何もやっちゃだめ。ただし自分とPC1はOK」ということです。

 hosts.allowを「ALL:127.0.0.1 192.168.16.110」という風に書き換えてやります。

書き換えた後は先ほどのおまじないを再度となえます。 それからPC1よりTelnetで繋いでみると・・・つながる(はず)なのです。


あぁ、えらい長くなってしまった。また明日。