9.3. NFS サービスの保護
Kerberos を使用してすべてのファイルシステム操作を認証および暗号化して、ネットワークファイルシステムバージョン 4 (NFSv4) のセキュリティーを保護できます。ネットワークアドレス変換 (NAT) またはファイアウォールで NFSv4 を使用する場合に、/etc/default/nfs
ファイルを変更することで委譲をオフにできます。委譲は、サーバーがファイルの管理をクライアントに委譲する手法です。対照的に、NFSv2 および NFSv3 ではファイルのロックとマウントに Kerberos は使用されません。
NFS サービスは、すべてのバージョンの NFS で TCP を使用してトラフィックを送信します。このサービスは、RPCSEC_GSS
カーネルモジュールの一部として Kerberos ユーザーおよびグループ認証をサポートします。
NFS を利用すると、リモートのホストがネットワーク経由でファイルシステムをマウントし、そのファイルシステムを、ローカルにマウントしているファイルシステムのように操作できるようになります。集約サーバーのリソースを統合して、ファイルシステムを共有するときに /etc/nfsmount.conf
ファイルの NFS マウントオプションをさらにカスタマイズできます。
9.3.1. NFS サーバーのセキュリティーを保護するエクスポートオプション
NFS サーバーは、/etc/exports
ファイル内のどのファイルシステムにどのファイルシステムをエクスポートするかなど、ディレクトリーとホストのリスト構造を決定します。
/etc/exports
ファイルでは次のエクスポートオプションを使用できます。
ro
- NFS ボリュームを読み取り専用としてエクスポートします。
rw
-
NFS ボリュームに対する読み取りおよび書き込み要求を許可します。書き込みアクセスが許可されると攻撃のリスクが高まるため、このオプションは注意して使用してください。
rw
オプションを使用してディレクトリーをマウントする必要がある場合は、起こりうるリスクを軽減するために、すべてのユーザーがディレクトリーに書き込み可能にしないようにしてください。 root_squash
-
uid
/gid
0 からの要求を匿名のuid
/gid
にマップします。これは、bin
ユーザーやstaff
グループなど、同様に機密である可能性の高い他のuid
またはgid
には適用されません。 no_root_squash
-
root squash をオフにします。デフォルトでは、NFS 共有は
root
ユーザーを、非特権ユーザーであるnobody
ユーザーに変更します。これにより、root
が作成したすべてのファイルの所有者がnobody
に変更され、setuid
ビットが設定されたプログラムのアップロードができなくなります。no_root_squash
オプションを使用すると、リモートの root ユーザーは共有ファイルシステムの任意のファイルを変更し、他のユーザーに対してアプリケーションが Trojans に感染した状態のままにします。 secure
-
予約ポートへのエクスポートを制限します。デフォルトでは、サーバーは予約済みポートからのクライアント通信のみを許可します。ただし、多くのネットワークで、クライアント上で
root
ユーザーになるのは簡単です。そのため、サーバーで予約されたポートからの通信が特権であると仮定することは安全ではありません。そのため、予約ポートの制限は効果が限定的です。Kerberos、ファイアウォール、および特定クライアントへのエクスポートを制限することに依存すると良いでしょう。
/etc/exports
ファイルの構文に余分なスペースがあると、設定が大幅に変更される可能性があります。
以下の例では、/tmp/nfs/
ディレクトリーは bob.example.com
ホストと共有され、読み取りおよび書き込みのパーミッションを持ちます。
/tmp/nfs/ bob.example.com(rw)
以下の例は上記と同じになりますが、同じディレクトリーを読み取り専用パーミッションで bob.example.com
ホストに共有し、ホスト名の後の 1 つのスペース文字が原因で読み取りと書き込み権限で すべてのユーザー に共有します。
/tmp/nfs/ bob.example.com (rw)
showmount -e <hostname>
コマンドを入力すると、システム上の共有ディレクトリーを確認できます。
また、NFS サーバーをエクスポートする際に、以下のベストプラクティスを考慮してください。
- 一部のアプリケーションでは、パスワードをプレーンテキストまたは弱い暗号化形式で保存するため、ホームディレクトリーをエクスポートすることはリスクがあります。アプリケーションコードを確認して改善することで、リスクを軽減できます。
- 一部のユーザーは SSH キーにパスワードを設定していないため、この場合もホームディレクトリーによるリスクが発生します。パスワードの使用を強制するか、Kerberos を使用することで、これらのリスクを軽減できます。
-
NFS エクスポートを必要なクライアントのみに制限します。NFS サーバーで
showmount -e
コマンドを使用して、サーバーのエクスポート内容を確認します。特に必要のないものはエクスポートしないでください。 - 攻撃のリスクを減らすために、不要なユーザーがサーバーにログインできないようにしてください。サーバーにアクセスできるユーザーを定期的に確認してください。
ファイルシステムのサブディレクトリーをエクスポートするのはセキュアではないため、ファイルシステム全体をエクスポートしてください。攻撃者が、部分的にエクスポートされたファイルシステムのエクスポートされていない部分にアクセスする可能性があります。
関連情報
- RHEL Identity Management 使用時に IdM で自動マウントの使用
-
システム上の
exports(5)
およびnfs(5)
の man ページ
9.3.2. NFS クライアントのセキュリティーを保護するマウントオプション
mount
コマンドに次のオプションを渡すと、NFS ベースのクライアントのセキュリティーを強化できます。
nosuid
-
nosuid
オプションを使用してset-user-identifier
またはset-group-identifier
ビットを無効にします。これにより、リモートユーザーがsetuid
プログラムを実行してより高い特権を取得するのを防ぎ、setuid
オプションの反対となるこのオプションを使用できます。 noexec
-
noexec
オプションを使用して、クライアント上の実行可能なファイルをすべて無効にします。これを使用して、ユーザーが共有ファイルシステムに配置されたファイルを誤って実行するのを防ぎます。 nodev
-
nodev
オプションを使用して、クライアントがデバイスファイルをハードウェアデバイスとして処理するのを防ぎます。 resvport
-
resvport
オプションを使用して、通信を予約済みポートに制限し、特権送信元ポートを使用してサーバーと通信できます。予約済みポートは、root
ユーザーなどの特権ユーザーおよびプロセス用に予約されています。 秒
-
NFS サーバーの
sec
オプションを使用して、マウントポイント上のファイルにアクセスするための RPCGSS セキュリティーフレーバーを選択します。有効なセキュリティーフレーバーは、none
、sys
、krb5
、krb5i
、およびkrb5p
です。
krb5-libs
パッケージが提供する MIT Kerberos ライブラリーは、新しいデプロイメントで Data Encryption Standard (DES) アルゴリズムに対応しなくなりました。DES は、セキュリティーと互換性の理由から、Kerberos ライブラリーでは非推奨であり、デフォルトで無効になっています。互換性の理由でご使用の環境で DES が必要な場合を除き、DES の代わりに新しくより安全なアルゴリズムを使用してください。
9.3.3. ファイアウォールでの NFS のセキュリティー保護
NFS サーバーでファイアウォールを保護するには、必要なポートのみを開いてください。他のサービスには NFS 接続ポート番号を使用しないでください。
前提条件
-
nfs-utils
パッケージがインストールされている。 -
Firewalld
パッケージがインストールされ、実行されている。
手順
-
NFSv4 では、ファイアウォールは TCP ポート
2049
を開く必要があります。 NFSv3 では、
2049
で 4 つのポートを追加で開きます。rpcbind
サービスは NFS ポートを動的に割り当て、ファイアウォールルールの作成時に問題が発生する可能性があります。このプロセスを簡素化するには、/etc/nfs.conf
ファイルを使用して、使用するポートを指定します。-
[mountd]
セクションのmountd
(rpc.mountd
) の TCP および UDP ポートをport=<value>
形式で設定します。 -
[statd]
セクションのstatd
(rpc.statd
) の TCP および UDP ポートをport=<value>
形式で設定します。
-
/etc/nfs.conf
ファイルで NFS ロックマネージャー (nlockmgr
) の TCP および UDP ポートを設定します。-
[lockd]
セクションのnlockmgr
(rpc.statd
) の TCP ポートをport=value
形式で設定します。または、/etc/modprobe.d/lockd.conf
ファイルのnlm_tcpport
オプションを使用することもできます。 -
[lockd]
セクションのnlockmgr
(rpc.statd
) の UDP ポートをudp-port=value
形式で設定します。または、/etc/modprobe.d/lockd.conf
ファイルのnlm_udpport
オプションを使用することもできます。
-
検証
NFS サーバー上のアクティブなポートと RPC プログラムをリスト表示します。
$ rpcinfo -p