我在同一个网络上有一台 Windows Server 2019 计算机和一台 CentOS 8 计算机。CentOS 服务器托管一个使用 Windows 计算机文件的 Web 应用。
为了读取这些文件,我在 Windows 端设置了一个 Samba 共享,并通过 将其安装在 CentOS 端mount -t cifs //myserver/share /media/windows
。
这很有效,但我注意到一些问题。有时尝试从此 Samba 共享访问文件时,它只是停留在那里。卸载并重新安装似乎没有帮助,因为问题会再次发生。
我决定尝试使用 NFS 而不是 Samba 在 Windows 2019 和 CentOS 之间共享文件。设置相同的文件夹后,改为使用 NFS 共享,然后mount -t nfs myserver:/share /media/windows
我就可以访问会导致 Samba 挂起的文件。
我遇到的问题是,当我从 CentOS 端在 NFS 共享中创建新文件时,Windows 端的权限错误,Windows 服务器上的用户无法访问这些文件。
我研究了这个问题并尝试设置 NFS 用户映射,但我认为我做得不对。
使用 PowerShell,我运行:
Install-NfsMappingStore -InstanceName "NFSMappingStore" -LdapPort 10389
并看到:
已在服务器 MYSERVER 上成功创建名为 NFSMappingStore 的 ADLDS 实例,该实例在端口 10389 上运行,分区为 CN=nfs,DC=nfs。
然后我跑了:
Set-NfsMappingStore -EnableLdapLookup $true -LdapNamingContext "CN=nfs,DC=nfs"
-LdapServer localhost:10389
看到这个方法有效,我便尝试添加一个用户:
New-NfsMappedIdentity -MappingStore LDAP -Server localhost:10389
-UserIdentifier 980 -GroupIdentifier 1001
-UserName CentOsUser -PrimaryGroup "Domain Users"
这似乎工作正常,所以回到 CentOS 端,我CentOsUser
通过以下方式以用户身份挂载了 NFS 共享:
sudo -u CentOsUser -g CentOsGroup mount -t nfs myserver:/share /media/windows
这有效,我能够创建和写入文件。但在 Windows 端,我看到(新创建的)文件的所有者实际上是S-1-5-88-1-980
而不是CentOsUser
。
我还看到了S-1-5-88-2-1001
以及S-1-5-88-3-420
和S-1-5-88-4
。
为什么会显示S-1-5-88-1-980
?我以为我映射980
到了CentOsUser
用户?我还以为我映射1001
到了Domain Users
组,那么为什么会显示S-1-5-88-2-1001
?
答案1
我遇到了同样的问题,并且已经为此奋斗了很长时间......
- 现在我将 Linux 服务器与 AD 集成。
- 从 Windows 管理所有文件和目录级别权限
- 从 Windows NFS 共享访问文件的应用程序用户是经过 AD 身份验证的用户。
上述程序对我来说仍然有效。
答案2
我发现最好和最简单的解决方案是https://github.com/billziss-gh/sshfs-win,连接的服务器显示为功能齐全的网络驱动器
编辑:在 Linux 上挂载 NTFS 共享
mkdir /mnt/win1
mount -t cifs //10.10.1.100/share -o username=myUser,password=myPassword /mnt/win1