Subject: How do I keep track of people who are fingering me?
>From: jik@rtfm.MIT.EDU (Jonathan I. Kamens)
>From: malenovi@plains.NoDak.edu (Nikola Malenovic)
Date: Mon, 23 Nov 1992 16:01:45 -0600

4.9) 自分に finger かけた人を記録するにはどうすればいいのでしょうか。

普通は、離れたマシンから finger をかけてきた人のユーザIDを探ることは出 来ません。外からの finger の要求が、どのマシンから来ているのかを見つけ ることは出来るかも知れません。一つの可能性として、.plan ファイルを普通 のファイルのかわりに「名前つきパイプ」で置き換えることで目的が遂げられ るかも知れません(名前つきパイプを作るには 'mknod' を使います)。もっとも、 読者のシステムが「名前つきパイプ」をサポートしており、finger デーモン が置換えを許せば、ですが。

上述のようにできたら、.plan ファイルを書き込み用に open するプログラム を動かします。open は他の別のプロセス(すなわち fingerd)が.plan ファイ ルを読み込み用に open するまでブロックします。こうすれば、このパイプに 対して好きなことが出来ます。すなわち、誰かが finger をかけてきた時に毎 回違った .plan の情報を見せたりすることが出来ます。

当然ですが、システムが名前つきパイプをサポートしていなかったり、fingerd が .plan ファイルは通常のファイルである(パイプなどでない)ことを前提とし ているのならばこの方法は全然うまくいきません。

上述のプログラム中で、他のホストからアクセスがあった時に「netstat」の出 力データを調べ、どこのホストから要求が来ているかを特定することが出来ま すが、他のホスト上のユーザIDを取得することはできません。

他のホストのユーザIDを得るには、そのホストが RFC931 に述べられているよ うな認証サービスを提供している必要があります。現状では、普通のBSDマシン 用の RFC931 の実装に3種類あり、いくつかのアプリケーション(wuarchive ftpd など)がそのサーバをサポートしています。より詳しい情報が必要ならば rfc931-users メーリングリストに参加することをお勧めします。リクエストは rfc931-users-request@kramden.acf.nyu.edu まで。

この回答に関連して、注意点が3つほどあります。まず、多くの NFS システム は名前つきパイプをちゃんと認識してくれません。すなわち、他のマシン上で パイプを読もうとした場合にタイムアウトが起こるまでブロックするか、大き さ 0 のファイルだと思われて何も表示されない、ということが起こるかもしれ ません。

2つ目の問題は、多くのシステムで、fingerd は .plan ファイルを読む前に ファイル内にデータがあるか(と読み込み可能であるか)をチェックする、とい うことです。このチェックにより他のホストからの finger 要求があっても fingerd が .plan ファイルを全く無視してしまう、ということがあるかもしれ ません。

3つ目の問題は、名前つきパイプをサポートしているシステムでは、システム 中で使える名前つきパイプの数に制限があることが多い、ということです。カー ネルのコンフィギュレーションファイル中の FIFOCNT オプションを見てみて下 さい。もし、システム中の名前つきパイプの数がこのFIFOCNTの値を越えている と、誰かがパイプを消すまで新しいパイプはブロックしてしまいます。名前つ きパイプの数が固定である理由は、(パイプ用の)バッファは non-paged メモリ 内に割り当てられるためです。


UNIX FAQ LIST / Copyright(c)1994,Ted Timar / tmatimar@isgtec.com


Maintainer: あさだ たくや