我试图按照RedHat的NFSv4的目前的建议配置KRB5身份验证,使用SSSD访问Active Directory。在本例中,NFS服务器是一个NAS设备,它处理用户@域帐户与从AD/LDS中提取的UID/GIDs之间的用户映射。我已经禁用了SSSD中的ID映射,因为NAS没有相同的hash+modulus方法来计算“自制”ID。
在当前状态下,NAS识别文件权限的用户和组所有权,并按预期强制执行它们。但是,来自客户端的ls输出会在域用户拥有的任何文件/文件夹上显示nobody nobody。
[root@nfsclient ~]# ls -al /mnt/nfs4test/
total 0
drwxr-xr-x. 1 nobody nobody 0 Jul 17 10:46 .
drwxr-xr-x. 3 root root 22 Jul 17 10:47 ..对于idmapd和sssd,日志记录的详细程度最大,我看到的唯一指示问题的事件是:Jul 17 11:48:23 nfsclient nfsidmap[10601]: nss_getpwnam: name 'nfsadmin' not found in domain 'testdomain.local'
我还通过数据包捕获确认在查找回复中为所有者和组(而不是in )返回预期的用户/组名称字符串:
fattr4_owner: nfsadmin@testdomain.local
fattr4_owner_group: Domain Admins@testdomain.local环境由一个2012 R2 DC、CentOS 7.3客户端和一个供应商专有的(基于CentOS的) NAS设备作为服务器组成。除了安装必需的包和IP / NTP配置之外,以下是我在客户端上的配置步骤:
Domain = testdomain.local添加到/etc/idmapd.confrealm join testdomain.local -U nfsadmin连接AD域ldap_id_mapping = Falsesec=sys安装导出以将所有权更改为域用户无论使用sec=sys或sec=krb5、根用户还是域帐户,ls输出都是相同的。
我在搜索中找到的唯一适用的解决方案指出,需要为用户创建本地帐户,但这似乎会挫败AD集成的目的。我希望能够创建一个新的AD用户,为访问权限将它们添加到适当的组中,设置UID/GID,然后该用户应该能够在将SSH发送到客户端计算机后访问导出上的文件。
客户端配置纯粹是从Active中提取数据(只有服务器/NAS使用AD/LDS)。活动目录中的UID/GID是通过PowerShell手动填充的(例如,Get-ADUser "nfsadmin" | Set-AdUser -replace @{uidNumber=10001} --试图使2016年兼容,并避免使用adminui/nis或UNIX属性选项卡,尽管我目前正在对2012R2进行测试)
我非常喜欢不涉及手工为每个用户创建本地帐户的东西,因此,扩展到成千上万的用户不会成为一个巨大的痛苦。此外,强制服务器(此实例中的NAS设备)返回is而不是名称是不可能的。
发布于 2017-07-17 21:22:16
在这种情况下,idmapd使用nsswitch作为缺省值,但是上面引用的文档中详细描述的AD集成方法没有引用任何idmapd.conf修改。
“idmapd.conf状态下的注释”分布式方法包括nsswitch、umich_ldap和静态。然而,这并不是一个完整的插件列表,在这种情况下应该使用系统安全服务(sss)。
/etc/idmapd.conf:
[General]
Domain = testdomain.local
[Translation]
Method = sss当我意识到当ldap_id_mapping仍然启用时sss正在完美地处理映射时(但导致服务器端映射问题w/ NAS设备),nss_getpwnam报告了“在域中找不到”错误,我就清楚地看到了这一点。
当sss是nsswitch.conf中的passwd和group列出的db之一时,我仍然不清楚为什么NSS不能完成这项工作,但上述更改似乎有效。
https://serverfault.com/questions/862620
复制相似问题