了解如何使用命令行界面通过 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 服务版本。
过程
- 设置 Kerberos 客户端。
注意: Kerberos 客户机必须与 KDC 保持时间同步。 建议使用 NTP 同步 KDC 和客户端。 时间差达到或超过 5 分钟会导致 Kerberos 验证失败,并产生时钟偏移错误。
- 检查是否有以下 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
- 更新 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
- 验证客户端设置。
[ 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
- 配置 NFS 专用 Kerberos.
为 NFS 服务器和客户端创建服务原则。 相应的密钥存储在 keytab 文件中。 这些原则是建立初始安全上下文(GSS_RPCSEC 要求)所必需的。 这些服务原则的格式类似于 nfs/@REALM。 您可以将 /etc/krb5.conf 从工作系统复制到 Ceph 节点。
在运行 Ceph NFS 服务容器的所有 Ceph 节点和所有 NFS 客户端上执行以下 2 个步骤。
- 为主机创建服务委托人。
[ 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 "。
- 将密钥添加到密钥表文件中。
在下面的示例中,命令通过
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:
- 在 Ceph 环境中更改 Ceph NFS 服务容器设置。
- 获取现有的 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
- 修改容器配置文件 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"
- 在
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
- 验证文件是否有必要的更改。
[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"
- 将所需更改应用到 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 '
- 验证重新部署的服务是否有所需的更改。
[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
- 修改导出定义,使 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
有效起始时间 到期时间 服务主体