当前位置:  开发笔记 > 编程语言 > 正文

来自C#的Windows模拟

如何解决《来自C#的Windows模拟》经验,为你挑选了3个好方法。

作为LocalSystem运行的C#程序如何临时模拟另一个用户的登录标识?粗略地说,我有一个Windows服务,我想作为LocalSystem运行,但有时模仿用户XYZ(当使用Windows集成安全性连接到数据库时).

最重要的是:有没有办法在不知道其他用户密码的情况下做到这一点?

注意:如果密码是强制性的,则建议安全地存储密码(c#和/或vbscript).



1> wj32..:

这是可能的,虽然它需要你做很多代码.请参阅NtCreateToken和CreateToken.你需要SeCreateTokenPrivilege,虽然这不会是一个问题,因为你在NT AUTHORITY\SYSTEM下运行.然后,您可以使用创建的令牌模拟线程内部.


在stackoverflow上,我更喜欢/回答问题.
请注意,不建议在LocalSystem下运行服务,并且sysadmins对此做法不屑一顾.

2> Franci Penov..:

简答:您不能没有用户密码或用户通过COM呼叫您的服务.

要在您的流程中冒充其他用户,您必须致电ImpersonateLoggedOnUser.ImpersonateLoggedOnUser需要一个令牌句柄.有几种方法可以获得令牌句柄:

以用户身份登录LogonUser.但是,这需要您知道用户密码.

通过复制现有令牌CreateRestrictedToken,DuplicateTokenDuplicateTokenEx.

通过打开来自另一个进程或线程的令牌,已经是作为用户的loggen,用OpenProcessTokenOpenThreadToken



3> Renaud Bompu..:

对于密码存储部分,您可能想看看最近提出的这个问题.

这是我的答案:

您可以/应该使用DPAPI,即提供存储加密的Data Protection API.
这就是针对这类问题.

存储的加密基于以下任一种:

用户帐户,因此只有登录用户才能访问数据.这使得数据可以转移到具有完全相同的用户凭证的另一台PC.

机器,使数据只能在特定的机器设置上访问,不能转移到另一台PC.

有一个dnrTV节目与卡尔富兰克林展示了实现这个和其他加密功能所需的确切内容.
该节目的源代码也可以在页面上找到.

当然,还有很多关于这个主题的文章.

推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有