13

根据msdn

ASP.NET 网页和服务器控制代码在 Web 服务器上的 ASP.NET 工作进程的上下文中执行。如果您在 ASP.NET 网页或服务器控件中使用 Start 方法,则新进程将在具有受限权限的 Web 服务器上执行。该进程不会在与客户端浏览器相同的上下文中启动,并且无权访问用户桌面。

究竟哪个 账户“受限权限”

例子 :

  • 我登录到win7为RoyiN
  • Windows 身份验证已启用
  • 在web.config 中启用了模拟(整个站点)BobK
  • W3WP用户是UserA(不是网络也不是 ApplicationPoolIdentity)。

在 C# 中我这样做Process.start("....cmd.exe...")凭据为:“ ”,“ ”,“ ”) StartinfoMartinPasswordDomain

  • 谁是account最终运行的高效者cmd.exe

  • “受限权限”实际上与谁有关?

4

3 回答 3

5

模拟不会在这里发挥作用,因为在引擎盖下,Process.Start它依赖于两个本机 Win32 调用之一:

如果提供了 ProcessStartInfo.UserName:

CreateProcessWithLogonW(startInfo.UserName, startInfo.Domain, ...)

CreateProcessWithLogonW

如果不:

CreateProcess(null, cmdLine, null, null, true, ...)

创建过程

传递给 CreateProcess的nulls 可能会咬你;来自 MSDN:

该结构的 lpSecurityDescriptor 成员指定主线程的安全描述符。如果 lpThreadAttributes 为 NULL 或 lpSecurityDescriptor 为 NULL,则线程获取默认安全描述符。线程的默认安全描述符中的 ACL 来自进程令牌。

请注意,它表示来自进程令牌,而不是调用线程 - 模拟身份没有机会加入派对,因为它绑定到线程。

于 2012-12-28T19:31:02.600 回答
2

我相信 MSDN 条目指的是即使启用了模拟并且您处于特定用户上下文中,新进程也将由该进程产生 - 并且模拟发生在线程级别。也就是说,我确实相信它会在“UserA”上下文中运行。

这是相关的 KB 条目:

http://support.microsoft.com/kb/889251

请注意,同一条目描述了如何使用 CreateProcessAsUser 来允许模拟。

于 2012-12-28T19:12:59.007 回答
2

正如我在尝试解决这个问题时发现的那样,很多小事情都是不同的。它可能在 RoyiN 下运行,但您可能会发现 USERPROFILE 设置为 C:\Windows\system32\config\systemprofile,而不是您的 /Users/RoyiN 文件夹。

根据您要执行的操作,这可能会导致一些问题。就我而言,启动 git 进程将永远挂起。不仅 USERPROFILE 和 HOME 错误,我还发现模拟用户不能很好地使用映射的网络驱动器。

于 2012-12-28T19:19:51.233 回答