Come usare il blocco nella configurazione di IIS 7.0

di Saad Ladki

Contenuto

Questo documento illustra come bloccare e sbloccare la configurazione nel server. Verranno fornite informazioni sulle impostazioni che i file di configurazione a livello di applicazione possono eseguire l'override e su come usare l'elemento <location> per bloccare intere sezioni.

Si proverà con un blocco più granulare delle impostazioni di configurazione, all'interno di sezioni, ad esempio:

  • Blocco di elementi e attributi specifici
  • Blocco di tutti gli elementi , ad eccezione di elementi o attributi specifici
  • Blocco di direttive di raccolta specifiche, ad esempio le <add>direttive , <remove>e <clear>
  • Blocco di elementi specifici nelle raccolte

Dopo aver letto questo documento, si saprà come gestire diverse funzionalità di blocco della configurazione modificando direttamente gli elementi XML nei file di configurazione (l'interfaccia programmatica per eseguire queste attività segue molto attentamente la struttura XML).

Questo documento è incentrato intenzionalmente solo sulla modifica di elementi XML nei file di configurazione, anziché su come eseguire le stesse attività usando l'API di amministrazione, gli script o l'interfaccia utente.

Introduzione

IIS 7.0 e versioni successive consente di bloccare e sbloccare le impostazioni di configurazione in vari livelli e ambiti. Il blocco della configurazione significa che non può essere sottoposto a override (o impostato su tutti) a livelli inferiori nella gerarchia. La configurazione di sblocco può essere eseguita solo a livello di blocco. Ciò è utile, ad esempio, quando si crea una configurazione diversa per siti o percorsi diversi e solo alcuni siti e percorsi possono eseguirne l'override. Il blocco può essere eseguito a livello di sezione o per elementi, attributi, elementi di raccolta e direttive di raccolta specifici all'interno di sezioni.

Attività 1: Blocco di una sezione tramite un <location> tag

In questa attività si apprenderà come usare il <location> tag per bloccare (o sbloccare) intere sezioni di configurazione a livello globale in modo che non possano essere sottoposte a override a livello di applicazione della gerarchia di configurazione.

Nota

Per impostazione predefinita, la maggior parte delle sezioni IIS in applicationHost.config è bloccata e nessuna di .NET Framework è bloccata (incluse le sezioni ASP.NET nel <gruppo di sezioni system.web> in machine.config e root web.config).

Usando un editor di testo, ad esempio Blocco note, aprire il file applicationHost.config nel percorso seguente:

%windir%\system32\inetsrv\config\applicationHost.config

Esaminare la <configSections> sezione nella parte superiore del file: contiene metadati relativi alle sezioni di configurazione di questo file, ad esempio nomi per le sezioni, contenenti gruppi di sezioni e se sono bloccati o meno.

Le sezioni bloccate vengono specificate dall'attributo "overrideModeDefault", ovvero "Consenti" o "Deny". Per impostazione predefinita, alcune sezioni non sono bloccate, come specificato da questa riga, ad esempio:

<section name="defaultDocument" overrideModeDefault="Allow" />

In questo caso, si tratta della <windowsAuthentication> sezione . È bloccato per impostazione predefinita.

Per sbloccare l'intera sezione per tutte le applicazioni nel server, spostarne il contenuto dal percorso corrente nel file alla fine del file e inserirlo all'interno di un <location overrideMode="Allow"> elemento . Ricordare anche di avere i gruppi di sezioni che lo circondano: <system.webServer, quindi><securitye quindi><authentication .> Il risultato finale sarà simile al seguente:

<location overrideMode="Allow">
  <system.webServer>
     <security>
        <authentication>
          <!-- the content of windowsAuthentication section is here -->
        </authentication>
     </security>
  </system.webServer>
</location>

La sezione è ora sbloccata per tutte le applicazioni. È possibile specificare un percorso nel tag di posizione, in modo che la sezione venga sbloccata solo per questo percorso. Il percorso predefinito, se non specificato (come nel passaggio precedente), è path="." (o path="", la stessa cosa), che significa "questo livello corrente". In questo caso, poiché si tratta di applicationHost.config, il livello corrente indica il livello globale. È anche possibile usare i tag di posizione in qualsiasi punto della gerarchia dello spazio dei nomi, ad esempio in un web.config a livello di vdir, per bloccare la configurazione da questo punto verso il basso.

Ecco un esempio di come sbloccare questa sezione solo per il sito "AdminSuperTrusted". Ciò significa che web.config file in quel sito possono eseguire l'override delle impostazioni in questa sezione; ma, per tutti gli altri siti nella casella, è bloccato a livello globale e non può essere sottoposto a override.

In questo esempio, è necessario lasciare il contenuto della sezione nella posizione originale in applicationHost.config e quindi specificare la sezione nel tag location con un percorso specifico:

<location path="AdminSuperTrustedSite" overrideMode="Allow">
  <system.webServer>
    <security>
      <authentication>
        <!-- note: this is different than previous example, in that  -->
        <!-- the content of the section is in the original place and -->
        <!-- was not moved here; in addition, the section is also    -->
        <!-- specified here, just by its name, so that it gets       -->
        <!-- unlocked only for the site specified in the location.   -->
        <windowsAuthentication/>
      </authentication>
    </security>
  </system.webServer>
</location>

Tornare al terzo esempio precedente, la sezione viene sbloccata per tutte le applicazioni in tutti i siti (percorso percorso="."). Verificare che il gruppo di sezioni di autenticazione primaria <(quello esterno all'elemento<location>, sopra nel file) non contenga una <sezione windowsAuthenitcation>>. Una sezione non può essere visualizzata nello stesso file sia all'esterno di un tag di posizione che all'interno di un <percorso path="."> tag; si tratta di una configurazione non valida.

Per verificare se una sezione è bloccata, passare a http://localhost/app nel browser.

Se la sezione è bloccata, il browser visualizza un errore perché il file di web.config a livello di applicazione contiene la <windowsAuthentication> sezione. Ciò significa che il web.config tenta di eseguire l'override <windowsAuthentication> per il relativo livello. Tuttavia, poiché tale sezione è ora bloccata a livello globale, la configurazione nel file di web.config non è valida.

Modificare il tag di posizione in modo che overrideMode="Deny". In questo modo la sezione viene bloccata di nuovo. Sperimentare con altre sezioni, ad esempio le sezioni ASP.NET in machine.config o web.config radice. Provare a bloccarli a livello globale ed eseguirne l'override a livello di web.config.

Attività 2: Blocco di elementi e attributi specifici

Basandosi sull'attività precedente, individuare la <windowsAuthentication> sezione all'interno del <location> tag. Impostare il tag location per sbloccare la sezione: overrideMode="Allow". Solo non verranno bloccate parti specifiche della sezione.

Impostare l'attributo abilitato su true, quindi bloccarlo impostando lockAttributes="enabled".

Ciò impedisce a un file di configurazione a livello di applicazione di modificare il valore dell'attributo <windowsAuthentication>abilitato della sezione.

Se si desidera bloccare altri attributi, aggiungerli al valore lockAttributes separato da virgole, come nell'esempio seguente:

lockAttributes="enabled,attribute1,attribute2"

È anche possibile bloccare tutti gli attributi usando "*", come in questo esempio:

lockAttributes="*"

La sezione dovrebbe ora essere simile alla seguente:

<location path="." overrideMode="Allow">   <system.webServer>
    <security>
      <authentication>
        <windowsAuthentication enabled="true" lockAttributes="enabled">          
          <providers>
            <add value="Negotiate" />
            <add value="NTLM" />
          </providers>
        </windowsAuthentication>
      </authentication>
    </security>
  </system.webServer>
</location>

Nel file web.config per l'applicazione provare a eseguire l'override delle impostazioni nella <windowsAuthentication> sezione .

Nel browser richiedere alla pagina di verificare che sia possibile eseguire l'override di tutte le impostazioni ad eccezione di quelle bloccate, in questo caso l'attributo abilitato .

Nota

Specificando semplicemente l'attributo nel file web.config si verifica un errore di configurazione, anche se l'attributo impostato nel file Web.config ha lo stesso valore del file ApplicationHost.config. L'impostazione di un attributo bloccato su qualsiasi valore viene considerato un tentativo di override dell'attributo e pertanto ha esito negativo. Si noti anche che gli attributi sono diversi dagli elementi , nell'attività successiva si bloccherà un elemento.

Rimuovere l'attributo lockAttributes .

Impostare lockElements="providers" per bloccare l'elemento <providers> all'interno della sezione.

Se sono presenti altri elementi da bloccare, è possibile aggiungerli separati da virgole, come illustrato di seguito:

lockElements="providers,element1,element2"

La sezione dovrebbe ora essere simile alla seguente:

<location path="." overrideMode="Allow">   <system.webServer>
    <security>
      <authentication>
        <windowsAuthentication enabled="true" lockElements="providers">
          <providers>
            <add value="Negotiate" />
            <add value="NTLM" />
          </providers>
        </windowsAuthentication>
      </authentication>
    </security>
  </system.webServer>
</location>

Nell'applicazione Web.config file eseguire l'override dell'elemento <providers> impostandolo o provando ad aggiungere, rimuovere o cancellare la raccolta.

Nel browser richiedere la pagina e notare che viene visualizzato un errore. Nel file web.config eseguire l'override di altri elementi o attributi, ad esempio l'attributo abilitato . Passare alla pagina e notare che non viene visualizzato alcun errore.

Rimuovere l'attributo lockElements .

Attività 3: Blocco di tutti gli elementi tranne attributi specifici

In questa attività si apprenderà come bloccare tutti gli elementi o gli attributi in una sezione, ad eccezione di quelli specifici definiti. Ciò è utile nei casi in cui non si è certi delle proprietà che la sezione ha o avrà in futuro e si vuole bloccare tutto tranne le proprietà impostate in modo esplicito per essere sbloccate.

Basandosi sull'attività precedente, individuare la <windowsAuthentication> sezione nel tag location.

Impostare gli attributi lockAllElementsExcept o lockAllAttributesExcept su un elenco delimitato da virgole di elementi o attributi da bloccare. Ad esempio, la sezione potrebbe essere simile alla seguente:

<windowsAuthentication enabled="true" lockAllElementsExcept="providers">
     <providers>
          <add value="Negotiate" />
          <add value="NTLM" />
     </providers>
</windowsAuthentication>

In alternativa, come segue:

<windowsAuthentication enabled="true" lockAllAttributesExcept="enabled">
     <providers>
          <add value="Negotiate" />
          <add value="NTLM" />
     </providers>
</windowsAuthentication>

In questa sezione specifica non sono attualmente presenti altri attributi o elementi. Se si vuole testare l'effetto dell'impostazione degli attributi lockAllElementsExcept o lockAllAttributesExcept , aggiungere gli stessi attributi ad altre sezioni con un set di attributi più completo.

Attività 4: Blocco di alcune direttive di raccolta

In questa attività si apprenderà come bloccare le <add> direttive e <remove> in una raccolta, in modo che a livello di applicazione gli elementi del file di configurazione possano essere aggiunti ma non rimossi.

Basandosi sull'attività precedente, individuare la <windowsAuthentication> sezione nel tag location.

Impostare l'attributo lockElements nell'insieme <providers> da rimuovere, deselezionare.

Al termine, la sezione sarà simile alla seguente:

<windowsAuthentication enabled="true" >
  <providers lockElements="remove,clear">
    <add value="Negotiate" />
    <add value="NTLM" />
  </providers>
</windowsAuthentication>

Nel file web.config dell'applicazione creare un <remove> elemento che rimuove l'elemento NTLM dalla raccolta.

Al termine, il file di web.config è simile al seguente:

<configuration>
  <system.webServer>
    <security>
      <authentication>
        <windowsAuthentication>
          <providers>
            <remove value="NTLM" />
          </providers>
        </windowsAuthentication>
      </authentication>
    </security>
  </system.webServer>
</configuration>

Nel browser richiedere http://localhost/app.

Attività 5: Blocco di elementi specifici in una raccolta

In questa attività si apprenderà come bloccare elementi di raccolta specifici. Gli sviluppatori possono comunque aggiungere elementi alla raccolta a livelli inferiori (applicazione) della gerarchia e possono comunque rimuovere elementi non bloccati dalla raccolta. Tuttavia, non possono rimuovere gli elementi bloccati in modo specifico. Impossibile cancellare la raccolta, perché la cancellazione significa rimuovere tutti gli elementi dalla raccolta.

Basandosi sulle attività precedenti, individuare la <windowsAuthentication> sezione nel tag location.

Nell'insieme <providers> , nell'elemento <add> per il provider NTLM, impostare lockItem su "true".

Al termine, la sezione sarà simile alla seguente:

<windowsAuthentication enabled="true" >
  <providers>
    <add value="Negotiate" />
    <add value="NTLM" lockItem="true" />
  </providers>
</windowsAuthentication>

Nel file di web.config dell'applicazione creare un <remove> elemento che rimuove l'elemento NTLM dalla raccolta.

Al termine, il file di Web.config è simile al seguente:

<configuration>
  <system.webServer>
    <security>
      <authentication>
        <windowsAuthentication>
          <providers>
            <remove value="NTLM" />
          </providers>
       </windowsAuthentication>
      </authentication>
    </security>
  </system.webServer>
</configuration>

Nel browser, la richiesta http://localhost/app ha esito negativo.

Riepilogo

In questo documento si è appreso come bloccare le impostazioni di configurazione. È possibile bloccare un'intera sezione, usando un <location> elemento o impostando l'attributo lockItem di un tag su true. Il blocco può essere più flessibile e granulare se si usano le impostazioni lockAttributes, lockElements, lockAllAttributesExcept, lockAllElementsExcept o lockItem negli elementi della raccolta e se si usano le impostazioni lockElements nelle raccolte per specificare direttive di raccolta specifiche (<add>, <remove>o <clear>). Il blocco può verificarsi a qualsiasi livello della gerarchia, non solo in ApplicationHost.config. Il blocco ha effetto da tale livello verso il basso.