问题标签 [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.

0 投票
1 回答
1057 浏览

windows-identity - Windows 身份 SID

创建帐户后,Windows 帐户(本地、域、Active Directory)的 SID 是否会更改?如果是,在什么条件下。

0 投票
1 回答
474 浏览

windows-authentication - 从 SecurityIdentifier 获取用户名

我在用户创建存储在数据库中的报告的网站上使用 Windows 身份验证。当我保存报告时,我想知道是哪个用户填写的,所以我一直将他们的 WindowsIdentity 的 SecurityIdentifier 存储在数据库中,以识别哪个用户填写了报告。这是我用来获取当前 Windows 用户的 SecurityIdentifier 值的代码:

问题

  1. 我是否通过将 SecurityIdentifier 存储在数据库中而不是用户名或其他值来做正确的事情?在这种情况下遵循的最佳做法是什么?

  2. 如何从我存储的 SecurityIdentifier 值中获取用户的用户名?

0 投票
1 回答
732 浏览

c# - Cassini-dev 的 NTLM 身份验证中的 SecurityIdentifiers

在 Cassini-dev 的 NTLM 身份验证类中的这段代码中,对 SECUR32.DLL(通过Interop)进行的调用是为了对 HTTP 请求Authorization标头中的 base64 编码数据进行身份验证。这是有道理的,当AcceptSecurityContext()QuerySecurityContextToken()都返回0时,客户端已被授权。最后,安全上下文令牌SecurityIdentifier从中提取了一个(_sid变量)。(关于常见安全 ID的一些信息)

这是NtlmAuth 类的相关部分

Request Class中,在TryNtlmAuthenticate()使用 NtlmAuth 的方法中,在成功完成 NTLM 身份验证的 3 个步骤后,在返回最终403或完成请求之前,将进行最后一次检查:

在这里,_host.GetProcessSid()SecurityIndentifierCassini 进程(我)的所有者,而auth.SIDSecurityIdentifier经过身份验证的用户(上面NtlmAuth类中的 _sid)。如果这 2 个 SID 不同,则返回 403 并停止身份验证,否则将请求提供给浏览器。


我的问题是:

  1. 为什么需要比较 2 个不同用户的 SecurityIndentifiers?当我尝试使用不是拥有 Cassini 进程的用户的用户/密码进行 NTLM 身份验证时,这将失败(返回 403)。
  2. 如果这确实是预期的行为,如果 Cassini 将作为 Windows 服务运行,则没有人能够登录,因为主机 SID 将是S-1-5-18(或者可能类似的东西,取决于操作系统版本)和没有人可以作为操作系统登录。这只是 Cassini 的 NTLM 身份验证实现的一部分,我没有正确使用 Cassini 吗?
  3. 如果这显然不是预期的行为,那么 SecurityIndentifiers 在这种情况下扮演什么角色?是否需要进行额外检查以确保主机 SID 需要属于某个类或组才能接受某个类/组的客户端 SID?处理主机/客户端 SID 时是否存在操作系统版本 (XP/Vista/7) 影响?
  4. 或者这里没有安全标识符的适用用途,因为它们没有被存储或传递,也没有被用来进一步识别用户/客户端?

更新:似乎有人在 cassinidev 论坛上提出了一个补丁,该补丁早在 2010 年就删除了此 SID 检查(补丁 #6604),但仍在评估中。

0 投票
1 回答
785 浏览

c++ - Windows 登录用户唯一 ID

我正在编写一个 Windows 客户端应用程序,并且我希望拥有一个不是由我的应用程序生成的全局唯一标识符(我不想生成 GUID 并将其保存在本地)。
此外 - 每个应用程序都为每个 Windows 用户单独安装。

我没有问题唯一地识别机器,但我不确定唯一地识别用户。我可以使用登录用户的 SID(安全标识符),但我不确定 SID 的寿命是多少。

每个用户的 SID 是否不变?或者也许它会改变每个会话?

关于如何唯一识别具有永久 ID 的用户的任何想法?

(我想要一个预先存在的标识符,所以我可以检测到返回的用户)应该支持 Windows XP 到 Win7。

谢谢,

0 投票
0 回答
3023 浏览

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 所属的域上进行活动目录查找。非常非常慢,而且很痛苦。

这是一个已知的错误,是否有令人满意的解决方案?

0 投票
0 回答
590 浏览

c# - MemoryMappedFile 进程安全

我正在尝试创建一个 MemoryMappedFile 并确保只有某些进程才能访问共享内存。MSDN 上的这篇博文说:

内存映射文件安全性允许您自定义谁或哪个进程可以访问资源,这在您想要保护敏感信息并且您不希望其他进程更改文件映射时非常重要。

但是,我不知道如何引用进程,只能引用用户和用户组的内置 SID。这有效,但不是我想要的:

如何引用我的流程?我的进程有 SID 吗?我完全错过了什么概念?

0 投票
0 回答
33 浏览

security - VIP卡如何帮助验证?

从(断开连接的)威瑞信身份保护卡随机生成的 6 位安全代码如何帮助验证/验证任何用户?
为什么不能输入任何随机的 6 位数值,而是从 VIP 卡/设备生成该值?
是否有任何固定模式可以从该 VIP 设备/卡中获取这些值,以便服务器可以验证该数字?

0 投票
2 回答
7019 浏览

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?

0 投票
1 回答
7938 浏览

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”,但我没有组最后一个的名字。

Windows 资源管理器(荷兰语) UNIX 获取密码 UNIX 获取组

0 投票
1 回答
30 浏览

active-directory - Win2K8 R2,乱序 SID

为什么域上的 SID 乱序?乱序是指一些最近创建的帐户的相对 ID(SID 的最后一部分)低于更旧的帐户。我一直认为Relative-ID 是以纯单调上升的方式分配的。

我用谷歌搜索但没有发现任何线索。任何想法 ?

Windows 2008-R2,5 DC。