新城@筑波大学情報です。こんにちは。

In article <m3lltpdq9a.fsf@maedapc.cc.tsukuba.ac.jp>
        MAEDA Atusi <maeda@cc.tsukuba.ac.jp> writes:
> ええと,「すでに悪意あるユーザがサーバに侵入している場合」と言うことで
> すか? Unixの場合,ローカルユーザは結構悪いことをいろいろできちゃうの
> で(DoS攻撃は防ぎようがない),普通のセキュリティでいえば,「もうすでに
> 負けている」段階ですけど,「学生のいたずらを防ぐため」とかならありそう
> ですね.

NFS サーバにも、一般ユーザがログイン可能という前提です。敷居
をあげることは、意味はあります。敷居が低いと、一般ユーザが悪
の道に道に走ってしまうけれど、敷居が高ければ走らないというこ
とはあります。

> NFSクライアントはportmapper経由でポート番号を得ますよね.これをやめて,
> クライアント側でも直接ポート番号を指定するということでしょうか.その場
> 合,mountdのポート番号はどうするんでしょう.

今の話は、NFS のサーバ側のポート番号を特権ポート番号にしたい
ということなので、特権ポートを得た後は、やはり portmapper に
登録するのでしょう。

mountd がしていることは、アクセス・ポイントのファイル・ハン
ドル(オブジェクト識別子)を返すだけです。NFSサーバのポート番
号は、返していません。NFS サーバのポート番号と mountd は、関
係ありません。

/usr/include/rpcsvc/mount.x
------------------------------------------------------------
union fhstatus switch (unsigned fhs_status) {
case 0:
        fhandle fhs_fhandle;
default:
        void;
};

                fhstatus
                MOUNTPROC_MNT(dirpath) = 1;
------------------------------------------------------------

RPC のプログラミングのテクニックですが、portmapper を通らな
いでポート番号を指定することはできます。具体的には、サーバ側
では、bind したソケットを svcudp_create() に渡します。クライ
アント側では、clntudp_create() で、第1引数にサーバのIPア
ドレスとポート番号を保存した struct sockaddr_in を渡します。

サーバ側で NFS サーバのポート番号を portmapper に登録しなく
ても、片っ端から試していけばいいので、安全性はそんなには上が
らないのでしょうね。

> > 一般ユーザが偽物の NFS サーバを挙げることができます。それで、
> > 他人の電子メールのファイルが write されるのを待って盗むとい
> > うことができます。
> 偽物サーバは,ユーザしか読み書きできないパーミーッションのファイルを
> (本当には)アクセスできないんですよね.電子メールのファイルを書く前に,
> 電子メールのファイルを読もうとしたり,他のファイルを書こうとしたらバレ
> ちゃいますね.

はい。ファイルが存在しない時に、これはどうも NFS サーバが乗っ
取られているらしいとにらんで、追跡調査する能力があれば、気が
付きます。自分でファイルを消したと思って、もう一度最初から設
定し直して、電子メールを読みに行くようだと気が付かないでしょう。

\\ 新城 靖 (しんじょう やすし) \\
\\ 筑波大学 電子・情報       \\