参考文章
https://web.mit.edu/kerberos/krb5-latest/doc/admin/conf_files/krb5_conf.html#libdefaults
https://kb.synology.cn/zh-cn/DSM/tutorial/how_to_set_up_kerberized_NFS
https://www.ibm.com/docs/en/zos/2.5.0?topic=reference-zos-nfs-server-kerberos-authentication
测试环境
域控:
windows server 2016
NAS1(加域):
DSM 6.2.3 update3
NAS2(加域):
DSM 7.1.1 update5
Clinet1:
OracleLinux 9.1
Clinet2:
Ubuntu 22.04 LTS
Clinet3(加域):
Windows 11 22H2 企业版
DNS解析配置
建立反向查找区域
首先在域控的DNS服务器上建立反向查找区域,如果已经存在则可以跳过以下步骤
新建区域:
选择主要区域:
默认配置:
添加ipv4区域:
选择区域的IP地址,windows server所在网段为192.168.0.0,这边输入192.168.0即可:
默认配置:
点击完成:
添加NAS的反向解析记录
确认DNS服务器中是否有反向查找区域:
添加反向解析前,查询NAS的IP是找不到具体主机名的:
在正向查找区域的对应域名下添加主机的正向解析记录:
选择添加对应的PTR记录:
添加完成后就可以正常使用NAS的ip解析出主机名了:
按以上步骤再添加另一台NAS的记录:
添加完成后反向查找区域配置如下:
建立用户以及生成证书
在域控的Active Directory 用户和计算机中建立NAS主机名的对应用户:
建立NAS用户
NAS主机名称必须与NAS用户一致,否则会认证不通过
NAS主机名可以在 控制面板->网络->常规中查看:
建立用户:
取消勾选"用户下次登录时须更改密码",勾选"密码永不过期":
右键用户点击属性,在账户的账号选项中勾选并应用 "该账户支持 Kerberos AES 256 位加密":
生成NAS用户证书
打开Windows server的CMD,输入以下命令来进行证书生成(如果证书名相同则会覆盖):
ktpass princ nfs/[NAS用户名].[小写域名]@[大写域名] mapuser [NAS用户名] pass "[NAS用户密码]" out [证书文件名].keytab crypto AES256-SHA1 ptype KRB5_NT_PRINCIPAL
例如:
ktpass princ nfs/ds3617xs7.zhugh.local@ZHUGH.LOCAL mapuser ds3617xs7 pass "PASSWORD" out nfsserver.keytab crypto AES256-SHA1 ptype KRB5_NT_PRINCIPAL
如果登录域控的用户是administrator,则生成的证书存储在C:\Users\Administrator
下:
建立Linux客户端用户
客户端主机名称必须与客户端用户一致,否则会认证不通过
建立用户:
取消勾选"用户下次登录时须更改密码",勾选"密码永不过期":
右键用户点击属性,在账户的账号选项中勾选并应用 "该账户支持 Kerberos AES 256 位加密":
生成Linux客户端用户证书
打开Windows server的CMD,输入以下命令来进行证书生成(如果证书名相同则会覆盖):
ktpass princ nfs/[NAS用户名].[小写域名]@[大写域名] mapuser [NAS用户名] pass "[NAS用户密码]" out [证书文件名].keytab crypto AES256-SHA1 ptype KRB5_NT_PRINCIPAL
例如:
ktpass princ nfs/oraclelinux9.zhugh.local@ZHUGH.LOCAL mapuser oraclelinux9 pass "PASSWORD" out krb5.keytab crypto AES256-SHA1 ptype KRB5_NT_PRINCIPAL
如果登录域控的用户是administrator,则生成的证书存储在C:\Users\Administrator
下:
建立Windows客户端用户
如果客户端电脑上已经登录域用户则不需要建立,如果没有的话则需要将Windows加入域并登录域用户:
取消勾选"用户下次登录时须更改密码",勾选"密码永不过期":
右键用户点击属性,在账户的账号选项中勾选并应用 "该账户支持 Kerberos AES 256 位加密":
配置NAS NFS server
DSM 6 配置
在控制面板->文件服务->NFS 中启用 NFSv4.1支持,在NFSv4域中填写域名:
在 NFS 的高级设置中点击 Kerberos设置,在Kerberos密钥中选择导入,此处导入之前生成的NAS证书:
导入后查看主体中的主机名是否为当前 NAS 主机名:
DSM 7 配置
在控制面板->文件服务->NFS 中启用 NFS,并选择最大NFS协议为:NFSv4.1
在高级设置的 NFSv4/4.1域 中填写域名:
在 NFS 的高级设置中点击 Kerberos设置,在Kerberos密钥中选择导入,此处导入之前生成的NAS证书:
导入后查看主体中的主机名是否为当前 NAS 主机名:
建立Kerberos认证的共享文件夹
建立新的共享文件夹或者直接编辑需要Kerberos认证的共享文件夹的共享文件夹,在NFS权限中新增权限,添加NFS客户端的IP,这边添加的是允许所有客户端"*",在安全性中取消勾选"AUTH_SYS",只勾选"Kerberos 验证":
如果调整了权限映射规则,则无法通过Kerberos证书来区分用户权限
配置完成后如下:
配置Linux客户端
OracleLinux 9.1
安装客户端环境
安装NFS client以及Kerberos验证模块:
yum -y install nfs-utils krb5-devel krb5-workstation
调整DNS配置
调整OracleLinux的DNS为域控DNS server:
cat /etc/resolv.conf
可以安装nslookup来验证:
yum install bind-utils -y
调整Kerberos验证模块配置
备份配置档:
cp -ar /etc/krb5.conf /etc/krb5.conf.bk
修改配置档:
[libdefaults]
default_realm = [域名大写]
[domain_realm]
.[域名小写] = [域名大写]
[域名小写] = [域名大写]
例如:
[libdefaults]
default_realm = ZHUGH.LOCAL
[domain_realm]
.zhugh.local = ZHUGH.LOCAL
zhugh.local = ZHUGH.LOCAL
导入Linux客户端用户证书
如果NAS有装Web Staiton套件,这边可以将证书文件放NAS的web共享文件夹下:
在linux可以使用wget命令直接下载:
wget http://192.168.0.68/krb5.keytab
将证书放到默认位置:
cp krb5.keytab /etc/krb5.keytab
然后导入证书:
klist -k /etc/krb5.keytab
检查证书是否正常:
klist -kte
重启服务让Kerberos配置生效:
systemctl restart rpc-gssd
测试装载
建立Linux本地文件夹
mkdir /nfsmount1
mkdir /nfsmount2
使用以下命令测试装载:
mount -t nfs -vvv -o vers=4,sec=krb5 [NASIP]:[NAS共享文件夹路径] [Linux本地路径]
例如:
mount -t nfs -vvv -o vers=4,sec=krb5 192.168.0.62:/volume1/krb5 /nfsmount1
mount -t nfs -vvv -o vers=4,sec=krb5 192.168.0.68:/volume1/krb5 /nfsmount2
Ubuntu 22.04
安装客户端环境
安装NFS client以及Kerberos验证模块:
apt-get -y install krb5-kdc nfs-common
这边直接确定,之后我们会手动调整配置档:
调整DNS配置
调整Ubuntu的DNS为域控DNS server:
resolvectl status
修改/etc/resolv.conf
或者/etc/systemd/resolved.conf
如果不修改会ping不通域名,很神奇:
可以使用nslookup来验证:
调整Kerberos验证模块配置
备份配置档:
cp -ar /etc/krb5.conf /etc/krb5.conf.bk
修改配置档:
[libdefaults]
default_realm = [域名大写]
[domain_realm]
.[域名小写] = [域名大写]
[域名小写] = [域名大写]
例如:
[libdefaults]
default_realm = ZHUGH.LOCAL
[domain_realm]
.zhugh.local = ZHUGH.LOCAL
zhugh.local = ZHUGH.LOCAL
导入Linux客户端用户证书
如果NAS有装Web Staiton套件,这边可以将证书文件放NAS的web共享文件夹下:
在linux可以使用wget命令直接下载:
wget http://192.168.0.68/krb51.keytab
将证书放到默认位置:
cp krb51.keytab /etc/krb5.keytab
然后导入证书:
klist -k /etc/krb5.keytab
检查证书是否正常:
klist -kte
重启服务让Kerberos配置生效:
systemctl restart rpc-gssd
测试装载
建立Linux本地文件夹
mkdir /nfsmount1
mkdir /nfsmount2
使用以下命令测试装载:
mount -t nfs -vvv -o vers=4,sec=krb5 [NASIP]:[NAS共享文件夹路径] [Linux本地路径]
例如:
mount -t nfs -vvv -o vers=4,sec=krb5 192.168.0.62:/volume1/krb5 /nfsmount1
mount -t nfs -vvv -o vers=4,sec=krb5 192.168.0.68:/volume1/krb5 /nfsmount2
问题
如果装载提示 Protocol not supported
并且/var/log/syslog提示以下错误,请检查/etc/resolv.conf
是否修改正确:
ERROR: No credentials found for connection to server ds3617xs7.zhugh.local
ERROR: gssd_refresh_krb5_machine_credential_internal: no usable keytab entry found in keytab /etc/krb5.keytab for connection with host ds3617xs7.zhugh.local
检查ping NAS 主机域名是否可以正常ping通:
Windows 11
安装客户端环境
在控制面板->程序->程序和功能 中点击 "启用或关闭W indows 功能"
安装NFS客户端
windows加域
修改windows的dns为DNS server的IP:
在系统->系统信息->域或工作组->选择为域,输入域的名称:
输入域用户的账号密码加入:
加入成功:
添加域用户本地管理员权限
加入域后先用Windows本地管理员用户登录:
在计算机管理中,为域用户添加本地管理员权限。在administrators群组选择添加到组:
添加并查找域用户,这边需要输入下域用户的账号密码:
查找成功:
确认添加:
测试装载
使用添加本地管理员权限的域用户登录:
在CMD中使用klist
命令检查获取到的凭据:
使用以下命令测试装载(windows仅支持域名装载):
mount -o sec=krb5 [Windows本地空余盘符] \\[NAS主机域名]\[NAS共享文件夹路径]
例如:
mount -o sec=krb5 f:\ \\ds3617xs7.zhugh.local\volume1\krb5
问题
这边测试DSM 6.2.3 update3装载会拒绝访问,可能之前有做什么修改导致NFS的krb服务出现问题了吧,重新安装系统后恢复正常
mount -o sec=krb5 g: \\zhsynology.zhugh.local\volume1\krb5
重装前:
重新安装系统后:
配置权限
Linux客户端域权限映射
由于在之前生成凭证时已经将凭证与域用户绑定,所以只要给对应共享文件夹域权限就可以正常写入文件。
共享文件夹权限配置如下:
装载命令:
mount -t nfs -vvv -o vers=4,sec=krb5 192.168.0.68:/volume1/krb5 /nfsmount2
在客户端分别写入文件:
服务器端存储情况如下:
Linux客户端配置映射NAS本地用户权限
在NAS本地建立映射用户:
通过以下命令查看客户端证书主体:
在 NFS 的高级设置中点击 Kerberos设置,在ID映射中选择新增ID映射:
主体填写客户端证书主体,本地用户选择在NAS本地建立映射用户:
映射如下:
共享文件夹添加NAS本地建立映射用户的读写权限:
装载命令:
mount -t nfs -vvv -o vers=4,sec=krb5 192.168.0.68:/volume1/krb5 /nfsmount2
在客户端分别写入文件(主体映射后需要重新挂载才可以生效):
服务器端存储情况如下:
Windows客户端域权限映射
由于自动生成的凭证已经与域用户绑定,所以只要给对应共享文件夹域用户权限就可以正常写入文件。
共享文件夹权限配置如下:
装载命令:
mount -o sec=krb5 f:\ \\ds3617xs7.zhugh.local\volume1\krb5
在客户端写入文件(主体映射后需要重新挂载才可以生效):
服务器端存储情况如下:
Windows客户端配置映射NAS本地用户权限
在NAS本地建立映射用户:
在CMD中使用klist
命令获取主体名称:
在 NFS 的高级设置中点击 Kerberos设置,在ID映射中选择新增ID映射:
主体填写客户端证书主体,本地用户选择在NAS本地建立映射用户:
映射如下:
共享文件夹添加NAS本地建立映射用户的读写权限:
装载命令:
mount -o sec=krb5 f:\ \\ds3617xs7.zhugh.local\volume1\krb5
在客户端写入文件(主体映射后需要重新挂载才可以生效):
服务器端存储情况如下: