IIS si lamenta di una sezione bloccata: come posso sapere dove è bloccata?


54

Ho questa sezione nel mio web.config:

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

IIS7 si arresta in modo anomalo e si lamenta della sezione relativa all'autenticazione:

Modulo AnonymousAuthenticationModule
Notification AuthenticateRequest
Handler StaticFile
Error Code 0x80070021
Errore di configurazione Questa sezione di configurazione non può essere utilizzata in questo percorso. Ciò accade quando la sezione è bloccata a livello padre. Il blocco è di default (overrideModeDefault = "Deny") o impostato esplicitamente da un tag di posizione con overrideMode = "Deny" o l'eredità allowOverride = "false".

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

Quindi il solito modo per risolverlo è entrare %windir%\system32\inetsrv\config\applicationHost.confige sbloccare la sezione:

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

(in alternativa, appcmd unlock config).

La cosa strana: l'ho fatto e si lamenta ancora.

Ho cercato Posizioni (MVC è il nome del mio sito Web che è la radice di tutti i siti che sto 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>

Ancora esplode. Sono perplesso sul perché questo accada. Non riesco a rimuoverlo dal web.config, voglio trovare il problema di root.

C'è un modo per ottenere informazioni specifiche da IIS quale regola alla fine mi sta negando?

Modifica: sono stato in grado di risolvere questo problema utilizzando la console di gestione IIS7 andando alla radice (la mia macchina) e facendo clic su "Modifica configurazione" e sbloccando la sezione lì. Mi piacerebbe comunque sapere se esiste un modo migliore poiché non riesco a trovare il file che effettivamente modifica.


Dalla memoria, di solito c'è una sezione nel 500.19 che ti dice quale file in quale posizione è in questione, in fondo (penso)
TristanK,

1
La risposta è stata molto buona su SO
paqogomez,

Risposte:


78

Ho risolto questi passaggi che risolvono il problema per me:

  1. Apri Gestione IIS
  2. Fare clic sul nome del server nella struttura a sinistra
  3. Riquadro di destra, sezione Gestione, fare doppio clic su Editor di configurazione
  4. Nella parte superiore, seleziona la sezione system.webServer/security/authentication/anonymousAuthentication
  5. Nel riquadro di destra, fai clic su Sblocca sezione
  6. Nella parte superiore, seleziona la sezione system.webServer/security/authentication/windowsAuthentication
  7. Nel riquadro di destra, fai clic su Sblocca sezione

1
Questo ha un equivalente di PowerShell? Mi piacerebbe essere in grado di scrivere questo.
Pete Stensønes,

Se ne trovi uno, sentiti libero di pubblicarlo :)
tomfanning

Lo spero, speravo che qualcun altro già sapesse come.
Pete Stensønes,

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

14

Ciò ha risolto il mio errore su Windows Server 2012, IIS 8.5. Dovrebbe funzionare anche per altre versioni.

  1. Vai a Server Manager , fai clic su Aggiungi ruoli e funzionalità
  2. Nella sezione ruoli selezionare: Web Server
  3. Nella sottosezione Sicurezza scegli tutto (ho escluso digest, restrizioni IP e autorizzazione URL poiché non li usiamo)
  4. In Sviluppo applicazioni selezionare .NET Extensibility 4.5e ASP>NET 4.5, entrambe le voci ISAPI
  5. Nella Caratteristiche sezione di scegliere: NET 3.5, .NET 4.5,ASP.NET 4.5
  6. Nel Web server sezione di scegliere: Web Server (all), Management Tools (IIS Management Console and Management Service),Windows

5

Il blocco della configurazione può avvenire su:

  1. Applicationhost.config (stringa di configurazione: MACHINE / WEBROOT / APPHOST)

  2. un file Web.config del sito (MACCHINA / WEBROOT / APPHOST / Nome sito Web)

  3. Qualsiasi file web.config dell'app che (MACCHINA / WEBROOT / APPHOST / Nome sito / Nome app)

Il blocco di una sezione (sezione: sezione di configurazione di IIS, ad es. <asp>) Consente di negare la possibilità di configurare tali impostazioni a chiunque abbia un livello inferiore nella gerarchia di te.

L'uso della funzione di delega delle funzioni della GUI non è sbagliato e fa una cosa molto simile a quella di AppCMD, sotto le copertine: imposta OverrideMode per una data sezione in un <location>tag a qualsiasi livello di configurazione su cui ti concentri.

APPCMD può essere utilizzato per sbloccare i file, ma presta attenzione a dove dice che lo sta facendo - non è intelligente come la GUI al riguardo.

L'aggiunta -commit:apphostalla fine del APPCMD UNLOCKcomando ha come destinazione Applicationhost.config, che è il file chiave per l'operazione IIS (sostituisce la metabase dalle versioni precedenti; memorizza tutte le impostazioni centralizzate ma consente le sostituzioni (se lo si fa) nei file web.config).

Senza -commit: apphost, APPCMD sceglierà come target il punto logico più vicino per un file web.config, sia a livello di sito che di app, e indicherà che è stata modificata l'impostazione usando una stringa di configurazione come il set sopra. (A parte: puoi comunque scegliere come target solo le impostazioni nei siti Web secondari, ma impegnarti in apphost - utilizza i tag di posizione per farlo)

Quindi se dicesse (parafrasi della memoria) "Modifiche impegnate in MACHINE / WEBROOT / APPHOST", ciò significherebbe il livello più alto della gerarchia di IIS.

Se dice "impegnato in MACHINE / WEBROOT / APPHOST / Sito Web Dodgy", ciò significherebbe che ha cercato il percorso fisico dietro il sito Web Dodgy e ha scritto un file web.config (o aggiornato) in quella posizione.


3

Se si utilizza IISExpress e Visual Studio 2015, la applicationHost.configviene memorizzato in $(solutionDir).vs\config\applicationhost.config(grazie a del Nime cloud risposta ).

Basta cambiare overrideModeDefault="Allow"dove appropriato.

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

1

Prova nel tuo pool di applicazioni, disabilita il supporto delle applicazioni a 32 bit Gestione IIS -> Pool di applicazioni -> seleziona [Il tuo AppPool] -> Impostazioni avanzate -> Abilita applicazioni a 32 bit - modificalo in "Falso"


-2

Dai un'occhiata a IIS: questa sezione di configurazione non può essere utilizzata in questo percorso (blocco della configurazione?)

La risposta accettata ha funzionato perfettamente per me su Windows 10, indica di eseguire le seguenti operazioni:

  • Fai clic su "Pulsante Start"
  • nella casella di ricerca, inserisci "Attiva o disattiva le funzionalità di Windows"
  • nella finestra delle funzionalità, fare clic su "Internet Information Services"
  • Fai clic su "Servizi World Wide Web"
  • Fai clic su "Funzionalità di sviluppo dell'applicazione"
  • Controlla (abilita) le funzionalità. Ho controllato tutti tranne CGI.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.