【发布时间】:2015-09-15 13:45:50
【问题描述】:
Samba3 对用户使用 S-1-22-1 范围内的 SID,对组使用 S-1-22-2 范围内的 SID。例如,S-1-22-1-1-10042 是具有 uid 10042 的 UNIX 用户。 我希望能够将这样的 SID 映射到名称中,例如“myunixaccount”,类似于 Windows 帐户映射的此功能:
SecurityIdentifier sid = ...; // For instance from FileSystemAccessRule.
name = sid.Translate(typeof(NTAccount)).Value;
Windows 本身可以进行这种映射,但我似乎找不到映射算法。
添加:环境描述
在Convert SID to Username in C# 上测试了建议的解决方案。它没有帮助。因此一些额外的环境描述:
- Windows PC,加入域或独立,运行 W7 Professional,x86。
- 文件位于基于 Samba 的驱动器上。 Samba 向域的 AD 控制器进行身份验证。
- Samba 版本:4.0.3,在 Linux 2.6.18-238、x64 上运行。
- 用于 Samba、交互式会话等的 PAM。
- AD 控制器是 W2012,目录中有一些默认的 UNIX 扩展属性以允许映射 UID 等。
- .NET Framework 库 4.5.2.
- ldap.conf:
piece of ldap.conf
nss_base_passwd=OU=nl,OU=xxx,dc=yyy,dc=local?sub(objectCategory=user)
nss_map_objectclass posixAccount User
nss_map_objectclass shadowAccount User
nss_map_attribute uid sAMAccountName
nss_map_attribute uidNumber uidNumber
nss_map_attribute gidNumber gidNumber
nss_map_attribute cn sAMAccountName
nss_map_attribute uniqueMember member
nss_map_attribute userPassword msSFUPassword
nss_map_attribute homeDirectory unixHomeDirectory
nss_map_attribute loginShell loginShell
nss_map_attribute gecos cn
nss_map_objectclass posixGroup Group
nss_map_attribute shadowLastChange pwdLastSet
在 UNIX 上使用 Windows 身份验证的交互式登录工作正常,同样适用于 Samba 共享。在域中使用 PC 时,它不会要求提供凭据。
一些示例,用户 gle3(在 1 中突出显示)也存在于域中,但具有不同的 SID。这里使用的 SID 是 Samba SID,如 S-1-22-1-1-10001。
在 (2) 中,您可以看到用户存在于使用的 passwd 配置中。以下当然不会产生任何结果:grep gle3 /etc/passwd,因为这些条目是从远程服务器使用的。远程服务器将 gle3 的用户 SID 映射到 UNIX uid 10001 和默认组 10003。
在(3)中,您可以看到默认组不存在,这就是权限无法将其解析为名称的原因。
很明显,Windows 以某种方式询问文件服务器:“给我这些 SID 上的数据”,而 Samba 文件服务器以某种方式响应:好的,那是“Unix User\gle3”和“Unix Group\10003”,但我没有最后一个有一个组名。
【问题讨论】:
-
stackoverflow.com/questions/7593005/… 还是 Samba 的其他东西?
-
测试过,但结果相同。似乎 .NET 2.0 框架已经封装了 pinvoke.net 上描述的那个。无论如何谢谢!
-
您能描述一下您的环境的更多细节吗?该代码在我的机器上运行。
-
@YueLiu 当然,感谢您的关注。
-
我还是不太清楚你的要求。您想获得 Samba 服务器 (Linux) 上的映射吗?我认为在 Linux 中,您可以从 /etc/passwd 获取从用户 ID 到名称的映射。
标签: c# samba security-identifier