11.14. Kerberos 集成


Kerberos 是一种计算机网络安全协议,提供集中身份验证服务器,向服务器验证用户,反之亦然。在 Kerberos 身份验证中,服务器和数据库用于客户端身份验证。

11.14.1. 设置 KDC (根据要求)

Kerberos 作为第三方可信服务器运行,称为密钥分发中心(KDC),其中每个用户和服务都是主体。KDC 包含有关所有客户端(用户主体、服务主体)的信息,因此需要安全。在 Kerberos 设置中,因为 KDC 是单一故障点,建议有一个主 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
Copy to Clipboard Toggle word wrap
重要

确保设置中的所有涉及的节点都存在域名(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
    Copy to Clipboard Toggle word wrap
    注意
    • 最好根据 Kerberos REALM 名称具有域名。例如,Realm - PUNE.IBM.COM,管理员主体 - admin/admin
    • 编辑安装的配置文件,以反映新的 KDC。请注意,KDC 可以作为 IP 地址或 DNS 名称提供。
  2. 更新 krb5.conf 文件:

    注意

    您需要使用 krb5.conf 文件中的 kdcadmin_server IP 更新所有域(default_realmdomain_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
    Copy to Clipboard Toggle word wrap
  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
      }
    Copy to Clipboard Toggle word wrap
  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:
    Copy to Clipboard Toggle word wrap
  5. 将管理员添加到 ACL 文件中:

    [root@host ~]# cat /var/kerberos/krb5kdc/kadm5.acl
    
    */admin@PUNE.IBM.COM	*
    Copy to Clipboard Toggle word wrap

    输出表明,带有 admin 实例的 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:
    Copy to Clipboard Toggle word wrap
  7. 启动 kdckadmind:

    # krb5kdc
    # kadmind
    Copy to Clipboard Toggle word wrap

验证

  • 检查 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
    Copy to Clipboard Toggle word wrap
  • 检查设置是否正确:

    [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
    Copy to Clipboard Toggle word wrap

11.14.2. 设置 Kerberos 客户端

Kerberos 客户端计算机应该与 KDC 同步。确保使用 NTP 同步 KDC 和客户端。五分钟或更长时间差会导致 Kerberos 身份验证失败,并抛出时钟偏移错误。此步骤是所有要参与 NFS 客户端等 Kerberos 身份验证的系统(NFS Ganesha 容器将运行 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
    Copy to Clipboard Toggle word wrap
  2. 更新 krb5.conf 文件,类似于 KDC 服务器上的文件:

    [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
    Copy to Clipboard Toggle word wrap

验证

  • 验证客户端设置:

    [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
    Copy to Clipboard Toggle word wrap

11.14.3. NFS 特定的 Kerberos 设置

您需要为 NFS 服务器和客户端创建服务主体。对应的密钥存储在 keytab 文件中。这些主体需要设置 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.
    Copy to Clipboard Toggle word wrap
  2. 将密钥添加到 keytab 文件中:

    注意

    在这一步中,您已位于 NFS 服务器上,并使用 kadmin 接口。在这里,keytab 操作反映了 NFS 服务器的 keytab。

    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:
    Copy to Clipboard Toggle word wrap
  3. 在运行 NFS Ganesha 容器以及所有 NFS 客户端的所有 Ceph 节点上运行第 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
    Copy to Clipboard Toggle word wrap
  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"
    Copy to Clipboard Toggle word wrap
  3. 使修改后的 nfs.yaml 文件在 cephadm shell 中可用:

    [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
    Copy to Clipboard Toggle word wrap
  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"
    Copy to Clipboard Toggle word wrap
  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'
    Copy to Clipboard Toggle word wrap
  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
    Copy to Clipboard Toggle word wrap
  7. 修改导出定义,使其具有 krb5*(krb5i、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"
      ]
    }
    Copy to Clipboard Toggle word wrap

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).
    Copy to Clipboard Toggle word wrap
  2. 重启 rpc.gssd 服务,使修改/新 keytab 文件生效:

    # systemctl restart rpc-gssd
    Copy to Clipboard Toggle word wrap
  3. 挂载 NFS 导出:

    语法

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

    示例

    mount -t nfs -o vers=4.1,port=2049 10.8.128.233:/ganesha /mnt/test/
    Copy to Clipboard Toggle word wrap

  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
    Copy to Clipboard Toggle word wrap
  • 以普通用户身份访问导出,使用 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
    Copy to Clipboard Toggle word wrap
注意

注意:在客户端上观察到 nfs/ 服务的 Tickets。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat