NFSクライアントが低い番号のポートを使用するのはなぜですか?

NFSクライアントが低い番号のポートを使用するのはなぜですか?

CoreOS EC2 インスタンスを実行しています。このインスタンスはローカルポート950をリッスンするプロセスを実行しています。通常、すべてがうまく機能しますが、最近CoreOSサーバーを再起動した後、他のプロセスがすでに使用しているため、プロセスはポート950でリッスンできません。

この他のプロセスは、AWS EFSボリュームをマウントするために使用されるNFSv4クライアントのようです。 netstatが私に知らせる内容は次のとおりです。

Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 10.30.102.250:950       10.30.102.170:2049      ESTABLISHED

関連部分は次のとおりです/etc/mtab

fs-faa33256.efs.us-west-2.amazonaws.com:/ /efs nfs4 rw,relatime,vers=4.1,\
rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,\
clientaddr=10.30.102.250,local_lock=none,addr=10.30.102.170 0 0

いくつかの質問があります。 1. CoreOSサーバーのNFSクライアントがなぜNFSを使用するのですか?低い数字リモートNFSv4サーバーと通信するためのポート? 2. NFSクライアントにポート950を無効にする(または権限のないポートのみを使用する)ように指示できますか?

答え1

(次の回答は、ほとんどの場合、私の元の投稿に対するJeff Schallerのコメントから派生しました。)

非ルートユーザーがNFSボリュームをマウントするのを防ぐために、NFSサーバーはNFSクライアントに特権ポート(1-1023)を使用する必要があります。ただし、現在のルートユーザーのみがNFSボリュームをマウントできるようにすることで、ネットワークにコンピュータを配置できる人は誰でもそのコンピュータのルートになる可能性があるため、セキュリティはほとんどありません。

これらの古いセキュリティ慣行のために、一部のNFSクライアントはNFSサーバーに接続するときにデフォルトで特権ポートを使用します。

クライアントが特権ポートでサービスを実行する必要がある場合は、ポートの競合が発生する可能性があります。この問題を解決する 1 つの方法は、NFS クライアントが他のサービスで使用するポートを防ぐために、NFS クライアントが使用する最小および最大許可ポートを設定することです。ポート範囲は次のように設定できます。カーネルパラメータ/sys/module/sunrpc/parameters/min_resvport;CoreOSでは、これらのパラメータをファイルおよびファイルに保存できます/sys/module/sunrpc/parameters/max_resvport

NFSボリュームをマウントするときにシステムに無許可のポートを使用するように指示するオプションを追加すると、完全な特権を持つポートの問題を完全に回避できます。 Linuxの場合、これはnoresvportオプションです(参照:Linux nfs(5) のマニュアルページ)。

以下は、CoreOSサーバーによって使用されたマウントコマンドです。

fs-faa33256.efs.us-west-2.amazonaws.com:/ /efs nfs4 rw,relatime,vers=4.1,\
rsize=1048576,wsize=1048576,namlen=255,hard,noresvport,proto=tcp,timeo=600,retrans=2,sec=sys,\
clientaddr=10.30.102.250,local_lock=none,addr=10.30.102.170 0 0

関連情報