IIS se queja de una sección bloqueada: ¿cómo puedo averiguar dónde está bloqueada?

54

Tengo esta sección en mi web.config:

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

IIS7 se bloquea y se queja de la sección de autenticación:

Módulo AnonymousAuthenticationModule
Notification AuthenticateRequest
Handler StaticFile
Código de error 0x80070021
Error de configuración Esta sección de configuración no se puede utilizar en esta ruta. Esto sucede cuando la sección está bloqueada en un nivel primario. El bloqueo se realiza de manera predeterminada (overrideModeDefault = "Deny"), o se establece explícitamente mediante una etiqueta de ubicación con overrideMode = "Deny" o el legado allowOverride = "false".

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

Entonces, la forma habitual de resolver esto es entrar %windir%\system32\inetsrv\config\applicationHost.configy desbloquear la sección:

    <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>

(alternativamente appcmd unlock config)

Lo extraño: lo he hecho y todavía se queja.

Busqué ubicaciones (MVC es el nombre de mi sitio web que es la raíz de todos los sitios que estoy usando):

<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>

Aún así explota. Estoy desconcertado de por qué sucede esto. No puedo eliminarlo de web.config, quiero encontrar el problema raíz.

¿Hay alguna manera de obtener información específica de IIS que regla finalmente me niega?

Editar: pude arreglar esto usando la consola de administración IIS7 yendo a la raíz (mi máquina) y haciendo clic en "Editar configuración" y desbloqueando la sección allí. Aún así, me gustaría saber si hay una mejor manera ya que no puedo encontrar el archivo que realmente modifica.

Michael Stum
fuente
De memoria, normalmente hay una sección en el 500.19 que le dice qué archivo en qué ubicación está en cuestión, en la parte inferior (creo)
TristanK
1
Esto ha sido respondido muy bien en SO
paqogomez

Respuestas:

78

Resolvió estos pasos que solucionan el problema para mí:

  1. Abra el administrador de IIS
  2. Haga clic en el nombre del servidor en el árbol de la izquierda.
  3. Panel derecho, sección Administración, haga doble clic en Editor de configuración
  4. En la parte superior, elige la sección system.webServer/security/authentication/anonymousAuthentication
  5. Panel derecho, haga clic en Desbloquear sección
  6. En la parte superior, elige la sección system.webServer/security/authentication/windowsAuthentication
  7. Panel derecho, haga clic en Desbloquear sección
tomfanning
fuente
1
¿Tiene esto un equivalente de PowerShell? Me gustaría poder escribir esto.
Pete Stensønes
Si encuentra uno, no dude en publicarlo :)
tomfanning
Lo haré, esperaba que alguien más ya supiera cómo.
Pete Stensønes
1
@ PeteStensønes tiene! >%windir%\system32\inetsrv\appcmd.exe unlock config -section:system.webServer/security/authentication/windowsAuthentication
joacar
14

Esto resolvió mi error en Windows Server 2012, IIS 8.5. Debería funcionar para otras versiones también.

  1. Vaya al Administrador del servidor , haga clic en Agregar roles y características
  2. En la sección de roles, elija: Servidor web
  3. En la subsección Seguridad , elija todo (excluí el resumen, las restricciones de IP y la autorización de URL, ya que no los usamos)
  4. En Desarrollo de aplicaciones, elija .NET Extensibility 4.5y ASP>NET 4.5, ambas entradas ISAPI
  5. En el Características sección de elegir: NET 3.5, .NET 4.5,ASP.NET 4.5
  6. En el servidor Web sección de elegir: Web Server (all), Management Tools (IIS Management Console and Management Service),Windows
Sanbuur Dahir Hersi
fuente
5

El bloqueo de la configuración puede ocurrir en:

  1. Applicationhost.config (cadena de configuración: MACHINE / WEBROOT / APPHOST)

  2. un archivo de configuración web del sitio (MÁQUINA / WEBROOT / APPHOST / nombre del sitio web)

  3. Cualquier archivo web.config de aplicación que (MÁQUINA / WEBROOT / APPHOST / Nombre del sitio / Nombre de la aplicación)

El bloqueo de una sección (sección: sección de configuración de IIS, por ejemplo <asp>) le permite negar la capacidad de configurar esos ajustes a cualquier persona en un nivel inferior en la jerarquía que usted.

Usar la función de delegación de características de la GUI no está mal, y hace algo muy similar a lo que hace AppCMD, debajo de las cubiertas: establece OverrideMode para una sección determinada en una <location>etiqueta en cualquier nivel de configuración en el que esté enfocado.

APPCMD se puede usar para desbloquear archivos, pero preste atención a donde dice que lo está haciendo: no es tan inteligente como la GUI al respecto.

Agregar -commit:apphostal final de su APPCMD UNLOCKcomando apunta a Applicationhost.config, que es el archivo clave para la operación IIS (reemplaza la metabase de versiones anteriores; almacena todas las configuraciones centralizadas pero permite anulaciones (si lo hace) en archivos web.config).

Sin -commit: apphost, APPCMD apuntará al punto lógico más cercano para un archivo web.config, ya sea a nivel del sitio o de la aplicación, e indicará que ha cambiado la configuración usando una cadena de configuración como el conjunto anterior. (Aparte: todavía puede apuntar solo a la configuración en sitios web secundarios, pero comprometerse a apphost: utiliza etiquetas de ubicación para lograr eso)

Entonces, si decía (paráfrasis de memoria) "Cambios comprometidos con MACHINE / WEBROOT / APPHOST", eso significaría el nivel superior de la jerarquía de IIS.

Si dice "comprometido con MACHINE / WEBROOT / APPHOST / Dodgy Web Site", eso significaría que buscó la ruta física detrás del sitio web de Dodgy y escribió un archivo web.config (o lo actualizó) en esa ubicación.

TristanK
fuente
3

Si está utilizando IISExpress y Visual Studio 2015, el applicationHost.configse almacena en $(solutionDir).vs\config\applicationhost.config(gracias a la respuesta de Nime Cloud ).

Simplemente cambie overrideModeDefault="Allow"donde sea apropiado.

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

Pruebe en su grupo de aplicaciones, desactive las aplicaciones de 32 bits compatibles con el Administrador de IIS -> Grupos de aplicaciones -> seleccione [Su grupo de aplicaciones] -> Configuración avanzada -> Habilitar aplicaciones de 32 bits - cámbielo a 'Falso'

JohnR
fuente
-2

Eche un vistazo a IIS: esta sección de configuración no se puede utilizar en esta ruta (¿bloqueo de configuración?)

La respuesta aceptada funcionó perfectamente para mí en Windows 10, indica que haga lo siguiente:

  • Haga clic en "botón de inicio"
  • en el cuadro de búsqueda, ingrese "Activar o desactivar las funciones de Windows"
  • en la ventana de funciones, haga clic en "Servicios de información de Internet"
  • Haga clic en "Servicios de la World Wide Web"
  • Haga clic en "Características de desarrollo de aplicaciones"
  • Marque (habilite) las funciones. Lo comprobé todo menos CGI.
Divi perdomo
fuente