ASP.NET / IIS7.5编写日志文件不起作用(权限,UAC,配置,???)

时间:2011-05-12 22:49:35

标签: asp.net permissions iis-7.5 uac application-pool

我们无法将ASP.NET应用程序迁移到Windows Server 2008 R2 x64和IIS7.5。问题是我们的ASP.NET应用程序写入日志文件,并且没有写入这些日志文件。应用程序编写日志文件的唯一方法是,如果我以本地管理员用户身份登录服务器,或者右键单击并以管理员身份运行IE,这对我们来说都不是可接受的解决方案。

我们的平台是: Windows Server 2008 R2 x64(UAC设置是默认设置) IIS7.5 ASP.NET 4.0(使用Windows身份验证和模拟,都在web.config中)

我们的应用已安装到: d:[APPNAME]     [appnameWebSite](所有.aspx,.dll等文件都在这里)     \ Log(应用程序尝试将日志文件写入此文件夹)

在服务器上: 创建新的App Pool(名称:[appname],.NET 4.0,Managed Pipeline Mode:Classic,Identity:ApplicationPoolIdentity,Load User Profile:False,所有其他属性都是默认值) 创建指向D:[appname] [appnameWebSite]的IIS应用程序,并将其添加到新的应用程序池(完全信任级别) 在本地Administrators组中拥有域用户

使用上面列出的所有配置和默认设置,ASP.NET应用程序将不会写入日志文件。该应用似乎在浏览器中正常工作,但没有log.txt文件。

为了尝试“修复”这个问题,我们尝试了很多东西: 尝试的应用程序池设置:管理的管道模式:集成 尝试的应用程序池设置:标识:NetworkService 尝试的应用程序池设置:身份:LocalSystem 尝试的应用程序池设置:加载用户配置文件:True Gave Users将对文件系统的完全控制权分配给我们的应用程序文件夹结构(尝试了appname文件夹,仅尝试了Log文件夹,仅尝试了appnameWebSite和Log文件夹) 将IIS AppPool [appname](匹配新的App Pool)用户完全控制到我们的应用程序文件夹结构的文件系统(尝试了appname文件夹,仅尝试了Log文件夹,仅尝试了appnameWebSite和Log文件夹)

这些都没有帮助。同样,应用程序运行正常,只是没有创建日志文件。

如上所述,在应用程序运行时创建日志文件的唯一方法是,如果我们使用本地管理员帐户登录服务器(这是有道理的,因为他是超级用户)或者我们以管理员身份运行IE提升特权。

有什么建议吗?救命?有问题吗?

谢谢!

4 个答案:

答案 0 :(得分:9)

我尝试授予每个权限,但仍然没有获取任何日志文件。最后我遇到了this,它建议更改我的日志文件目录的所有权。我检查了,目录所有权设置为SYSTEM。我将其更改为管理员并递归应用更改。我弹出IIS,在浏览器中从网站点击一个网页,现在我有了日志文件。万岁!

注意:让我失望的是检查系统事件日志。我得到15006错误说"日志文件或目录C:\ inetpub \ logfiles \ W3SVC1 \ some.log的所有者无效。这可能是因为另一个用户已经创建了日志文件或目录。"

答案 1 :(得分:5)

好吧,在 尝试每个IIS选项,用户和组帐户,文件系统权限,Process Explorer等之后,我认为我们已经开始工作了:< / p>

  • 我们将所有IIS应用程序池和网站设置重置为默认值
  • 我们还将Log文件夹中的文件夹/文件系统权限重置为默认设置
  • 然后我们关闭了服务器上的Internet Explorer增强安全配置

成功!无论用户使用ASP.NET应用程序,无论是在服务器本身还是从工作站上运行,都会按预期编写日志文件。

我不知道在服务器上关闭Internet Explorer增强安全配置是否是正确的&#34;要做的事情或是否违反任何最佳做法,但它似乎对我们有用。

有没有人要添加什么?

答案 2 :(得分:3)

我挣扎了一段时间。 ApplicationPoolIdentity是Users组的成员,Users组具有有限的访问权限。

在资源管理器中,右键单击要写入的文件夹,然后转到“安全”。单击“高级”按钮。您将看到用户具有“读取”和“执行”权限,“用户”组可能具有或不具有“特殊”权限。如果没有,请点击更改权限,让用户能够创建文件/写入数据创建文件夹/附加数据。这仅限于此文件夹。我通常使用子文件夹,因此我不提供对整个网站的写访问权。

再次尝试创建日志文件。这是我需要设置的唯一权限才能使其正常工作。

答案 3 :(得分:0)

对我来说,诀窍是为CompanyModel.update( { [`${companyId}.results._id`]: resultsId }, { $set: { [`${companyId}.results.$.visible`]: false }} ) SYSTEM授予写入权限,不仅对日志文件夹本身,而且对路径中的每个文件夹都具有权限。这不是权限通常在Windows中如何工作的方式,但是IIS似乎对此非常重视。并不是有充分的理由从一开始就将这两个ACL删除。

如果您怀疑这是问题所在,请检查Windows日志/系统下的事件日志。此问题表现为来自源HttpEvent的错误条目,并显示为“无法创建日志文件C:\ path \ to \ logs \ W3SVC1 \ u_extend1.log。请确保日志记录目录正确并且此计算机具有对该目录。”

P.S。对于IIS 10来说确实如此,但也可能适用于其他版本。