通过为 Ceph NFS 服务使用 Kerberos 启用加密功能

了解如何使用命令行界面通过 Ceph NFS 服务配置 Kerberos 加密。

开始之前

在开始之前,请确保具备以下先决条件:
  • 运行中的 IBM Storage Ceph 8.1 集群。
  • 服务器上安装并配置了 Ceph NFS 服务。
  • 运行中的 Kerberos Key Distribution Centre (KDC)。
  • 确保 Ceph 集群中的所有节点和 NFS 客户端节点都有域名。 使用完全合格域名 (FQDN)。
  • NFS 格涅沙节点与 KDC 保持时间同步

关于此任务

使用此过程配置 Ceph File System ( CephFS ) 以使用基于 Kerberos 的安全性与 Ceph NFS 服务协同工作。 这种设置可提供强大的身份验证功能,保护客户端/服务器在网络上的通信。

Kerberos Ceph 服务中的支持,从 版本开始提供。 NFS 4.0 确保您的 Ceph 群集正在运行受支持的 Ceph NFS 服务版本。

过程

  1. 设置 Kerberos 客户端。
    注意: Kerberos 客户机必须与 KDC 保持时间同步。 建议使用 NTP 同步 KDC 和客户端。 时间差达到或超过 5 分钟会导致 Kerberos 验证失败,并产生时钟偏移错误。
    1. 检查是否有以下 RPM。 如果没有,请使用 dnf install 命令安装。
      [ root@ceph-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. 更新 krb5.conf 文件,与 KDC 服务器上的配置文件类似。
      例如,
      [ root@ceph-host ~]# cat /etc/krb5.conf
      # 要退出 krb5 的系统加密策略配置,请移除
      # 符号链接位于 /etc/krb5.conf.d/crypto-policies ,该链接将不会被重建。
      includedir /etc/krb5.conf.d/
      [日志记录]
          默认值 = [ FILE:/var/log/krb5libs.log ]
          kdc = [ FILE:/var/log/krb5kdc.log ]
          管理服务器 = [ FILE:/var/log/kadmind.log ]
      [libdefaults]
          dns_lookup_realm = false
          票证有效期 = 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 = 备用
          qualify_shortname = ""
          默认域 = REALM_NAME.COM
         默认密钥库名称 = KEYRING:persistent:% {uid}
      [realms]
        REALM_NAME.COM = {
           kdc = 10.0.10.222:88
           管理服务器 = 10.0.10.222:749
        }
      [domain_realm]
        .REALM_NAME.COM = NAME.REALM_NAME.COM
        REALM_NAME.COM = NAME.REALM_NAME.COM
      
    3. 验证客户端设置。
      [ root@ceph-host ~]# kinit admin/admin
      admin/admin@NAME.REALM 的密码 _NAME.COM:
      [ root@ceph-host ~]# klist
      票务缓存: KCM:0
      默认主体: admin/admin@NAME.REALM_NAME.COsM
      
      有效起始时间 到期时间 服务主体
      2023年10月25日 08:49:12 2023年10月26日 08:49:08 krbtgt/NAME.REALM_NAME.COM @ NAME.REALM_NAME.COM
      续期至2023年10月25日08:49:12
      
  2. 配置 NFS 专用 Kerberos.

    为 NFS 服务器和客户端创建服务原则。 相应的密钥存储在 keytab 文件中。 这些原则是建立初始安全上下文(GSS_RPCSEC 要求)所必需的。 这些服务原则的格式类似于 nfs/@REALM。 您可以将 /etc/krb5.conf 从工作系统复制到 Ceph 节点。

    在运行 Ceph NFS 服务容器的所有 Ceph 节点和所有 NFS 客户端上执行以下 2 个步骤。

    1. 为主机创建服务委托人。
      [ root@ceph-host ~]# kinit admin/admin
      admin/admin@XYZ.ABC.COM 的密码:
      [ root@ceph-host ~]# kadmin
      以主体 admin/admin@XYZ.ABC.COM 身份进行密码认证。
      admin/admin@XYZ.ABC.COM 的密码:
      kadmin: addprinc -randkey nfs/ceph-host.abc.com
      未为 nfs/ceph-host.abc.com @ XYZ.ABC.COM 指定策略;默认不采用策略
      创建了主要联系人" nfs/ceph-host.abc.com @ XYZ.ABC.COM "。
      
    2. 将密钥添加到密钥表文件中。
      在下面的示例中,命令通过 kadmin 接口在 NFS 服务器中运行。 密钥标签操作反映的是 NFS 服务器的密钥标签。
      kadmin: ktadd nfs/ceph-host.abc.com
      为主要密钥 nfs/ceph-host.abc.com 添加条目,包含kvno 2,加密类型 aes256-cts-hmac-sha384-192 ,已添加至密钥表[ FILE:/etc/krb5.keytab ]( file:///etc/krb5.keytab )。
      为主要密钥 nfs/ceph-host.abc.com 添加条目,包含kvno 2,加密类型 aes128-cts-hmac-sha256-128 ,已添加至密钥表[ FILE:/etc/krb5.keytab ]( file:///etc/krb5.keytab )。
      为主要密钥 nfs/ceph-host.abc.com 添加条目,包含kvno 2,加密类型 aes256-cts-hmac-sha1-96 ,已添加至密钥表[ FILE:/etc/krb5.keytab ]( file:///etc/krb5.keytab )。
      为主要密钥 nfs/ceph-host.abc.com 添加条目,包含kvno 2,加密类型 aes128-cts-hmac-sha1-96 ,已添加至密钥表[ FILE:/etc/krb5.keytab ]( file:///etc/krb5.keytab )。
      为主要密钥 nfs/ceph-host.abc.com 添加条目,包含kvno 2,加密类型 camellia256-cts-cmac ,已添加至密钥库[ FILE:/etc/krb5.keytab ]( file:///etc/krb5.keytab )。
      为主要密钥 nfs/ceph-host.abc.com 添加条目,包含kvno 2,加密类型 camellia128-cts-cmac ,已添加至密钥表[ FILE:/etc/krb5.keytab ]( file:///etc/krb5.keytab )。
      为主要密钥 nfs/ceph-host.abc.com 添加条目,包含kvno 2,加密类型arcfour-hmac,已添加至密钥表[ FILE:/etc/krb5.keytab ]( file:///etc/krb5.keytab )。
      kadmin:
      
  3. 在 Ceph 环境中更改 Ceph NFS 服务容器设置。
    1. 获取现有的 Ceph NFS 服务容器配置。
      [ceph: root@ceph-host /]# ceph orch ls --service-type nfs --export
      服务类型: NFS
      服务ID: c_ganesha
      服务名称: nfs.c_ganesha
      placement:
        hosts:
        - ceph-host-node1-installer
        - ceph-host-qp49z7-node2
        - ceph-host-qp49z7-node3
      spec:
        port: 2049
      
    2. 修改容器配置文件 nfs.yaml ,以便从主机向容器传递 /etc/krb5.conf/etc/krb5.keytab 文件。 NFS Ganesha 在运行时会参考这些文件来验证传入的服务单,并确保 Ganesha 与 客户端 ( ) 之间的通信安全。 NFSkrb5p
      [ root@ceph-host ~]# cat nfs.yaml
      服务类型: NFS
      服务ID: c_ganesha
      服务名称: nfs.c_ganesha
      placement:
        hosts:
        - ceph-host-node1-installer
        - ceph-host-node2
        - ceph-host-node3
      spec:
        port: 2049
      额外容器参数:
        - "-v"
        - "/etc/krb5.keytab:/etc/krb5.keytab:ro"
        - "-v"
        - "/etc/krb5.conf:/etc/krb5.conf:ro"
      
    3. Cephadm shell 中提供修改后的 nfs.yaml 文件。
      [ root@ceph-host ~]# cephadm shell --mount nfs.yaml:/var/lib/ceph/nfs.yaml
      推断fsid ff1c1498-73ec-11ee-af38-fa163e9a17fd
      推断配置 /var/lib/ceph/ff1c1498-73ec-11ee-af38-fa163e9a17fd/mon.ceph-msaini-qp49z7-node1-installer/config
      使用ID为' fada497f9c5f '、标签为' ceph-7.0-rhel-9-containers-candidate-73711-20231018030025 '的CEPH镜像,该镜像创建于2023年10月18日03:03:39(UTC+0000)
      registry-proxy.engineering.abc.com/rh-osbs/rhceph@sha256:e66e5dd79d021f3204a183f5dbe4537d0c0e4b466df3b2cc4d50cc79c0f34d75
      
    4. 验证文件是否有必要的更改。
      [ceph: root@ceph-host /]# cat /var/lib/ceph/nfs.yaml
      服务类型: NFS
      服务ID: c_ganesha
      服务名称: nfs.c_ganesha
      placement:
        hosts:
        - ceph-host-node1-installer
        - ceph-host-node2
        - ceph-host-node3
      spec:
        port: 2049
      额外容器参数:
        - "-v"
        - "/etc/krb5.keytab:/etc/krb5.keytab:ro"
        - "-v"
        - "/etc/krb5.conf:/etc/krb5.conf:ro"
      
    5. 将所需更改应用到 Ceph NFS 服务容器,然后重新部署容器。
      [ceph: root@ceph-host /]# ceph orch apply -i /var/lib/ceph/nfs.yaml
      计划中的 nfs.c_ganesha 更新...
      [ceph: root@ceph-host /]# ceph orch redeploy nfs.c_ganesha
      计划将 nfs.c_ganesha.1.0.ceph-host-qp49z7-node1-installer.sxzuts 重新部署到主机 ' ceph-msaini-qp49z7-node1-installer '
      计划将 nfs.c_ganesha.2.0.ceph-host-qp49z7-node2.psuvki 重部署到主机 ' ceph-host-qp49z7-node2 '
      计划将 nfs.c_ganesha.0.0.ceph-host-qp49z7-node3.qizzvk 重新部署到主机 ' ceph-host-qp49z7-node3 '
      
    6. 验证重新部署的服务是否有所需的更改。
      [ceph: root@ceph-host /]# ceph orch ls --service-type nfs --export
      服务类型: NFS
      服务ID: c_ganesha
      服务名称: nfs.c_ganesha
      placement:
        hosts:
        - ceph-host-qp49z7-node1-installer
        - ceph-host-qp49z7-node2
        - ceph-host-qp49z7-node3
      额外容器参数:
      - -v
      - /etc/krb5.keytab:/etc/krb5.keytab:ro
      - -v
      - /etc/krb5.conf:/etc/krb5.conf:ro
      spec:
        port: 2049
      
  4. 修改导出定义,使 krb5* ( krb5, krb5i, krb5p ) 具有安全味道。
    [ceph: root@ceph-host /]# ceph nfs export info c_ganesha /exp1
    {
      "访问类型": "读写",
      "客户": [],
      "集群ID": "c_ganesha",
      "export_id": 1,
      "fsal": {
        "fs_name": " fs1 ",
        "name": "CEPH",
        "user_id": " nfs.c_ganesha.1 "
      },
      "路径": " /volumes/_nogroup/exp1/81f9a67e-ddf1-4b5a-9fe0-d87effc7ca16 ",
      "协议": [
        4
      ],
      "伪": " /exp1 ",
      "sectype": [
        "krb5"
      ],
      "security_label": true,
      "squash": "none",
      "运输工具": [
        TCP
      ]
    }
    

下一步操作

您可以以普通用户身份访问导出 PQR ,验证设置,而无需 Kerberos 机票。 你会收到拒绝权限的信息。

[ pqr@ceph-host ~]$ klist
klist:未找到凭据缓存 ' KCM:1001 '
[ abc@ceph-host ~]$ cd /mnt
-bash: cd: /mnt : 权限不足

使用 Kerberos 票据访问导出。

[ pqr@ceph-host ~]$ kinit pqrabc
pqr@XYZ.ABC.COM 的密码:
[ pqr@ceph-host ~]$ klist
票务缓存: KCM:1001
默认主体: pqr@XYZ.ABC.COM

有效起始时间 到期时间 服务主体
2023年10月27日 12:57:21 2023年10月28日 12:57:17 krbtgt/XYZ.ABC.COM @ XYZ.ABC.COM
  续期至2023年10月27日12:57:21
[ pqr@ceph-host ~]$ cd /mnt
[ pqr@ceph-host mnt]$ klist
票务缓存: KCM:1001
默认主体: pqr@XYZ.ABC.COM

有效起始时间 到期时间 服务主体