问题标签 [security-identifier]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
windows-identity - Windows 身份 SID
创建帐户后,Windows 帐户(本地、域、Active Directory)的 SID 是否会更改?如果是,在什么条件下。
windows-authentication - 从 SecurityIdentifier 获取用户名
我在用户创建存储在数据库中的报告的网站上使用 Windows 身份验证。当我保存报告时,我想知道是哪个用户填写的,所以我一直将他们的 WindowsIdentity 的 SecurityIdentifier 存储在数据库中,以识别哪个用户填写了报告。这是我用来获取当前 Windows 用户的 SecurityIdentifier 值的代码:
问题
我是否通过将 SecurityIdentifier 存储在数据库中而不是用户名或其他值来做正确的事情?在这种情况下遵循的最佳做法是什么?
如何从我存储的 SecurityIdentifier 值中获取用户的用户名?
c# - Cassini-dev 的 NTLM 身份验证中的 SecurityIdentifiers
在 Cassini-dev 的 NTLM 身份验证类中的这段代码中,对 SECUR32.DLL(通过Interop)进行的调用是为了对 HTTP 请求Authorization
标头中的 base64 编码数据进行身份验证。这是有道理的,当AcceptSecurityContext()和QuerySecurityContextToken()都返回0
时,客户端已被授权。最后,安全上下文令牌SecurityIdentifier
从中提取了一个(_sid变量)。(关于常见安全 ID的一些信息)
在Request Class中,在TryNtlmAuthenticate()
使用 NtlmAuth 的方法中,在成功完成 NTLM 身份验证的 3 个步骤后,在返回最终403或完成请求之前,将进行最后一次检查:
在这里,_host.GetProcessSid()是SecurityIndentifier
Cassini 进程(我)的所有者,而auth.SID是SecurityIdentifier
经过身份验证的用户(上面NtlmAuth类中的 _sid)。如果这 2 个 SID 不同,则返回 403 并停止身份验证,否则将请求提供给浏览器。
我的问题是:
- 为什么需要比较 2 个不同用户的 SecurityIndentifiers?当我尝试使用不是拥有 Cassini 进程的用户的用户/密码进行 NTLM 身份验证时,这将失败(返回 403)。
- 如果这确实是预期的行为,如果 Cassini 将作为 Windows 服务运行,则没有人能够登录,因为主机 SID 将是S-1-5-18(或者可能类似的东西,取决于操作系统版本)和没有人可以作为操作系统登录。这只是 Cassini 的 NTLM 身份验证实现的一部分,我没有正确使用 Cassini 吗?
- 如果这显然不是预期的行为,那么 SecurityIndentifiers 在这种情况下扮演什么角色?是否需要进行额外检查以确保主机 SID 需要属于某个类或组才能接受某个类/组的客户端 SID?处理主机/客户端 SID 时是否存在操作系统版本 (XP/Vista/7) 影响?
- 或者这里没有安全标识符的适用用途,因为它们没有被存储或传递,也没有被用来进一步识别用户/客户端?
更新:似乎有人在 cassinidev 论坛上提出了一个补丁,该补丁早在 2010 年就删除了此 SID 检查(补丁 #6604),但仍在评估中。
c# - SecurityIdentifier.Translate(typeof(NTaccount)) 被窃听?
在进行从 SID 到 NTAccount 的转换时,我使用以下代码:
是的,我意识到您可以NTAccount
从该folder_sec.GetAccessRules
方法中获得 from,但我发现SecurityIdentifier.Translate
正在使用相同的子例程,并且发生了相同的错误。归根结底,ACL 只是 SID 数组。
错误是,当您有两个名称完全相同但位于两个独立域(受信任,而非子域)中的活动目录对象(组、用户等)时,该translate
方法会返回错误的 NTAccount。它最终在执行代码的机器所在的域中返回具有相同名称的 NTAccount。NTAccount
从与您域中的另一个对象不同的名称的其他域获取s 返回正常。
假设您在 domain_frank 中的机器上有一个目录,这是 ACL:
- domain_frank\IT 团队
- domain_bob\IT 团队
- domain_frank\戴夫
- domain_bob\Ted
如果你运行它,虽然上面的代码output
看起来像:
假设名为 Dave 的对象不在 domain_bob 中,而名为 Ted 的对象不在 domain_frank 中。但是,如果您查看 SID,您可以清楚地看到域部分完全不同,因此您知道正确的对象在 ACL 中,至少在 SID 中。与查找有关的东西正在中断。
对我来说,结果是我必须编写自己的算法来查看 SID 并在 SID 所属的域上进行活动目录查找。非常非常慢,而且很痛苦。
这是一个已知的错误,是否有令人满意的解决方案?
c# - MemoryMappedFile 进程安全
我正在尝试创建一个 MemoryMappedFile 并确保只有某些进程才能访问共享内存。MSDN 上的这篇博文说:
内存映射文件安全性允许您自定义谁或哪个进程可以访问资源,这在您想要保护敏感信息并且您不希望其他进程更改文件映射时非常重要。
但是,我不知道如何引用进程,只能引用用户和用户组的内置 SID。这有效,但不是我想要的:
如何引用我的流程?我的进程有 SID 吗?我完全错过了什么概念?
security - VIP卡如何帮助验证?
从(断开连接的)威瑞信身份保护卡随机生成的 6 位安全代码如何帮助验证/验证任何用户?
为什么不能输入任何随机的 6 位数值,而是从 VIP 卡/设备生成该值?
是否有任何固定模式可以从该 VIP 设备/卡中获取这些值,以便服务器可以验证该数字?
active-directory - 访问外国安全负责人
michael@mycontoso.com
使用 objectSid搜索用户S-1-5-21-1234567890-123465789-123456789-123456
,我只找到一个 Foreign Security Principal CN=S-1-5-21-1234567890-123465789-123456789-123456,CN=ForeignSecurityPrincipals,DC=contoso,DC=com
。那个外国安全主体不包含我必须阅读的属性,所以我想我必须访问那个 FSP 的“Home AD”。
FSP 是否具有始终包含用户对象的 LDAP 路径的属性?是否有标准化/推荐的方式来访问 Home AD?
c# - 将 Samba 的 S-1-22-[12]-* SID 映射到名称中
Samba3 对用户使用 S-1-22-1 范围内的 SID,对组使用 S-1-22-2 范围内的 SID。例如,S-1-22-1-1-10042 是具有 uid 10042 的 UNIX 用户。我希望能够将这样的 SID 映射到名称,例如“myunixaccount”,类似于 Windows 帐户的此功能映射:
Windows 本身能够进行这种映射,但我似乎无法找到映射算法。
添加:环境描述
测试了在 C# 中将 SID 转换为用户名的建议解决方案。它没有帮助。因此一些额外的环境描述:
- 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 框架库 4.5.2。
- ldap.conf:
piece of ldap.conf
使用 Windows 身份验证在 UNIX 上进行交互式登录可以正常工作,同样适用于 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”,但我没有组最后一个的名字。
active-directory - Win2K8 R2,乱序 SID
为什么域上的 SID 乱序?乱序是指一些最近创建的帐户的相对 ID(SID 的最后一部分)低于更旧的帐户。我一直认为Relative-ID 是以纯单调上升的方式分配的。
我用谷歌搜索但没有发现任何线索。任何想法 ?
Windows 2008-R2,5 DC。