NFS/Kerberos

提供: ArchWiki
2024年4月19日 (金) 18:20時点におけるKusanaginoturugi (トーク | 投稿記録)による版 (→‎Client configuration: 飜訳)
ナビゲーションに移動 検索に移動

Kerberos は NFS に利用可能な数少ないセキュリティメカニズムの一つです。Kerberos は強力なユーザー認証とデータ暗号化を提供し、NFSv4 を使用することでクライアントとサーバー間の UIDs/GIDs の一致が不要になります。

Kerberos には NFSv4 が推奨されます。NFSv3 で Kerberos を有効にすることは可能ですが、補助的な NFSv3 プロトコル(例えば「マウント」プロトコル)がセキュアでないため、100% のカバレッジは提供されません。また、NFSv3 には idmapping がないため、Kerberos の使用性が大幅に低下します。

前提条件

Kerberos は KDC (Key Distribution Center)サービスがどこかで動作している必要があります。MIT Kerberos (krb5)に付属する krb5-kdc.service は、Active Directory や FreeIPA のような複雑さが必要ない小規模設定に適しています。2 番目のオプションは Heimdal で、一部の BSD や Arch 上の heimdalAUR で見つかります。

Kerberos と共に NFSv4 の idmapping がとても重要になります。サーバーとクライアントはどちらも同じ idmapping ドメインを設定している必要があります:

/etc/idmapd.conf
[General]
Domain = example.com

サーバーの設定

各 NFS サーバーは、KDC 上に nfs/server.fqdn の Kerberos プリンシパルを作成し、その鍵をサーバーの /etc/krb5.keytab に追加する必要があります。

ノート:
この記事またはセクションは加筆を必要としています。
理由: Why? (議論: トーク:NFS/Kerberos#)

It is recommended to also have the standard host/ principal there as well, for other purposes.

fileserv# kadmin -p frob/admin
Password for frob/admin@EXAMPLE.COM: *********
kadmin:  addprinc -nokey nfs/fs.example.com
kadmin:  ktadd nfs/fs.example.com

サーバー上で gssproxy.service有効化開始する必要があります。

ヒント: 以前のシステムでは rpc.svcgssd を使用していましたが、現代の nfs-utils には存在せず、gssproxy に完全に置き換えられています。

gssproxy は NFS サーバーのサポートで事前に設定されています(標準パッケージの一部として /etc/gssproxy/24-nfs-server.conf ファイルが含まれています)そして、NFS サービスの keytab を標準の場所に置く以外に調整する必要はありません。

/etc/exports では、sec= オプションで Kerberos 認証フレーバーを提供する必要があります:

/home    *(rw,sec=krb5p)
/usr     10.147.0.0/16(rw,sec=krb5p:krb5i:krb5:sys) *(rw,sec=krb5p)
ノート: 廃止された gss/krb5p(...) 構文を使用しないでください。まだ動作しますが、もはや使用すべきではありません。

利用可能なフレーバーは以下の通りです:

  • krb5p は「プライバシー」(Kerberos ベースの暗号化)を提供します。インターネット上で使用するには十分なセキュリティですが、LAN 上でのスループットが低下する可能性があるため、RPC-with-TLS 内で krb5 を使用することを検討してください。
  • krb5i は「完全性」(Kerberos ベースの MAC)を提供しますが、暗号化は提供しません。パケット改ざんから保護するため、静的データを提供する際に有用かもしれません。
  • krb5 は認証のみを提供し、データの完全性や暗号化はありません。RPC-over-TLS を xprtsec= を通じて有効化している、または Kerberos をそれ自体「安全な」LAN(例:WireGuard トンネルを通じて)上で運用している場合は良い選択ですが、公開ネットワーク上でクリアな状態で使用するのは避けてください。
  • sys は従来の UID ベース(非 Kerberos)の NFS セキュリティモードです。

クライアント設定

ユーザーに加えて、各 NFS クライアントは /etc/krb5.keytab に「マシン」Kerberos プリンシパルを持つべきであり、ユーザーの Kerberos チケットがまだ利用可能でない状況で使用されます。特に、ユーザーがログインする前や(autofs 経由でのマウントが行われる場合など)、ファイルシステムをブート時にマウントするために必要になります。一般的に、「root として」行われるすべての操作はマシンプリンシパルとして認証されます。

ヒント: マシンアイデンティティは NFSv4.0 や NFSv4.1 を使用する場合に一部の内部 NFS 操作にも必要ですが、NFSv4.2 ではもはや必須ではありません。

サーバーの場合と異なり、クライアントマシンは特に nfs/ プリンシパルを必要としません。一般的な host/the.fqdn プリンシパルがあれば十分です(rpc.gssd マニュアルページで何を探すかを参照)。

クライアントは rpc-gssd.service をアクティブにする必要があります(つまり、rpc.gssd デーモン)。

ファイルシステムをマウントするときに使用されるオプションは、/etc/exports で使用されるオプションと非常に似ています。sec= オプションを使用して、1つ以上のフレーバーを指定できます。クライアントは自動的に提供された最も強力なモードを使用しますが、ダウングレード攻撃を防ぐために、例えば sec=krb5p を明示的に要求することを推奨します。

ファイルシステムがマウントされた後、root はすでに(マシンの Kerberos 資格情報を使用して)アクセスできますが、すべての非 root ユーザーは自身の Kerberos チケットが必要です。これはユーザーが自分で kinit を手動で実行するか、ログイン中にチケットを取得する pam-krb5 を設定するか(これはパスワードベースのログインでのみ機能します)、または gssproxyk5start(1)kstartAUR から)を使用して keytab ファイルからチケットを取得するかのいずれかを意味します。

ヒント: チケットは取得後数時間で期限切れになるため、k5start を設定してチケットを「更新」する必要があります。