11.14. Kerberos インテグレーション


Kerberos は、信頼されないネットワーク全体でユーザーをサーバーに認証したり、サーバーをユーザーに認証したりする集中認証サーバーを提供するコンピューターネットワークセキュリティープロトコルです。Kerberos 認証では、サーバーとデータベースがクライアント認証に使用されます。

11.14.1. KDC のセットアップ (要件に応じて)

Kerberos は、キー配布センター (KDC) として知られるサードパーティーの信頼されたサーバーとして実行され、ネットワーク上の各ユーザーとサービスがプリンシパルとなります。KDC は、すべてのクライアント (ユーザープリンシパル、サービスプリンシパル) に関する情報を保持します。したがって、セキュアである必要があります。Kerberos セットアップでは、KDC が単一障害点となるため、1 つのマスター KDC と複数のスレーブ KDC を使用することを推奨します。

前提条件

/etc/hosts ファイルに次の変更が加えられているかどうかを確認します。必要に応じてドメイン名を追加します。

[root@chost ~]# cat /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.208.97	        ceph-node1-installer.ibm.com	ceph-node1-installer
10.0.210.243	ceph-node2.ibm.com	ceph-node2
10.0.208.63	        ceph-node3.ibm.com	ceph-node3
10.0.210.222	ceph-node4.ibm.com	ceph-node4
10.0.210.235	ceph-node5.ibm.com	ceph-node5
10.0.209.87	        ceph-node6.ibm.com	ceph-node6
10.0.208.89	        ceph-node7.ibm.com	ceph-node7
重要

セットアップに関係するすべてのノード (Ceph クラスター内のすべてのノードとすべての NFS クライアントノード) にドメイン名が存在することを確認してください。

手順

