我试图根据RedHat 当前的build议 ,使用SSSD访问Active Directory,以KRB5身份validation来configurationNFSv4。 在这种情况下,NFS服务器是一个NAS设备,它处理用户@域帐户和从AD / LDS提取的UID / GID之间的用户映射。 我已经禁用SSSD中的ID映射,因为NAS没有相同的可用于计算“自制”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,日志logging的详细程度最高,我看到的唯一事件表明任何问题是: Jul 17 11:48:23 nfsclient nfsidmap[10601]: nss_getpwnam: name 'nfsadmin' not found in domain 'testdomain.local'
我还通过数据包捕获证实了查找答复中所有者和组(不是ID)的预期用户/组名称string:
fattr4_owner: [email protected] fattr4_owner_group: Domain [email protected]
环境包括一台2012R2 DC,CentOS 7.3客户端以及作为服务器的供应商专有(基于CentOS)的NAS设备。 除了安装必要的软件包和IP / NTPconfiguration,这些是我在客户端上的configuration步骤:
Domain = testdomain.local
添加到/etc/idmapd.conf realm join testdomain.local -U nfsadmin
ldap_id_mapping = False
sec=sys
装入导出以将所有权更改为域用户 无论是使用sec = sys还是sec = krb5,root或者一个域帐号,ls的输出都是一样的。
我在search过程中find的唯一适用的解决scheme指出需要为用户创build本地帐户,但似乎这将会打败AD集成的目的。 我希望有可能创build一个新的AD用户,将它们添加到正确的组以获得访问权限,设置UID / GID,然后该用户应该能够在导出到SSH客户机。
客户端configuration纯粹是从Active Directory中提取数据(只有服务器/ NAS使用AD / LDS)。 通过PowerShell(例如Get-ADUser "nfsadmin" | Set-AdUser -replace @{uidNumber=10001}
手工填充活动目录中的UID / GID,试图使2016版兼容并避免使用adminui / nis或UNIX Attributes选项卡,即使我现在正在testing2012R2)
我怎样才能得到NSS / nfsidmap正确翻译服务器返回的域名用户/组名称?
我强烈希望每个用户都不需要手动创build本地帐户,这样可以扩展成千上万的用户不会变成巨大的痛苦。 此外,强制服务器(在这种情况下,NAS设备)返回ID而不是名称是不可能的。
在这种情况下,idmapd正在使用nsswitch作为默认值,但上面引用的文档中详细介绍的AD集成方法没有提及任何idmapd.conf修改。
idmapd.conf状态中的注释“分布式方法包括nsswitch,umich_ldap和static”。 这不是一个全面的插件列表,在这种情况下应该使用系统安全服务(sss)。
/etc/idmapd.conf:
[General] Domain = testdomain.local [Translation] Method = sss
当我意识到当ldap_id_mapping仍然处于启用状态(但导致服务器端映射问题与NAS设备)时,我意识到sss正在处理完美的映射,并且“无法在域中find”错误被nss_getpwnam 。
我还不清楚为什么当sss
是nsswitch.conf中passwd和group列出的db之一时,为什么NSS不能完成这项工作,但是上面的改变完成了工作。