NFS 配置 Kerberos 身份认证.note
一、NFS 配置 Kerberos 身份认证:
注意:Kerberos环境时间必须同步,机器必须有FQDN
1、配置 NFS服务端:
(1)配置 DNS解析:
# 不强制要求DNS,只需要能够解析FQDN即可(配置hosts也行):
## Client需要能够解析 KDC、Server的FQDN
## Server需要能够解析 KDC 的FQDN
## KDC需要能够解析本机的FQDN(默认就能)哪怕KDC和Server在同一台机也是这样
(2)配置 KDC(TCP 88、UDP 88、750):
2.1、安装 KDC:
apt install -y krb5-user krb5-admin-server输入 KDC域名(会自动读取当前FQDN后缀):

接下来两个都 输入 NFS 服务器的地址(域名):


2.2、创建principal并导出 keytab:
# 创建 krb5 数据库:
krb5_newrealm
NFS服务票据的primary名称是固定的,必须为 nfs/FQDN@REALM(小写)

注意:KDC的票据严格区分大小写,这里不能够有大小,哪怕服务器的FQDN是大写,这里也必须写小写
## principal命名规则:primary(一般是服务要求的名称)/instance(一般是票据存放机器的FQDN[小写])@realm(域名,这个不用写,会自动补全为当前 realm)
# 注意:哪怕FQDN是大写的,KDC票据这里也必须得小写
## 为NFS服务端创建:
kadmin.local
addprinc -randkey nfs/server2.shanghai.org
ktadd -k /root/nfs.keytab nfs/server2.shanghai.org
# 如果要导出多个票据:ktadd -k /root/nfs.keytab nfs/server2.shanghai.org host/server2.shanghai.org
## 为NFS客户端创建(虽然能够直接拷贝服务端的keytab,但是那不是标准做法,标准做法应该是单独也为客户端创建一张票据):
kadmin.local
addprinc -randkey nfs/server3.shanghai.org
ktadd -k /root/nfs_server3.keytab nfs/server3.shanghai.org
quit
keytab 应该是 root:root 属主,并且是 600权限(这两点默认就是)
2.3、创建 Kerberos 用户:
kadmin.local
addprinc nfsuser
quit
(3)配置 NFS共享:
# 安装 NFS Server:
apt install -y nfs-kernel-server3.1、在本地创建一个与 kerberos 同名的用户:
adduser nfsuser3.2、NFS 启用 GSS:
# nfs启用 GSS:
vim /etc/default/nfs-kernel-server
systemctl restart nfs-kernel-server rpc-gssd
3.3、指定NFSv4的 idmap域:
# 配置 NFSv4的 idmap域(小写):
vim /etc/idmapd.conf
3.4、配置NFS共享:
mkdir -p /share/nfs
chmod 777 /share/nfs
vim /etc/exports
# 两种写法:NFSv4 官方建议使用这种伪根写法
写法一:使用 NFSv4 推荐写法(伪根 + 实际共享目录):
定义一个专用目录,作为NFSv4 伪根,其下的子目录分别映射NFS真实目录,这样客户端挂载时,只能看到根 /,以及根 / 下的目录
# 约等于 chroot
# 结构层面类似 autofs,先定义一个“入口目录”,再在其下面按需映射不同的真实挂载对象。
mkdir -p /srv/nfs4
# 伪根不需要给权限,读写权限只需要给真实目录即可# 然后把真实目录绑定到伪根下:
mkdir /srv/nfs4/share
mount --bind /share/nfs /srv/nfs4/share //临时有效
# 要配置重启不失效:
vim /etc/fstab
systemctl daemon-reload
mount -a
(df -h 中没有显示是正常的)
# 配置 NFS共享:
vim /etc/exports
## 这两个参数必须要加:
# fsid=0 //(必须要有)将目录定义为 伪根目录
# crossmnt //表示是否允许客户端访问一个 已经被挂载过的目录
exportfs -av

或(写法不一样,作用一样):

exportfs -av

写法二:旧写法
不需要加 fsid=0,因为它是用来将目录定义为 伪根的

2、配置 NFS客户端:
客户端 DNS 需要能够解析 shanghai.org 到 这个NFS服务器上,因为前面keytab是 nfs/shanghai.org@SHANGHAI.ORG
(1)获取 KDC 票据:
1.1、安装软件包:
apt install -y nfs-common krb5-user输入 KDC域名(会自动读取当前FQDN后缀):

接下来两个都 输入 NFS 服务器的地址(域名):


1.2、获取 kerberos 票据:
因为rpc-gssd 服务必须要求本地有 .keytab票据才能启动,理论上我们需要在 KDC上手动再为客户端生成一张票据的,但是这里可以偷懒,直接复制服务端的票据给客户端
# 将为客户端生成的票据拷贝过来(虽然能够直接拷贝服务端的keytab,但是那不是标准做法,标准做法应该是单独也为客户端创建一张票据):
scp root@192.168.10.1:~/nfs_server3.keytab /etc/krb5.keytab
# 然后启动 rpc-gssd 服务(必须有 krb5.keytab才能启动):
systemctl enable rpc-gssd --now(2)挂载 NFS:
# 安装 NFS客户端:
apt install -y nfs-commonmkdir /test
vim /etc/fstab
# _netdev //告诉systemd这是网络设备(依赖网络),避免开机时网络未就绪导致挂载失败这里环境中的 NFS服务器 使用的是写法二,NFS4的标准 伪根写法
注意,这里的地址必须和 票据中的一样,否则会提示访问拒绝
·NFS伪根挂载:


可以看到,伪根挂载中,客户端这里直接显示的就是 根share /share
·旧写法挂载:
