问题标签 [impersonation]

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 投票
2 回答
3149 浏览

wcf - 希望我的 WCF 服务在管理员帐户下运行

如何配置我的 WCF 服务以在管理员帐户下运行?(这不是用于生产,仅用于测试)。

它只是一个 web.config 调整吗?

IIS 7 托管 WCF 服务。

0 投票
2 回答
9515 浏览

wcf - 我的 IIS 托管 wcf 服务在什么用户帐户下运行?

当我在 IIS 7 中托管我的 .Net WCF 服务时,它在哪个用户帐户下运行?

IUSR_machine账户吗?

我在不同帐户下运行的最简单方法是什么?(仅针对此服务,我不希望托管在我的 IIS 中的其他内容受到影响)。

0 投票
1 回答
693 浏览

c++ - 冒充用户访问hives - 各种方法,有哪些实际问题?

我正在设计一个服务以在 Win2000、XP 和 Vista 上的 LocalSystem 帐户下运行。它需要访问用户注册表配置单元,有时需要长时间访问,无论是在用户登录时还是在用户未登录时(如果配置文件是本地的。如果配置文件是漫游且未加载) ,我不会尝试加载它。)

如果用户已登录,我可以通过各种方式(例如从其资源管理器进程,或通过从服务控制管理器接收登录事件)获取用户访问令牌,然后使用 ImpersonateLoggedOnUser 和 RegOpenCurrentUser 访问用户的配置单元。但是,如果用户在我模拟并打开他的配置单元时从开始菜单中选择注销会有什么影响?是否会阻止注销?我的冒充会被终止吗?

如果用户没有登录,我可以使用RegLoadKey直接打开hive NTUSER.DAT。(对于已登录的用户来说是不可能的)。但是,如果用户决定登录,这意味着什么(我想配置单元将被锁定并且登录要么被阻止,要么可能会遇到困难?)

我将设置一些测试项目来探索这些想法,但是,不管它们的明显结果如何,这些问题都是理论上的,就用户在这些操作期间登录/注销可能或将导致什么类型的问题而言服务。

警告:ImpersonateLoggedOnUser 只能用于登录用户(从进程或 SCM 事件获得的令牌)或我有明文密码来调用 WinLogon 并获取令牌的用户 - TRUE / FALSE?换句话说,虽然我拥有 LocalSystem 的最大权限并且能够更改用户的密码甚至删除用户的帐户,但如果用户没有登录,则完全不可能创建一个新的令牌来冒充用户而没有密码?

0 投票
3 回答
4815 浏览

c++ - 有什么区别:LoadUserProfile -vs- RegOpenCurrentUser

这两个 API 非常相似,但不清楚它们的区别是什么以及何时应该使用它们(除了指定 LoadUserProfile 用于我没有使用的 CreateProcessAsUser。我只是模拟配置单元访问)。

LoadUserProfile http://msdn.microsoft.com/en-us/library/bb762281(VS.85).aspx

RegOpenCurrentUser http://msdn.microsoft.com/en-us/library/ms724894(VS.85).aspx

根据服务和注册表文章: http: //msdn.microsoft.com/en-us/library/ms685145 (VS.85).aspx 我们应该在模拟时使用 RegOpenCurrentUser。

但是,如果用户配置文件正在漫游,RegOpenCurrentUser 应该/应该做什么 - 它应该加载它吗?

据我从这些文档中可以看出,这两个 API 都为线程模拟的用户提供了 HKEY_CURRENT_USER 的句柄。因此,它们都“加载”配置单元,即将其锁定为数据库文件,并为注册表 API 提供一个句柄。

看起来 LoadUserProfile 加载用户配置文件的方式与用户登录时的方式相同,而 RegOpenCurrentUser 没有 - 这是正确的吗?这两个 API 如何安装配置单元的根本区别是什么(如果有的话)?

如果发生的事情之间有什么影响和区别(如果有的话)

  1. 当每个模拟句柄都在使用时,用户登录或注销?

  2. 调用每个匹配的关闭函数(RegCloseKey 和 UnloadUserProfile)时,用户已经登录?

0 投票
4 回答
28976 浏览

vb.net - 在 vb.net 中以不同用户身份运行新进程

我目前正在使用本土方法在 Vista 中以不同用户的身份运行进程,我无法摆脱这种感觉,那就是它是 hack-ish 并且不太理想(除了它会破坏 UAC,让我的带有安全异常的应用程序,并迫使我完全禁用 UAC)。我的流程由两个项目(所以两个 EXE 文件)组成——一个“接口”和一个“启动存根”——这是流程:

  1. 用户有一个启动“Interface.exe notepad.exe”的快捷方式
  2. Interface.exe 有一个表单,询问他们想要使用的凭据
  3. Interace.exe 使用 ProcessStartInfo 作为新用户创建 LaunchStub.exe (LS) 的实例
  4. LS 使用 ProcessStartInfo(ShellExecute 设置为 true)来启动请求的文件,并且由于它已经作为请求的用户运行,因此新进程也是如此。

我有一个两步过程的原因是我希望用户能够右键单击操作系统对(.EXE、.SQL、.MSC 等)具有默认操作的任何文件并启动它,并且仅 ProcessStartInfo支持启用“UseShellExecute”,但该开关阻止我使用新凭据,所以我一次只能做一个。

这会导致一些问题 - 首先,用户必须已经存在于计算机上,这意味着他们之前必须在本地登录。如果该用户没有本地配置文件,则有时会启动所请求的应用程序,但我会收到注册表和配置文件异常,因为该应用程序希望存在尚不存在的事物(例如注册表中的 HKCU 配置单元,而用户不存在)因为他们从未登录过)。

