第5章 NFS のセキュア化

サーバーで NFS ファイルシステムをエクスポートする場合や、クライアントにマウントする際に、NFS セキュリティーリスクを最小限に抑え、サーバーのデータを保護するには、以下のセクションを検討してください。

5.1. AUTH_SYS とエクスポート制御による NFS 保護

NFS は、エクスポートしたファイルへのアクセスを制御するために、以下の従来のオプションを提供します。

  • サーバーは、IP アドレスまたはホスト名を使用して、どのホストにどのファイルシステムのマウントを許可するかをサーバー側で制限します。
  • サーバーは、ローカルユーザーの場合と同じ方法で、NFS クライアントのユーザーに対してファイルシステムの権限を強制します。従来は、NFS は AUTH_SYS コールメッセージ (AUTH_UNIX とも呼ばれます) を使用してこれを実行していました。このメッセージは、クライアントが、ユーザーの UID と GID を提示します。これは、悪意のあるクライアントや誤って設定されたクライアントが簡単にこの間違いを招き、ユーザーがアクセスすべきではないファイルにアクセスできる可能性があることを意味します。

潜在的なリスクを制限するため、多くの場合、管理者は、共通のユーザー ID およびグループ ID に対して、ユーザー権限を読み取り専用にするか、権限を下げてアクセスを制限します。ただし、このソリューションにより、NFS 共有が元々想定されている方法では使用されなくなります。

さらに、攻撃者が、NFS ファイルシステムをエクスポートするシステムが使用する DNS サーバーを制御できた場合は、特定のホスト名または完全修飾ドメイン名に関連付けられたシステムを、承認されていないマシンに指定できます。これで、認証されていないマシンは、NFS 共有のマウントを許可するシステムになります。これは、ユーザー名やパスワードの情報が交換されず、NFS マウントに追加のセキュリティーが提供されるためです。

NFS 経由でディレクトリーのエクスポートを行う際にワイルドカードを使用する場合は慎重に行ってください。ワイルドカードの対象が予定よりも広い範囲のシステムを対象とする可能性があります。

関連情報

  • NFS および rpcbind のセキュリティーを保護するには、nftablesfirewalld などを使用します。これらのフレームワークの設定の詳細は、man ページの nft(8) および firewalld-cmd(1) を参照してください。

5.2. AUTH_GSSを使用した NFS セキュリティー

NFS の全バージョンは、RPCSEC_GSS および Kerberos のメカニズムに対応します。

AUTH_SYS とは異なり、RPCSEC_GSS Kerberos メカニズムでは、サーバーは、どのユーザーがそのファイルにアクセスしているかを正確に表すことをクライアントに依存しません。代わりに、暗号を使用してサーバーにユーザーを認証し、悪意のあるクライアントがそのユーザーの Kerberos 認証情報を持たずにユーザーになりすますことがないようにします。RPCSEC_GSS Kerberos メカニズムを使用することが、マウントを保護する最も簡単な方法になります。Kerberos の設定後は、追加の設定が不要になるためです。

5.3. Kerberos を使用するために NFS サーバーおよびクライアントを設定

Kerberos はネットワーク認証システムであり、対称暗号化と、信頼できるサードパーティー (KDC) を使用してクライアントとサーバーが相互に認証できるようにします。Red Hat では、Kerberos の設定に Identity Management (IdM) を使用することを推奨します。

前提条件

  • Kerberos Key Distribution Centre (KDC) がインストールされ、設定されている。

手順

    • NFS サーバー側で、nfs/hostname.domain@REALM プリンシパルを作成します。
    • サーバーとクライアントに、host/hostname.domain@REALM を作成します。
    • クライアントとサーバーのキータブに、対応する鍵を追加します。
  1. サーバーで、sec= オプションを使用して、希望するセキュリティーフレーバーを有効にします。すべてのセキュリティーフレーバーと非暗号化マウントを有効にするには、以下のコマンドを実行します。

    /export *(sec=sys:krb5:krb5i:krb5p)

    sec= オプションを使用するのに有効なセキュリティーフレーバーは、以下のようになります。

    • sys - 暗号化の保護なし (デフォルト)
    • krb5 - 認証のみ
    • krb5i - インテグリティー保護
    • krb5p - プライバシー保護
  2. クライアントで、sec=krb5 (もしくは設定に応じて sec=krb5i または sec=krb5p) をマウントオプションに追加します。

    # mount -o sec=krb5 server:/export /mnt

関連情報

  • Kerberos で保護された NFS 共有で root としてファイルを作成し、このファイルの root 所有権を維持する必要がある場合は、https://access.redhat.com/articles/4040141 を参照してください。この設定は推奨されません。
  • NFS 設定の詳細は、man ページの exports(5) および nfs(5) を参照してください。

5.4. NFSv4 セキュリティーオプション

NFSv4 には、Microsoft Windows NT モデルの機能や幅広い導入の経緯があるため、POSIX モデルではなく、Microsoft Windows NT モデルをベースとした ACL サポートが含まれます。

NFSv4 のもう 1 つの重要なセキュリティー機能は、ファイルシステムのマウントに MOUNT プロトコルを使用しなくなることです。MOUNT プロトコルは、プロトコルがファイルを処理する方法により、セキュリティー上のリスクが発生します。

5.5. マウントされた NFS エクスポートに対するファイル権限

リモートホストにより NFS ファイルシステムを読み取りまたは読み書きとしてマウントした場合は、パーティションが、各共有ファイルに対する唯一の保護となります。同じユーザー ID の値を共有する 2 つのユーザーが、異なるクライアントシステムに同じ NFS ファイルシステムをマウントすると、そのユーザーは互いのファイルを修正できるようになります。また、クライアントシステムで root としてログインした場合は、su - コマンドを使用して、NFS 共有が設定されたファイルにアクセスできます。

デフォルトでは、アクセス制御リスト (ACL) は、Red Hat Enterprise Linux では NFS が対応しています。Red Hat では、この機能を有効にしておくことを推奨します。

デフォルトでは、NFS がファイルシステムをエクスポートする際に、root squashing を使用します。これにより、NFS 共有にアクセスするユーザーのユーザー ID が、ローカルマシンの root ユーザーとして nobody に設定されます。root squashing は、デフォルトのオプション root_squash で制御されます。このオプションの詳細は、「NFS サーバーの設定」を参照してください。

NFS 共有を読み取り専用としてエクスポートする場合は、all_squash オプションの使用を検討してください。このオプションでは、エクスポートしたファイルシステムにアクセスするすべてのユーザーが、nobody ユーザーのユーザー ID を取得します。


このページには機械翻訳が使用されている場合があります (詳細はこちら)。