NFSv4 + SSSD + Active Directory:禁用ldap_id_mapping时的“nobody”权限

我试图根据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
  • joinAD域, realm join testdomain.local -U nfsadmin
  • 允许来自所有域用户的SSH访问(域允许)
  • 在/etc/sssd/sssd.conf中设置ldap_id_mapping = False
  • 启用/启动/重新启动sssd.service rpcgssd rpcidmapd和nfs-secure
  • 使用sec=sys装入导出以将所有权更改为域用户
  • 用sec = krb5重新安装

无论是使用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不能完成这项工作,但是上面的改变完成了工作。