我知道我应该能够将我的应用程序的权限“提升”给他们请求的用户,启动我的新进程,然后撤消提升,但我无法找到一个好的代码示例,并且我不确定它是否允许以完全不同的用户身份运行。这一切有意义吗?我只是不禁觉得有更好的方法来做到这一点。


更新:我刚刚尝试了一些我在网上找到的模拟代码,但无济于事。当与 ProcessStartInfo 结合使用时,它似乎仍然使用我当前的登录名来启动进程,而不是我提供的登录名,即使我已经使用提供的凭据激活了模拟。

0 投票
1 回答
1778 浏览

.net - 在计划任务中模拟 .NET 中的用户时出错

我有一个在 Windows Server 2003 上运行的 .NET 控制台应用程序,作为计划任务。

这使用 Process 类来运行另一个小控制台应用程序,但它使用 Process.StartInfo.Username 来模拟用户来运行它。

如果在管理员的计划任务中模拟的帐户,那么它可以正常工作,但如果不是,那么我会收到错误:

'应用程序初始化失败(0xc0000142)'</p>

我曾尝试让用户“作为批处理作业登录”和“本地登录”,但这似乎没有任何效果。控制台应用程序确实以模拟用户身份启动,但随后失败。

查看 Process Monitor,它失败之前的最后一个事件是:

Tool1.exe - 加载映像 - C:\WINDOWS\system32\kernel32.dll - 成功

我已经运行了 Depends on the tool,它报告这是错误:

GetProcAddress(0x77E40000 [c:\windows\system32\KERNEL32.DLL], "FlsAlloc") 从地址 0x7900746D 的 "c:\windows\system32\MSCOREE.DLL" 调用并由线程 1 返回 0x77E6B49C。退出 "c:\stfinstall \stf\tools\tool1\TOOL1.EXE"(进程 0xB3C),线程 1 的代码为 1282 (0x502)。

如果有人知道可能导致此错误的原因,或者更好的是,我该如何解决它,请告诉我!

也欢迎提出替代方法的建议

谢谢 :)

0 投票
4 回答
2688 浏览

asp.net - ASP.NET - 在默认模拟用户时临时模拟应用程序池服务 ID?

我必须调用 SharePoint 站点中的一些代码,这些代码在运行 Web 应用程序的同一服务 ID 下运行。默认情况下,SharePoint 会模拟查看网页的用户,而用户没有必要的权限。

使用 Web 应用程序的服务 ID 运行一些代码,然后恢复使用默认模拟的最佳方式是什么?

0 投票
1 回答
1126 浏览

c# - 在 SQL Server CLR 过程中使用 OLEDB 驱动程序的问题

我们正在尝试在 SQL Server 2005 机器上创建 C# CLR 存储过程。C# 代码通过 OLEDB 驱动程序连接到外部数据源以获取数据表。它已经在单独的控制台应用程序上进行了测试,并且可以正常运行。(OLEDEB 驱动程序是连接到专有数据库的专有驱动程序......)

在 SQL Server 上,我们已经为程序集设置了 EXTERNAL 权限级别,它是 StrongNamed 并且已经在 SQL Server 中为其创建了一个 ASSYMETRIC KEY。

当我们尝试执行该过程时,我们会遇到以下两个问题:

  • 用于联系 OLEDB 的凭据是运行 SQL 服务的凭据,而不是 sql contect 中已登录用户的凭据

  • 提出了一个 .NET 框架:

    System.Security.SecurityException:请求 System.Data.OleDb.OleDbPermission 类型的权限

似乎我们无法为进程授予运行 oledb 驱动程序所需的权限。要么是缺少配置,要么是我们做错了什么。将权限级别设置为 UNSAFE 也不是一种选择......

有没有人对这类问题有任何经验。欢迎任何意见!

0 投票
2 回答
1433 浏览

asp.net - ASP.NET 可以模拟用户删除性能计数器类别吗?

我相信我在本地机器上运行 ASP.NET 页面时成功地模拟了我自己的用户帐户。

使用此处描述的方法,我已成功将WindowsIdentity.GetCurrent().NameASPNET 更改为我的域帐户。

我可以成功写入文件系统上只有我的帐户有权访问的文件。但是,当我尝试删除性能计数器类别时,我得到Access Denied
我对注册表的分支进行了审计,它告诉我MyMachine\ASPNET 在 Object Access 失败

这是它失败的代码:

它在删除呼叫上失败。

(我的帐户是管理员,我可以在 ASP.NET 上下文之外成功运行相同的代码)。

我怀疑这个 System.Diagnostics 命名空间调用实际上是在调用一些 COM 进程,并且不知何故因为第二跳而被退回。谁能确认可能发生了什么?

编辑:异常:访问被拒绝描述:在执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详情:

System.ComponentModel.Win32Exception:访问被拒绝

在完全信任下运行。

0 投票
3 回答
3919 浏览

asp.net - ASP.NET 中的模拟和委托

我在使用 ASP.NET 访问远程服务器上的文本文件时遇到问题。ASP.NET 1.1 应用程序在 Server 2003 上运行,使用模拟和请求者的 Windows 凭据。客户端、网络服务器和远程服务器都在同一个域中,用户有权访问文本文件。用户可以通过 UNC 共享从他们的机器上打开文本文件。当用户运行直接在服务器上登录的站点时,它工作正常。但是,当用户在他们的机器上尝试时,它不起作用。应如何设置模拟以使其正常工作?

编辑:该应用程序的其他功能工作正常,它只是访问不起作用的远程文件。