7.3. NFS サービスの保護
Kerberos を使用してすべてのファイルシステム操作を認証および暗号化して、ネットワークファイルシステムバージョン 4 (NFSv4) のセキュリティーを保護できます。ネットワークアドレス変換 (NAT) またはファイアウォールで NFSv4 を使用する場合に、/etc/default/nfs ファイルを変更することで委譲をオフにできます。委譲は、サーバーがファイルの管理をクライアントに委譲する手法です。
対照的に、NFSv3 ではファイルのロックとマウントに Kerberos は使用されません。
NFS サービスは、すべてのバージョンの NFS で TCP を使用してトラフィックを送信します。このサービスは、RPCSEC_GSS カーネルモジュールの一部として Kerberos ユーザーおよびグループ認証をサポートします。
NFS を利用すると、リモートのホストがネットワーク経由でファイルシステムをマウントし、そのファイルシステムを、ローカルにマウントしているファイルシステムのように操作できるようになります。集約サーバーのリソースを統合して、ファイルシステムを共有するときに /etc/nfsmount.conf ファイルの NFS マウントオプションをさらにカスタマイズできます。
7.3.1. NFS サーバーのセキュリティーを保護するエクスポートオプション リンクのコピーリンクがクリップボードにコピーされました!
NFS サーバーは、/etc/exports ファイル内のどのファイルシステムにどのファイルシステムをエクスポートするかなど、ディレクトリーとホストのリスト構造を決定します。
/etc/exports ファイルでは次のエクスポートオプションを使用できます。
ro- NFS ボリュームを読み取り専用としてエクスポートします。
rw-
NFS ボリュームに対する読み取りおよび書き込み要求を許可します。書き込みアクセスが許可されると攻撃のリスクが高まるため、このオプションは注意して使用してください。
rwオプションを使用してディレクトリーをマウントする必要がある場合は、起こりうるリスクを軽減するために、すべてのユーザーがディレクトリーに書き込み可能にしないようにしてください。 root_squash-
uid/gid0 からの要求を匿名の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)
/tmp/nfs/ bob.example.com(rw)
以下の例は上記と同じになりますが、同じディレクトリーを読み取り専用パーミッションで bob.example.com ホストに共有し、ホスト名の後の 1 つのスペース文字が原因で読み取りと書き込み権限で すべてのユーザー に共有します。
/tmp/nfs/ bob.example.com (rw)
/tmp/nfs/ bob.example.com (rw)
showmount -e <hostname> コマンドを入力すると、システム上の共有ディレクトリーを確認できます。
また、NFS サーバーをエクスポートする際に、以下のベストプラクティスを考慮してください。
- 一部のアプリケーションでは、パスワードをプレーンテキストまたは弱い暗号化形式で保存するため、ホームディレクトリーをエクスポートすることはリスクがあります。アプリケーションコードを確認して改善することで、リスクを軽減できます。
- 一部のユーザーは SSH キーにパスワードを設定していないため、この場合もホームディレクトリーによるリスクが発生します。パスワードの使用を強制するか、Kerberos を使用することで、これらのリスクを軽減できます。
-
NFS エクスポートを必要なクライアントのみに制限します。NFS サーバーで
showmount -eコマンドを使用して、サーバーのエクスポート内容を確認します。特に必要のないものはエクスポートしないでください。 - 攻撃のリスクを減らすために、不要なユーザーがサーバーにログインできないようにしてください。サーバーにアクセスできるユーザーを定期的に確認してください。
ファイルシステムのサブディレクトリーをエクスポートするのはセキュアではないため、ファイルシステム全体をエクスポートしてください。攻撃者が、部分的にエクスポートされたファイルシステムのエクスポートされていない部分にアクセスする可能性があります。
7.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 の代わりに新しくより安全なアルゴリズムを使用してください。
7.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
$ rpcinfo -pCopy to Clipboard Copied! Toggle word wrap Toggle overflow