Re: NFSの特権ポートについて
新城@筑波大学情報です。こんにちは。
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 サーバが乗っ
取られているらしいとにらんで、追跡調査する能力があれば、気が
付きます。自分でファイルを消したと思って、もう一度最初から設
定し直して、電子メールを読みに行くようだと気が付かないでしょう。
\\ 新城 靖 (しんじょう やすし) \\
\\ 筑波大学 電子・情報 \\
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735