以下の手順に従って、KDC をインストールして設定します。すでに KDC をインストールして設定している場合は、この部分をスキップしてください。

  1. KDC をセットアップするマシンに、必要な RPM がインストールされているかどうかを確認します。

    [root@host ~]# rpm -qa | grep krb5
    
    krb5-libs-1.20.1-9.el9_2.x86_64
    krb5-pkinit-1.20.1-9.el9_2.x86_64
    krb5-server-1.20.1-9.el9_2.x86_64
    krb5-server-ldap-1.20.1-9.el9_2.x86_64
    krb5-devel-1.20.1-9.el9_2.x86_64
    krb5-workstation-1.20.1-9.el9_2.x86_64
    注記
    • Kerberos レルム名に従ったドメイン名を使用することを推奨します。たとえば、レルム - PUNE.IBM.COM、管理プリンシパル - admin/admin です。
    • インストールされた設定ファイルを編集して、新しい KDC を反映するようにしてください。KDC は IP アドレスまたは DNS 名として指定できることに注意してください。
  2. krb5.conf ファイルを更新します。

    注記

    krb5.conf ファイル内の kdc および admin_server IP を使用して、すべてのレルム (default_realm および domain_realm) を更新する必要があります。

    [root@host ~]# cat /etc/krb5.conf
    
    # To opt out of the system crypto-policies configuration of krb5, remove the
    # symlink at /etc/krb5.conf.d/crypto-policies which will not be recreated.
    
    includedir /etc/krb5.conf.d/
    [logging]
        default = [FILE:/var/log/krb5libs.log](file:///var/log/krb5libs.log)
        kdc = [FILE:/var/log/krb5kdc.log](file:///var/log/krb5kdc.log)
        admin_server = [FILE:/var/log/kadmind.log](file:///var/log/kadmind.log)
    [libdefaults]
        dns_lookup_realm = false
        ticket_lifetime = 24h
        renew_lifetime = 7d
        forwardable = true
        rdns = false
        pkinit_anchors = [FILE:/etc/pki/tls/certs/ca-bundle.crt](file:///etc/pki/tls/certs/ca-bundle.crt)
        spake_preauth_groups = edwards25519
        dns_canonicalize_hostname = fallback
        qualify_shortname = ""
        default_realm = PUNE.IBM.COM
        default_ccache_name = KEYRING:persistent:%{uid}
    [realms]
        PUNE.IBM.COM = {
           kdc = 10.0.210.222:88
           admin_server = 10.0.210.222:749
        }
    [domain_realm]
      .redhat.com = PUNE.IBM.COM
      redhat.com = PUNE.IBM.COM
  3. krb5.conf ファイルを更新します。

    注記

    kdc.conf ファイル内のレルムを更新する必要があります。

    [root@host ~]# cat /var/kerberos/krb5kdc/kdc.conf
    
     [kdcdefaults]
     kdc_ports = 88
     kdc_tcp_ports = 88
     spake_preauth_kdc_challenge = edwards25519
    [realms]
       PUNE.IBM.COM = {
          master_key_type = aes256-cts-hmac-sha384-192
          acl_file = /var/kerberos/krb5kdc/kadm5.acl
          dict_file = /usr/share/dict/words
          default_principal_flags = +preauth
          admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
          supported_enctypes = aes256-cts-hmac-sha384-192:normal aes128-cts-hmac-sha256-128:normal aes256-cts-hmac-sha1-96:normal aes128-cts-hmac-sha1-96:normal camellia256-cts-cmac:normal camellia128-cts-cmac:normal arcfour-hmac-md5:normal
         # Supported encryption types for FIPS mode:
         #supported_enctypes = aes256-cts-hmac-sha384-192:normal aes128-cts-hmac-sha256-128:normal
      }
  4. kdb5_util を使用して KDC データベースを作成します。

    注記

    ホスト名が DNS または /etc/hosts 経由で解決できることを確認してください。

    [root@host ~]# kdb5_util create -s -r [PUNE.IBM.COM](http://pune.ibm.com/)
    
    Initializing database '/var/kerberos/krb5kdc/principal' for realm 'PUNE.IBM.COM',
    master key name 'K/M@PUNE.IBM.COM'
    You will be prompted for the database Master Password.
    It is important that you NOT FORGET this password.
    Enter KDC database master key:
    Re-enter KDC database master key to verify:
  5. 管理者を ACL ファイルに追加します。

    [root@host ~]# cat /var/kerberos/krb5kdc/kadm5.acl
    
    */admin@PUNE.IBM.COM	*

    この出力は、管理インスタンスを持つ PUNE.IBM.COM レルム内のすべてのプリンシパルが、すべての管理者権限を持っていることを示します。

  6. Kerberos データベースに管理者を追加します。

    [root@host ~]# kadmin.local
    
    Authenticating as principal root/admin@PUNE.IBM.COM with password.
    kadmin.local:  addprinc admin/admin@PUNE.IBM.COM
    No policy specified for admin/admin@PUNE.IBM.COM; defaulting to no policy
    Enter password for principal "admin/admin@PUNE.IBM.COM":
    Re-enter password for principal "admin/admin@PUNE.IBM.COM":
    Principal "admin/admin@PUNE.IBM.COM" created.
    kadmin.local:
  7. kdckadmind を起動します。

    # krb5kdc
    # kadmind

検証

  • kdckadmind が適切に実行されているかどうかを確認します。

    # ps -eaf | grep krb
    
    root     27836     1  0 07:35 ?        00:00:00 krb5kdc
    root     27846 13956  0 07:35 pts/8    00:00:00 grep --color=auto krb
    # ps -eaf | grep kad
    root     27841     1  0 07:35 ?        00:00:00 kadmind
    root     27851 13956  0 07:36 pts/8    00:00:00 grep --color=auto kad
  • セットアップが正しいかどうかを確認します。

    [root@host ~]# kinit admin/admin
    Password for admin/admin@PUNE.IBM.COM:
    
    [root@ceph-mani-o7fdxp-node4 ~]# klist
    Ticket cache: KCM:0
    Default principal: admin/admin@PUNE.IBM.COM
    
    Valid starting     Expires            Service principal
    10/25/23 06:37:08  10/26/23 06:37:01  krbtgt/PUNE.IBM.COM@PUNE.IBM.COM
        renew until 10/25/23 06:37:08

11.14.2. Kerberos クライアントのセットアップ

Kerberos クライアントマシンは KDC と同期する必要があります。NTP を使用して KDC とクライアントを確実に同期してください。時差が 5 分以上あると、Kerberos 認証が失敗し、clock skew エラーが出力されます。この手順は、Kerberos 認証に参加するすべてのシステム (NFS クライアントや NFS Ganesha コンテナーが実行されるホストなど) の前提条件です。

手順

  1. 必要な RPM を確認します。

    [root@host ~]# rpm -qa | grep krb5
    
    krb5-libs-1.20.1-9.el9_2.x86_64
    krb5-pkinit-1.20.1-9.el9_2.x86_64
    krb5-workstation-1.20.1-9.el9_2.x86_64
  2. KDC サーバーのものと同様の krb5.conf ファイルを更新します。

    [root@host ~]# cat /etc/krb5.conf
    
    # To opt out of the system crypto-policies configuration of krb5, remove the
    # symlink at /etc/krb5.conf.d/crypto-policies which will not be recreated.
    
    includedir /etc/krb5.conf.d/
    [logging]
        default = [FILE:/var/log/krb5libs.log](file:///var/log/krb5libs.log)
        kdc = [FILE:/var/log/krb5kdc.log](file:///var/log/krb5kdc.log)
        admin_server = [FILE:/var/log/kadmind.log](file:///var/log/kadmind.log)
    [libdefaults]
        dns_lookup_realm = false
        ticket_lifetime = 24h
        renew_lifetime = 7d
        forwardable = true
        rdns = false
        pkinit_anchors = [FILE:/etc/pki/tls/certs/ca-bundle.crt](file:///etc/pki/tls/certs/ca-bundle.crt)
        spake_preauth_groups = edwards25519
        dns_canonicalize_hostname = fallback
        qualify_shortname = ""
        default_realm = PUNE.IBM.COM
       default_ccache_name = KEYRING:persistent:%{uid}
    [realms]
      PUNE.IBM.COM = {
         kdc = 10.0.210.222:88
         admin_server = 10.0.210.222:749
      }
    [domain_realm]
      .IBM.com = PUNE.IBM.COM
      IBM.com = PUNE.IBM.COM

検証

  • クライアント設定を検証します。

    [root@host ~]# kinit admin/admin
    
    Password for admin/admin@PUNE.IBM.COM:
    [root@ceph-mani-o7fdxp-node5 ~]# klist
    Ticket cache: KCM:0
    Default principal: admin/admin@PUNE.IBM.COM
    
    Valid starting     Expires            Service principal
    10/25/23 08:49:12  10/26/23 08:49:08  krbtgt/PUNE.IBM.COM@PUNE.IBM.COM
      renew until 10/25/23 08:49:12

11.14.3. NFS 固有の Kerberos セットアップ

NFS サーバーとクライアントの両方のサービスプリンシパルを作成する必要があります。それぞれのキーは、キータブファイルに保存されます。これらのプリンシパルは、GSS_RPCSEC で必要な初期セキュリティーコンテキストをセットアップするために必要です。これらのサービスプリンシパルは、nfs/@REALM のような形式です。/etc/krb5.conf ファイルを稼働システムから Ceph ノードにコピーできます。

手順

  1. そのホストのサービスプリンシパルを作成します。

    [root@host ~]# kinit admin/admin
    
    Password for admin/admin@PUNE.IBM.COM:
    [root@host ~]# kadmin
    Authenticating as principal admin/admin@PUNE.IBM.COM with password.
    Password for admin/admin@PUNE.IBM.COM:
    kadmin:  addprinc -randkey nfs/<hostname>.ibm.com
    No policy specified for nfs/<hostname>.ibm.com@PUNE.IBM.COM; defaulting to no policy
    Principal "nfs/<hostname>.ibm.com@PUNE.IBM.COM" created.
  2. キーをキータブファイルに追加します。

    注記

    このステップでは、ユーザーはすでに NFS サーバー上にいて、kadmin インターフェイスを使用しています。ここで、キータブの操作は NFS サーバーのキータブに反映されます。

    kadmin:  ktadd nfs/<hostname>.ibm.com
    
    Entry for principal nfs/<hostname>.ibm.com with kvno 2, encryption type aes256-cts-hmac-sha384-192 added to keytab [FILE:/etc/krb5.keytab](file:///etc/krb5.keytab).
    Entry for principal nfs/<hostname>.ibm.com with kvno 2, encryption type aes128-cts-hmac-sha256-128 added to keytab [FILE:/etc/krb5.keytab](file:///etc/krb5.keytab).
    Entry for principal nfs/<hostname>.ibm.com with kvno 2, encryption type aes256-cts-hmac-sha1-96 added to keytab [FILE:/etc/krb5.keytab](file:///etc/krb5.keytab).
    Entry for principal nfs/<hostname>.ibm.com with kvno 2, encryption type aes128-cts-hmac-sha1-96 added to keytab [FILE:/etc/krb5.keytab](file:///etc/krb5.keytab).
    Entry for principal nfs/<hostname>.ibm.com with kvno 2, encryption type camellia256-cts-cmac added to keytab [FILE:/etc/krb5.keytab](file:///etc/krb5.keytab).
    Entry for principal nfs/<hostname>.ibm.com with kvno 2, encryption type camellia128-cts-cmac added to keytab [FILE:/etc/krb5.keytab](file:///etc/krb5.keytab).
    Entry for principal nfs/<hostname>.ibm.com with kvno 2, encryption type arcfour-hmac added to keytab [FILE:/etc/krb5.keytab](file:///etc/krb5.keytab).
    kadmin:
  3. NFS Ganesha コンテナーが実行されているすべての Ceph ノードとすべての NFS クライアントで、手順 1 と 2 を実行します。

11.14.4. NFS Ganesha コンテナーの設定

以下の手順に従って、Ceph 環境で NFS Ganesha を設定します。

手順

  1. 既存の NFS Ganesha コンテナー設定を取得します。

    [ceph: root@host /]# ceph orch ls --service-type nfs --export
    
    service_type: nfs
    service_id: c_ganesha
    service_name: nfs.c_ganesha
    placement:
      hosts:
      - host1
      - host2
      - host3
    spec:
      port: 2049
  2. /etc/krb5.conf ファイルと /etc/krb5.keytab` ファイルをホストからコンテナーに渡すように、コンテナー設定を変更します。これらのファイルは、ランタイム時に NFS Ganesha が参照して、受信したサービスチケットを検証し、Ganesha と NFS クライアント (krb5p) 間の通信を保護します。

    [root@host ~]# cat nfs.yaml
    
    service_type: nfs
    service_id: c_ganesha
    service_name: nfs.c_ganesha
    placement:
      hosts:
      - host1
      - host2
      - host3
    spec:
      port: 2049
    extra_container_args:
      - "-v"
      - "/etc/krb5.keytab:/etc/krb5.keytab:ro"
      - "-v"
      - "/etc/krb5.conf:/etc/krb5.conf:ro"
  3. 変更した nfs.yaml ファイルを cephadm シェル内で使用できるようにします。

    [root@host ~]# cephadm shell --mount nfs.yaml:/var/lib/ceph/nfs.yaml
    
    Inferring fsid ff1c1498-73ec-11ee-af38-fa163e9a17fd
    Inferring config /var/lib/ceph/ff1c1498-73ec-11ee-af38-fa163e9a17fd/mon.ceph-msaini-qp49z7-node1-installer/config
    Using ceph image with id 'fada497f9c5f' and tag 'ceph-7.0-rhel-9-containers-candidate-73711-20231018030025' created on 2023-10-18 03:03:39 +0000 UTC
    registry-proxy.engineering.ibm.com/rh-osbs/rhceph@sha256:e66e5dd79d021f3204a183f5dbe4537d0c0e4b466df3b2cc4d50cc79c0f34d75
  4. ファイルに必要な変更が加えられているかどうかを検証します。

    [ceph: root@host /]# cat /var/lib/ceph/nfs.yaml
    
    service_type: nfs
    service_id: c_ganesha
    service_name: nfs.c_ganesha
    placement:
      hosts:
      - host1
      - host2
      - host3
    spec:
      port: 2049
    extra_container_args:
      - "-v"
      - "/etc/krb5.keytab:/etc/krb5.keytab:ro"
      - "-v"
      - "/etc/krb5.conf:/etc/krb5.conf:ro"
  5. 必要な変更を NFS Ganesha コンテナーに適用し、コンテナーを再デプロイします。

    [ceph: root@host /]# ceph orch apply -i /var/lib/ceph/nfs.yaml
    
    Scheduled nfs.c_ganesha update...
    [ceph: root@ceph-msaini-qp49z7-node1-installer /]# ceph orch redeploy nfs.c_ganesha
    Scheduled to redeploy nfs.c_ganesha.1.0.ceph-msaini-qp49z7-node1-installer.sxzuts on host 'ceph-msaini-qp49z7-node1-installer'
    Scheduled to redeploy nfs.c_ganesha.2.0.ceph-msaini-qp49z7-node2.psuvki on host 'ceph-msaini-qp49z7-node2'
    Scheduled to redeploy nfs.c_ganesha.0.0.ceph-msaini-qp49z7-node3.qizzvk on host 'ceph-msaini-qp49z7-node3'
  6. 再デプロイされたサービスに必要な変更が加えられているかどうかを検証します。

    [ceph: root@host /]# ceph orch ls --service-type nfs --export
    
    service_type: nfs
    service_id: c_ganesha
    service_name: nfs.c_ganesha
    placement:
      hosts:
      - ceph-msaini-qp49z7-node1-installer
      - ceph-msaini-qp49z7-node2
      - ceph-msaini-qp49z7-node3
    extra_container_args:
    - -v
    - /etc/krb5.keytab:/etc/krb5.keytab:ro
    - -v
    - /etc/krb5.conf:/etc/krb5.conf:ro
    spec:
      port: 2049
  7. krb5* (krb5, krb5i, krb5p) セキュリティーフレーバーを持つようにエクスポート定義を変更します。

    注記

    上記のセットアップを完了した後、このようなエクスポートを作成できます。

    [ceph: root@host /]# ceph nfs export info c_ganesha /exp1
    
    {
      "access_type": "RW",
      "clients": [],
      "cluster_id": "c_ganesha",
      "export_id": 1,
      "fsal": {
        "fs_name": "fs1",
        "name": "CEPH",
        "user_id": "nfs.c_ganesha.1"
      },
      "path": "/volumes/_nogroup/exp1/81f9a67e-ddf1-4b5a-9fe0-d87effc7ca16",
      "protocols": [
        4
      ],
      "pseudo": "/exp1",
      "sectype": [
        "krb5"
      ],
      "security_label": true,
      "squash": "none",
      "transports": [
        "TCP"
      ]
    }

11.14.5. NFS クライアントサイドのアクション

以下は、NFS クライアントが実行できる操作の一部です。

手順

  1. サービスプリンシパルを作成します。

    kadmin:  addprinc -randkey nfs/<hostname>.ibm.com@PUNE.IBM.COM
    No policy specified for nfs/<hostname>.ibm.com@PUNE.IBM.COM; defaulting to no policy
    Principal "nfs/<hostname>.ibm.com@PUNE.IBM.COM" created.
    kadmin:  ktadd nfs/<hostname>.ibm.com@PUNE.IBM.COM
    Entry for principal nfs/<hostname>.ibm.com@PUNE.IBM.COM with kvno 2, encryption type aes256-cts-hmac-sha384-192 added to keytab [FILE:/etc/krb5.keytab](file:///etc/krb5.keytab).
    Entry for principal nfs/<hostname>.ibm.com@PUNE.IBM.COM with kvno 2, encryption type aes128-cts-hmac-sha256-128 added to keytab [FILE:/etc/krb5.keytab](file:///etc/krb5.keytab).
    Entry for principal nfs/<hostname>.ibm.com@PUNE.IBM.COM with kvno 2, encryption type aes256-cts-hmac-sha1-96 added to keytab [FILE:/etc/krb5.keytab](file:///etc/krb5.keytab).
    Entry for principal nfs/<hostname>.ibm.com@PUNE.IBM.COM with kvno 2, encryption type aes128-cts-hmac-sha1-96 added to keytab [FILE:/etc/krb5.keytab](file:///etc/krb5.keytab).
    Entry for principal nfs/<hostname>.ibm.com@PUNE.IBM.COM with kvno 2, encryption type camellia256-cts-cmac added to keytab [FILE:/etc/krb5.keytab](file:///etc/krb5.keytab).
    Entry for principal nfs/<hostname>.ibm.com@PUNE.IBM.COM with kvno 2, encryption type camellia128-cts-cmac added to keytab [FILE:/etc/krb5.keytab](file:///etc/krb5.keytab).
    Entry for principal nfs/<hostname>.ibm.com@PUNE.IBM.COM with kvno 2, encryption type arcfour-hmac added to keytab [FILE:/etc/krb5.keytab](file:///etc/krb5.keytab).
  2. rpc.gssd サービスを再起動して、変更された/新しいキータブファイルを有効にします。

    # systemctl restart rpc-gssd
  3. NFS エクスポートをマウントします。

    構文

    [root@host ~]# mount -t nfs -o vers=4.1,port=2049 <IP>:/<export_name> >mount_point>

    mount -t nfs -o vers=4.1,port=2049 10.8.128.233:/ganesha /mnt/test/

  4. ユーザーを作成します。NFS エクスポートがマウントされると、マウントされたエクスポートを操作するために通常ユーザーが使用されます。これらの通常ユーザー (通常はシステム上のローカルユーザー、または LDAP/AD などの集中型システムからのユーザー) は、Kerberos セットアップの一部である必要があります。セットアップの種類に応じて、ローカルユーザーも KDC に作成する必要があります。

11.14.6. セットアップの検証

セットアップを検証するには、以下の手順に従ってください。

手順

  • Kerberos チケットを 使用せずに、通常のユーザーとしてエクスポートにアクセスします。

    [user@host ~]$ klist
    
    klist: Credentials cache 'KCM:1001' not found
    
    [user@host ~]$ cd /mnt
    -bash: cd: /mnt: Permission denied
  • Kerberos チケットを 使用して、通常のユーザーとしてエクスポートにアクセスします。

    [user@host ~]$ kinit sachin
    
    Password for user@PUNE.IBM.COM:
    
    [user@host ~]$ klist
    Ticket cache: KCM:1001
    Default principal: user@PUNE.IBM.COM
    
    Valid starting     Expires            Service principal
    10/27/23 12:57:21  10/28/23 12:57:17  krbtgt/PUNE.IBM.COM@PUNE.IBM.COM
      renew until 10/27/23 12:57:21
    
    [user@host ~]$ cd /mnt
    
    [user@host mnt]$ klist
    
    Ticket cache: KCM:1001
    Default principal: user@PUNE.IBM.COM
    
    Valid starting     Expires            Service principal
    10/27/23 12:57:21  10/28/23 12:57:17  krbtgt/PUNE.IBM.COM@PUNE.IBM.COM
    renew until 10/27/23 12:57:21
    10/27/23 12:57:28  10/28/23 12:57:17  nfs/ceph-msaini-qp49z7-node1-installer.ibm.com@
    renew until 10/27/23 12:57:21
    Ticket server: nfs/ceph-msaini-qp49z7-node1-installer.ibm.com@PUNE.IBM.COM
注記

注記: nfs/ service のチケットはクライアント上で監視されます。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.