我最近把我们的一台服务器从Server 2003和IIS6移到了Server 2008 R2和IIS7(技术上我认为是IIS7.5)。 这样做,我正在转换一个用传统的ASP编写的小型账户pipe理工具,并且遇到了用户模拟的问题。 到目前为止,广泛的search还没有太多的帮助。
在IIS6下,该站点被configuration为模拟login用户。 因此,如果域pipe理员login,他能够运行命令来创build用户目录,调整权限等。使用Procmon,您可以看到以该用户身份执行的进程。 这工作得很好。
但是,在IIS7下使用相同的代码,我无法得到这种行为。 我已启用基本身份validation,禁用匿名身份validation,启用模拟,并已将应用程序池更改为经典,而不是集成stream水线。 似乎一切正常configuration,但是,由传统ASP站点启动的所有进程继续运行作为默认的AppPool身份而不是login的用户。
如果重要,程序正在启动,代码如下:
set Wsh = Server.CreateObject("WScript.Shell") Wsh.Run("cmd.exe /C mkdir D:\users\foo")
通过Procmon进行监视显示,根据pipe道模式,cmd.exe作为“Classic .NET AppPool”或“DefaultAppPool”运行。
任何关于如何让经典ASP站点冒充和执行身份validation用户的build议是非常好的。 谢谢!
为什么你还没有启用IIS中的“集成Windows身份validation”?
有没有在本地login?
在本地pipe理员?
确保:
你从默认改变web.config
<authentication mode="None" />
至
<authentication mode="Windows" />
有一个名为LogonMethod的鲜为人知的设置,它可以改变用匿名或纯文本loginlogin的用户帐户的function。
我(想我)记住了IIS 5或6的这种变化,所以有可能再次改变为7。这个效果正如你所描述的那样 – 一个交互式用户不能做的事情就不会有问题。
毕竟,这是Kerberos约束委托和协议转换的原因,但是这可能有助于解决这个问题。
LogonMethod – IIS 6和更早版本的属性 – http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/fa99f59f-d11f-41f7-b220-ad9d433f80b0.mspx?mfr=true
LogonType – 接受较less选项的应用程序池类似的属性(但服务可能适用于您) – http://www.iis.net/ConfigReference/system.applicationHost/applicationPools/add/processModel
噢,可能的(虽然你怎么说血腥?)不太可能你的WScript对象运行在一个COM容器中,并且与工作进程具有不同的标识。
旧post,但也许有人会觉得有帮助。 我在这个问题上挣扎,find了一个办法。
如果您需要使用特殊用户运行.asp页面(我遇到了date和货币格式问题),请尝试在App池中将指定的用户设置为Identity,然后将“Load User Profile”设置为True。 这解决了我的问题。