我安装了 Windows Server 2019,其中包含用于 nfs 映射的 LDAP 实例 (nfsmappingstore)。 我使用 powershell cmdlet Install-NfsMappingStore 创建了这个。
为了说明这一点,这里是该商店中的用户列表,以及一个用户的测试:
当我打开名为“启用未映射的用户访问”的圆圈选项以及子选项“允许未映射的用户 Unix 访问(通过 UID/GID)”时,我可以转到我的 uBuntu 18.04 计算机并使用以下命令成功安装它:命令:
sudo mount -t nfs server:/AutoProv mnt
然后我可以看到共享中的文件和文件夹。
但是,当我关闭该选项并希望实际使用映射的用户功能时,我收到错误:
root@br-dv-ss-l01:/home/steve# mount -vvvv -t nfs server:/AutoProv mnt
mount.nfs: timeout set for Fri Apr 2 18:28:11 2021
mount.nfs: trying text-based options 'vers=4.2,addr=10.200.225.1,clientaddr=10.200.225.104'
mount.nfs: mount(2): Protocol not supported
mount.nfs: trying text-based options 'vers=4.1,addr=10.200.225.1,clientaddr=10.200.225.104'
mount.nfs: mount(2): Permission denied
mount.nfs: access denied by server while mounting server:/AutoProv
root@br-dv-ss-l01:/home/steve#
我认为这意味着 Windows Server 2019 并未真正发送或解释 uid/gid。查看服务器上的事件日志,它似乎表明它很高兴并且读取 LDAP 实例正常,并且 Test cmdlet 给出没有错误。
我能想到的一个可能的改变是在挂载命令中添加“-o nfsvers = 3”,这似乎会导致略有不同的效果。 当我这样做时,共享确实挂载了,但 NFS 服务器拒绝让我看到共享内部的任何内容:
有人可以指导我如何进一步调查这个问题吗? 目前我不知道如何验证 Windows Server 所获取的 UID/GID,所以我真的不知道问题出在哪一边。
谢谢!
顺便说一句,我们对此从未得到任何答复。 LDAP 选项似乎根本不起作用。 然而,passwd、组文件映射选项效果很好,我们改用了它。
文件必须以小写形式命名“group”和“passwd”,没有扩展名。它们必须放置在“C:\Windows\System32\drivers tc”中。 “组”的语法:
machinename\PodGroup:x:2501:2500,3500
machinename\MyLocalWindowsGroup:x:2502,3500
domain\ACLname:x:2503:0,2500
或者一般来说:
组名:x:GID:UID1,UID2,等等....
本质上,这与 Linux 使用的映射相同,如下所述:https://www.thegeekdiary.com/etcgroup-file-explained/
因此,您在运行 NFS 的 Windows Server 上定义一个本地组,并在该行的第一个条目中引用该组,或者在那里使用域 ACL 组。每行的每个“列”都用冒号分隔。第二个条目“x”是我认为未使用的描述字段。 第三个是您想要将窗口组映射到的 GID。
密码:
domain\stevesims:x:0:0:Root User,,,:c:\users\stevesims
domain\johndoe:x:2500:2501:Pod User,,,:c:\users\johndoe
domain\janedoe:x:3500:2501:Pod User,,,:C:\users\janedoe
或者一般来说:
username:x:UID:GID:desc,,,:WindowsPathToItsProfile
一旦这些文件在 NFS 服务器上就位,您必须重新启动 NFS 服务器服务,否则它将不会重新读取该文件。
重启后,它会读取该文件,如果Linux机器向NFS服务器写入文件,它将被视为拥有这些文件中匹配的Windows帐户或组的权限。