Active Directory + NFS:为什么域用户的 uidNumber、gidNumber 不通过 Windows 中的“id”命令显示?

Active Directory + NFS:为什么域用户的 uidNumber、gidNumber 不通过 Windows 中的“id”命令显示?

我正在将 NFS v3 共享(ZFS 数据集)从域用户拥有的 Solaris 文件服务器连接到 Windows 计算机,但该概念应该适用于基本上任何 POSIX 样式的服务器。我希望找到一种直观的方法让权限在各个平台之间保持持久性,这也可以适用于使用同一客户端的多个用户。

mount在使用命令挂载数据集时,Solaris 服务器无法识别用户的身份cmd,尽管数据集被设置为服务器上存在的同一域用户,但使用 AD LDAPuidNumber和进行识别gidNumber

我看到过一种解决方案,uid/gid可以在注册表中设置,允许 NFS 共享以一个用户身份作为匿名共享安装在 Windows 中。这不仅不方便,而且仅适用于一个用户。

我使用的是 MSYS2(例如“Git Bash”),并注意到该id命令没有显示属性选项卡uidNumber/gidNumber中设置的任何内容ADUC。我知道 Windows 使用SIDs 来识别用户和设备,这与 Unix id 系统非常不同 - 但这个数字是MSYS2从哪里获得的?

我希望通过阐明这一点,它可以帮助我找到某种设置用户属性的方法,以便命令mount能够cmd以我的 Solaris 服务器能够理解的方式传达我用户的身份。

下面是我所说的一个例子:

在 中ADUC,让我们回顾一下uid/gidAdministrator

Active Directory Users and Computers
----------------------------------------------
    [Menu]  View --> Advanced Features -->
+ [Domain] Users --> Administrator --> Properties -->
  + [Tabs] Attribute Editor -->
+ [Tables] uidNumber, gidNumber

uidNumber: 2500
gidNumber: 2512

好的,那我们来Administrator检查id一下MSYS2

└─ ▶ id administrator
uid=1049076(Administrator) gid=1049089(Domain Users) groups=1049089(Domain Users)

uid/gid显然,这些数字有很大差异。显示用户的 Unix 不是更有意义吗?

这些看起来奇怪的数字从何MSYS2而来,有没有办法uid/gid在命令行中利用用户的 AD 指定身份?

答案1

嗯,这很容易 - 因为我的用户已经uidNumber设置gidNumber好了,我要做的就是在客户端上启用 AD 身份映射。

我打开了管理员命令提示符,启动了 powershell (ver 7),然后运行 ​​cmdlet:

PS C:\Windows\System32> Set-NfsMappingStore -EnableADLookup $True -ADDomainName "example.com"

为了确认,我检索了设置:

PS C:\Windows\System32> Get-NfsMappingStore

UNMServer               :
UNMLookupEnabled        : False
ADDomain                : example.com
ADLookupEnabled         : True
LdapServer              :
LdapNamingContext       :
LdapLookupEnabled       : False
PasswdFileLookupEnabled : False

现在,关键时刻——挂载用户的 NFS 共享(这是 ConEmu 中的用户级 cmd shell):

happyuser@WINSLAVE C:\Users\happyuser
$ mount \\solarisbeast\mnt\hallofzmirrors\trough\happyuser\all-pascal-projects n:

到目前为止看起来不错,不需要任何身份设置(无论如何,使用 NFS v3 是不可能的,但仍然......)

留下了一些痕迹...

happyuser@WINSLAVE N:\
$ echo 'this is from winslave' > 'test-from-winslave.txt'

然后,检查服务器上文件创建者的身份:

admin@solarisbeast:/mnt/hallofzmirrors/trough/happyuser/all-pascal-projects% ls -la
total 88
drwxr-xr-x   6 happyuser    DomainUsers       8 Jul 22 22:19 .
drwxr-x---  35 happyuser    DomainUsers      56 Jul 21 11:37 ..
drwxr-xr-x   2 happyuser    DomainUsers       3 Jul 21 11:37 .$EXTEND
-rw-r--r--   1 happyuser    DomainUsers      25 Jul 21 13:04 test-from-bloatedwharfrat.txt
-rwxr-xr-x   1 happyuser    DomainUsers      25 Jul 22 22:02 test-from-winslave.txt

身份方面看起来不错。希望它稳定!

在 Windows 中从 Unix 服务器挂载 NFS 导出

更新:我很快提到了这一点,但对于任何错过它的人来说,NFS 挂载应该以拥有共享权限的用户身份在非提升的 cmd 中执行。对于更熟悉 Posix 系统上的 NFS 挂载的人来说,这似乎不直观,因为在 Posix 系统中,只有 root(即 sudo)才有权调用mount命令。

相关内容