对所有人的写入权限均有效,IUSR,IIS_IUSRS,DefaultAppPool不起作用。为什么?


10

好。在这里,我们尝试在Windows Server 2008 R2中的IIS 7.5上建立经典ASP网站。在网站根目录下有一个名为dbc的文件夹,其中有一个用于在处理每个页面时读写某些信息的文件。

问题是,如果我授予IUSR写入权限和IIS_IUSRS写入权限或DefaultAppPool写入权限,则会收到“拒绝访问路径'E:.. \ websiteroot \ dbc \ filename.txt'”

但是,如果我授予该dbc文件夹上的每个人写入权限,那么我不会收到任何错误,一切似乎都非常完美。

更多信息:该网站以经典管道模式运行,启用了匿名身份验证(也许是唯一启用的身份验证)。我尝试使用IUSR帐户以及应用程序池身份进行匿名身份验证。就我而言,ApplicationPoolIdentity是网站身份验证的身份。我们使用COM +进行文件I / O。和经典的ASP Server.CreateObject实例化一个对象。COM +作为网络服务运行。

有什么想法吗?我不想授予所有人“写”权限。我想念什么吗?

求助:这就是我所做的。

我的名为CipherDemo的网站在IIS 7.5中的AppPoolIdentity下运行,该身份可以由Identity IIS AppPool \ CipherDemo定位。我使用ICACLS对该文件夹授予RW权限。

而实际上正在执行文件I / O的COM +在网络服务标识下运行。当我使用Process Monitor跟踪“访问被拒绝”错误时,它发现网络服务对该文件夹仅具有“读取”权限。

我使用了ICACLS“文件夹名称” / grant:r“ NT AUTHORITY \ NETWORKSERVICE” :( OI)(CI)RXW / T授予对该文件夹的写访问权限。

并解决了。

我本意是因为该网站以CipherDemo Identity身份运行,所以将使用该帐户通过COM +访问该文件。但是令人尴尬的是发现COM +仍然可以在其自身的Identity边界上运行。

Answers:


5

在IIS 7.5(以及可选的IIS 7)中,所有工作进程都使用应用程序池标识运行:用户“ IIS AppPool * PoolName *”。

授予该用户而不是所有人的访问权限(您需要在选择身份对话框中键入该名称-该名称不会显示在find函数中)。

iis.net上有一个非常有用的页面,其中涵盖了更详细的内容。

另请注意:在IIS7(Server 2008)下:

  • 您可以在高级设置中基于每个应用程序池设置应用程序池标识。
  • 没有GUI支持,因此您需要命令行来设置权限(icacls.exe)。

最终,SQL Server的身份选择也不知道应用程序池的身份:使用CREATE LOGIN并且CREATE USER最初,在此之后,GUI可用于授予角色等。


@理查德-是的。感谢您的快速回复。最近,msdn论坛非常无用。回来吧...我已经在IIS.net网站和serverfault上徘徊了几天。我在IIS 7.5 / Win Server 2008 R2中使用默认的应用程序池标识。因此,我已授予“ dbc”文件夹上的IIS APPPOOL \ DefaultAppPool Wite权限。另外,我还授予了该文件夹IUSR和IIS_IUSRS写权限。我给所有人写权限后,它仍然无法工作。我知道我缺少一些东西。您能帮忙吗?
gmaran23

@ gmaran23:如果明显的步骤不起作用,我使用Process Monitor来查看到底是什么失败(通常是打开的文件要求太多的访问权限,或者我未能正确设置ACL或其他原因)否则打开文件)。
理查德

@Richard-我在c#中使用FileMode.Open,FileAccess.ReadWrite使用文件读取器执行读/写操作。-我觉得那部分很好。文件已经打开了别的东西 -我想这是可以排除的,因为它不可能。.ACL出问题了。我将检查并在此处发布。也将尝试过程监视器。感谢您的协助:)
gmaran23

@ gmaran23:如果它不起作用,请不要以为您知道任何东西都可以测试。这些年来,我浪费了太多时间,因为我知道某件事是正确的或不正确的-我常常错了。
理查德

1
@ gmaran23:使用工具确切地了解正在发生的事情:您是在猜测而不是系统地解决问题。(1)使用Process Explorer确认文件未打开。(2)使用Process Monitor查看请求的访问权限和身份(以正确的文件身份)。(3)根据文件上的ACL仔细检查#2的结果(并打开高级安全属性以获取完整详细信息)。(4)调整一件事,然后转到#1直到固定。如果您在几次迭代后仍然陷于困境,请使用完整的细节(并要具体说明)来扩展Q。
理查德

5

您可以通过直接输入NTFS GUI来添加该帐户。名称格式为IIS APPPOOL\<<app pool name>>,例如IIS APPPOOL\DefaultAppPool。(请参阅此Microsoft支持文章

一种替代解决方案:我一直使用“网络服务”帐户作为应用程序池用户,向其授予写权限。


是的,这个技巧很好,但是我已经做到了。我为应用程序池使用默认的“ ApplicationPoolIdentity”。对于文件夹“ dbc”,我已经授予了IIS AppPool \ DefaultAppPool的写权限。但是,直到我授予每个人“写”权限后,它仍然无法工作。
gmaran23

1

如果只希望将文件夹WRITE权限授予特定用户,则还应该将站点的“匿名用户身份”更改为“特定用户”,而不是“应用程序池身份”。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.