IIS抱怨锁定的部分-如何找到它的锁定位置?


54

我的web.config中有以下部分:

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
    <security>
        <authentication>
            <anonymousAuthentication enabled="true" />
            <windowsAuthentication enabled="true" />
        </authentication>
    </security>
</system.webServer>

IIS7崩溃并抱怨自闭节:

模块AnonymousAuthenticationModule
通知AuthenticateRequest
处理程序StaticFile
错误代码0x80070021
配置错误不能在此路径上使用此配置部分。当节锁定在父级时,会发生这种情况。锁定默认情况下是(overrideModeDefault =“ Deny”),或者是由一个带有overlayMode =“ Deny”或旧版allowOverride =“ false”的位置标记显式设置的。

Config Source  
   69:  <authentication>
   70:    <anonymousAuthentication enabled="true" />

因此,解决此问题的常用方法是进入%windir%\system32\inetsrv\config\applicationHost.config并解锁该部分:

    <sectionGroup name="system.webServer">
        <sectionGroup name="security">
            <section name="access" overrideModeDefault="Deny" />
            <section name="applicationDependencies" overrideModeDefault="Deny" />
            <sectionGroup name="authentication">
                <section name="anonymousAuthentication" overrideModeDefault="Allow" />
                <section name="basicAuthentication" overrideModeDefault="Allow" />
                <section name="clientCertificateMappingAuthentication" overrideModeDefault="Allow" />
                <section name="digestAuthentication" overrideModeDefault="Allow" />
                <section name="iisClientCertificateMappingAuthentication" overrideModeDefault="Allow" />
                <section name="windowsAuthentication" overrideModeDefault="Allow" />
            </sectionGroup>

(或者appcmd unlock config)。

奇怪的是:我已经做到了,但仍然抱怨。

我在寻找位置(MVC是我的网站的名称,它是我正在使用的所有网站的根目录):

<location path="MVC" overrideMode="Allow">
    <system.webServer overrideMode="Allow">
        <security overrideMode="Allow">
            <authentication overrideMode="Allow">
                <windowsAuthentication enabled="true" />
                <anonymousAuthentication enabled="true" />
            </authentication>
        </security>
    </system.webServer>
</location>

仍然炸毁。我对为什么会这样感到困惑。我无法将其从web.config中删除,我想找到根本问题。

有没有办法从IIS获取特定信息,哪条规则最终会拒绝我?

编辑:我可以通过使用IIS7管理控制台来解决此问题,方法是移至最根目录(我的机器),然后单击“编辑配置”并在那里解锁该部分。仍然我想知道是否有更好的方法,因为我找不到它实际修改过的文件。


从内存来看,通常在500.19中有一个部分告诉您哪个文件位于哪个位置,位于底部(我认为)
TristanK 2012年

Answers:


78

制定以下步骤可为我解决问题:

  1. 打开IIS管理器
  2. 单击左侧树中的服务器名称
  3. 右窗格的“管理”部分,双击“配置编辑器”
  4. 在顶部,选择部分 system.webServer/security/authentication/anonymousAuthentication
  5. 在右侧窗格中,单击“解锁部分”
  6. 在顶部,选择部分 system.webServer/security/authentication/windowsAuthentication
  7. 在右侧窗格中,单击“解锁部分”

1
是否具有等效的PowerShell?我希望能够编写此脚本。
PeteStensønes18年

如果找到一个,请随时发布:)
tomfanning

我会的,我希望别人已经知道如何做。
PeteStensønes18年

1
@PeteStensønes有!>%windir%\system32\inetsrv\appcmd.exe unlock config -section:system.webServer/security/authentication/windowsAuthentication
joacar

14

这解决了我在Windows Server 2012 IIS 8.5上的错误。应该也适用于其他版本。

  1. 转到服务器管理器,单击添加角色和功能
  2. 在角色部分中,选择:Web服务器
  3. 在“ 安全性”小节下,选择所有内容(我不使用摘要,IP限制和URL授权,因为我们不使用它们)
  4. 在“ 应用程序开发”下,选择.NET Extensibility 4.5ASP>NET 4.5,两个ISAPI条目
  5. 特色栏目选择:NET 3.5.NET 4.5ASP.NET 4.5
  6. Web服务器栏目选择:Web Server (all)Management Tools (IIS Management Console and Management Service)Windows

5

配置锁定可发生在:

  1. Applicationhost.config(配置字符串:MACHINE / WEBROOT / APPHOST)

  2. 网站Web.config文件(“机器” /“网站” /“应用程序” /“网站名称”)

  3. 任何具有以下内容的应用程序web.config文件:(机器/网络/应用程序/站点名称/应用程序名称)

锁定某个部分(例如IIS配置部分<asp>),您可以拒绝将这些设置配置给层次结构中比您低的任何人。

使用GUI的功能委托功能并没有错,并且与AppCMD所做的事情非常相似,在幕后-在<location>标签中给定部分的OverrideMode设置为您关注的任何配置级别。

APPCMD可用于解锁文件,但请注意其执行位置-它不像GUI那样聪明。

添加-commit:apphostAPPCMD UNLOCK命令末尾的对象是Applicationhost.config,这是IIS操作关键文件(替换早期版本中的配置数据库;存储所有集中式设置,但允许在web.config文件中进行覆盖(如果这样做))。

如果没有-commit:apphost,APPCMD将针对web.config文件定位最接近的逻辑点-无论是在站点级别还是在应用程序级别,并使用上面的设置这样的配置字符串来表明它已更改设置。(此外:您仍然可以仅将子网站中的设置作为目标,但要提交给apphost-它使用位置标记来完成此操作)

因此,如果它说(内存释义)“已提交到MACHINE / WEBROOT / APPHOST的更改”,则表示IIS层次结构的顶层。

如果显示“已提交到MACHINE / WEBROOT / APPHOST / Dodgy网站”,则表示它查找了Dodgy网站背后的物理路径,并在该位置写入了web.config文件(或对其进行了更新)。


3

如果您使用的是IISExpress和Visual Studio 2015,则将applicationHost.config存储在$(solutionDir).vs\config\applicationhost.config(由于Nime Cloud的答案)。

只要overrideModeDefault="Allow"在适当的地方进行更改即可。

<sectionGroup name="security">
    <section name="access" overrideModeDefault="Deny" />
    <section name="applicationDependencies" overrideModeDefault="Deny" />
    <sectionGroup name="authentication">
        <section name="anonymousAuthentication" overrideModeDefault="Allow" />
etc...

1

在您的应用程序池中尝试,禁用IIS管理器的32位应用程序支持->应用程序池->选择[您的AppPool]->高级设置->启用32位应用程序-将其更改为“ False”


-2

看一下 IIS-无法在此路径上使用此配置部分(配置锁定?)

可接受的答案对我在Windows 10上非常有效,它指示执行以下操作:

  • 点击“开始按钮”
  • 在搜索框中,输入“打开或关闭Windows功能”
  • 在功能窗口中,单击:“ Internet信息服务”
  • 单击:“万维网服务”
  • 单击:“应用程序开发功能”
  • 检查(启用)功能。我检查了所有,但CGI。
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.