Informazioni sulla delega della configurazione di IIS 7.0

di Saad Ladki

Introduzione

IIS introduce un nuovo sistema di configurazione basato su file per la sua settima versione del prodotto. Questo nuovo sistema sottolinea un sistema basato sui dati adatto per un'intera piattaforma Web in cui tecnologie come ASP.NET,Dac e persino componenti di terze parti possono usare ed estendere questo archivio di configurazione per ospitare qualsiasi proprietà del sito o dell'applicazione.

Il sistema si basa su file XML definiti in un formato semplice e chiaro con una sintassi simile a ASP.NET web.config file. Questi file di configurazione contengono le impostazioni nei raggruppamenti logici e qualsiasi modifica apportata ai file viene immediatamente riflessa nel sito o nell'applicazione le cui proprietà vengono modificate.

Questo nuovo sistema offre anche un'esperienza di amministrazione delegata in cui gli amministratori possono consentire ai proprietari di siti e applicazioni di modificare impostazioni specifiche; e l'impatto di queste modifiche è limitato al sito o all'applicazione specifica in questione. Questo modello introduce il concetto di applicazioni autonome in cui le impostazioni di contenuto e configurazione sono ospitate nella directory del sito o dell'applicazione e possono essere distribuite da una copia x da un computer a un altro.

File di configurazione e schema di configurazione

IIS 7.0 e versioni successive ha un file di configurazione centrale denominato applicationHost.config che si trova in %WINDIR%\System32\InetSrv\Config\. Questo file sostituisce il file metabase.xml usato da IIS 6.0 per l'archivio di configurazione. Questo nuovo sistema di configurazione è molto semplice, basato su file, ma molto potente. Non è disponibile alcun servizio di configurazione, poiché IISADMIN non è obbligatorio. Ogni processo di lavoro ha un'istanza di un componente lettore di configurazione e recupera direttamente la configurazione dai file.

Inoltre, non esiste alcuna rappresentazione in memoria della configurazione. Dopo l'emissione di una modifica a un file, viene prelevata immediatamente dal processo di lavoro e riflessa nel sito, nell'applicazione o nella directory virtuale specificata.

Le impostazioni globali applicationHost.config file house per le diverse funzionalità e componenti di IIS e altre tecnologie Web. Tutte le proprietà impostate in questo file verranno applicate a tutti i siti, le applicazioni e le directory virtuali nel computer.

Il lettore di configurazione usato da IIS comprende il formato, la sintassi e la denominazione corretta di ogni sezione di configurazione, elemento e attributo perché sono definiti in un file di schema. Lo schema per la configurazione è definito nei file che si trovano nella %WINDIR%\System32\InetSrv\Config\Schema\ directory . Quando si crea un'istanza del sistema di configurazione, il processo di lavoro legge lo schema in memoria e consente al sistema di comprendere le proprietà disponibili per l'impostazione e il relativo formato. Come minimo, IIS_schema.xml ,ASPNET_schema.xml e FX_schema.xml file si trovano in questa directory e definiscono la struttura di configurazione per le sezioni applicabili rispettivamente alle funzionalità di IIS, ASP.NET e .NET Framework.

Lo schema definisce diversi aspetti della configurazione e delle relative sezioni, ad esempio la denominazione di sezioni e proprietà, i tipi previsti per i valori, l'intervallo di questi valori o se uno di essi è univoco o obbligatorio. Definisce anche il valore predefinito che verrà chiamato da un attributo specifico. Nel caso specificato in cui una proprietà non è definita in applicationHost.config, il relativo valore viene ricavato dall'impostazione predefinita specificata nel file di schema.

Oltre a questo file centrale, applicationHost.config, diversi file diweb.config possono essere visualizzati a qualsiasi livello della gerarchia di URL. Questi file possono essere visualizzati nel sito, nell'applicazione, nella directory virtuale o anche nei livelli di percorso fisico. Questi file definiscono proprietà i cui valori eseguono l'override delle impostazioni globali definite in applicationHost.config. Tuttavia, queste modifiche sono applicabili solo nell'ambito in cui viene visualizzato il file, ad esempio per il sito, l'applicazione, la directory virtuale o il percorso fisico in cui risiede il file web.config.

Gerarchia di configurazione ed efficace configurazione

Oltre applicationHost.config, IIS usa ASP.NET, che si basa sia sul machine.config che sui file radice web.config . Il file machine.config definisce le proprietà necessarie per tutte le funzionalità del framework. Il file di web.config radice definisce le impostazioni globali per le proprietà definite per tutte le applicazioni Web ASP.NET. Questi due file sono analoghi a applicationHost.config di IIS. I tre file esistono perché la versione di .NET Framework e IIS sono separate. In un sistema Windows Server specifico possono essere installate più versioni di Framework con una singola versione di IIS.

Pertanto, viene definita e calcolata una gerarchia di configurazione per le impostazioni di configurazione del sistema. La gerarchia inizia da machine.config, quindi passa al file web.config radice, seguito da applicationHost.config. Da allora, qualsiasi file di web.config facoltativo che si trova a livello di sito, applicazione o directory virtuale viene aggiunto e applicato alla gerarchia. Alla fine, le proprietà ereditano dal file padre al file figlio da machine.config fino all'ultimo file web.config (se presente) e la configurazione effettiva viene calcolata per un determinato percorso.

Il comportamento di ereditarietà viene eseguito per impostazione predefinita. Qualsiasi impostazione a un livello inferiore nella gerarchia esegue l'override di un'impostazione padre definita in un file al di sopra del livello corrente. Tuttavia, più in basso nella gerarchia, l'ambito della configurazione è più limitato. Dove come machine.config, le impostazioni del web.config radice e dei file applicationHost.config si applicano a tutti gli elementi del sistema, le impostazioni facoltative dei file di web.config si applicano solo al percorso corrente e al seguente (che si tratti di un sito, di un'applicazione o di una directory virtuale).

Sezioni di configurazione

All'interno di un file di configurazione sono disponibili impostazioni che possono essere lette e impostate. Le impostazioni vengono raggruppate in modo strutturato. Più impostazioni simili o applicabili a una funzionalità specifica (ad esempio ASP, autenticazione, ISAPI e così via) vengono raggruppate in blocchi di unità logica denominati sezioni di configurazione. Ogni sezione di configurazione può includere altre sezioni di configurazione, ma in genere definiscono elementi, raccolte o attributi.

Un elemento di configurazione è un elemento XML che definisce più attributi di configurazione. Una raccolta di configurazione è un caso speciale di un elemento di configurazione che contiene un elenco di elementi definiti con le direttive di configurazione add/remove/clear. Infine, gli attributi di configurazione sono impostazioni di configurazione foglia che rappresentano attributi XML.

Il frammento di codice seguente mostra le impostazioni per la <sezione defaultDocument> . La parola abilitata è un attributo in cui la parola files è un elemento che include un elenco di altri elementi definiti dalla direttiva add e una serie di attributi.

<defaultDocument enabled="true"> 
    <files> 
        <add value="Default.htm" /> 
        <add value="Default.asp" /> 
        <add value="index.htm" /> 
        <add value="index.html" /> 
        <add value="iisstart.htm" /> 
        <add value="default.aspx" /> 
    </files> 
</defaultDocument>

In questa sezione di configurazione è associato uno schema. Il frammento di codice seguente illustra lo schema per la <sezione defaultDocument> nel file IIS_schema.xml. Lo schema definisce il nome della sezione e lo spazio dei nomi in cui viene visualizzato (in questo caso system.webServer). Inoltre, lo schema descrive gli attributi e gli elementi e per ogni nome, tipo, valori predefiniti e altri dati interessanti.

<sectionSchema name="system.webServer/defaultDocument"> 
    <attribute name="enabled" type="bool" defaultValue="true" /> 
    <element name="files"> 
      <collection addElement="add" clearElement="clear" removeElement="remove" mergeAppend="false"> 
        <attribute name="value" type="string" isUniqueKey="true"/> 
      </collection> 
    </element> 
</sectionSchema>

Sezione speciale: <configSections>

La <configSections> sezione di configurazione è una sezione speciale definita in applicationHost.config. Viene usato come punto del Registro di sistema per le sezioni di configurazione del server IIS. In questa sezione vengono registrate le sezioni di configurazione correnti disponibili nel sistema. Nel caso specifico in cui il sistema di configurazione venga esteso e al server venga aggiunta una sezione personalizzata, è necessario registrarla aggiungendo una voce di elemento a questa sezione.

Il frammento di codice seguente mostra la <configSections> voce per la <sezione defaultDocument> . Altre voci sono state omesse per chiarezza. La parte interessante di è la voce del gruppo di <configSections> sezioni che definisce lo spazio dei nomi di ogni sezione, in questo caso system.webServer e il valore dell'attributo overrideModeDefault, che per questa sezione è "Consenti". Poiché allowDefinition non è dichiarato, viene ricavato dallo schema e il valore predefinito è "Everywhere".

<configSections> 
    <sectionGroup name="system.webServer"> 
        <section name="defaultDocument" overrideModeDefault="Allow" />
    </sectionGroup>
</configSections>

Oltre a definire una sezione e il relativo gruppo di sezioni, sono definiti due attributi chiave: overrideModeDefault e allowDefinition.

L'attributo overrideModeDefault è un attributo facoltativo che definisce lo stato bloccato di una sezione. I valori disponibili sono Allow o Deny. Il valore predefinito è "Consenti". Tutte le sezioni iis correlate a qualsiasi aspetto critico, di sicurezza o di prestazioni del server sono bloccate con questo attributo impostato su "Nega". Se l'attributo overrideModeDefault è impostato su "Deny", tutti i file di configurazione a un livello inferiore (ad esempio, web.config file) che impostano un valore per una proprietà per la sezione di configurazione specifica non sono in grado di rendere effettivi ed eseguire l'override dei valori globali. Ciò comporta una violazione del blocco e si verifica un errore.

L'attributo allowDefinition è un altro attributo facoltativo che definisce il livello della gerarchia in cui è possibile definire la sezione e impostare le proprietà. Se il valore è MachineOnly, la sezione può essere impostata solo in applicationHost.config o machine.config. Se il valore è MachineToRootWeb, la sezione può essere impostata nei file MachineOnly o anche nel web.config radice. Se il valore è MachineToApplication, la sezione può essere impostata in tutti i tre file precedenti o anche in web.config file nella cartella radice dell'applicazione. Infine, se il valore è Everywhere (che è l'impostazione predefinita) può essere impostato in qualsiasi file di configurazione, indipendentemente da quelli che influiscono sulla configurazione a livello globale o in web.config file che si applicano a un determinato sito, applicazione o directory virtuale.

Il concetto di posizione

Qualsiasi impostazione specificata in un determinato file della gerarchia di configurazione si applica a tale livello e inferiore con la possibilità di eseguire l'override da file figlio. Tuttavia, è possibile specificare e applicare le impostazioni di configurazione a determinati percorsi nel file di configurazione corrente usando il tag location con un attributo path. Se il file di configurazione è applicationHost.config, i tag di percorso possono includere un percorso che va da tutti i siti, le applicazioni e le directory virtuali nel sistema a un sito, un'applicazione, una directory virtuale o un file specifici. Il tag di posizione può essere specificato anche nei file web.config e può includere qualsiasi percorso relativo per i percorsi sotto il sito corrente, l'applicazione o la directory virtuale.

Il frammento di codice seguente illustra come specificare una proprietà di configurazione applicabile solo al sito per sviluppatori. Questa operazione può essere ottenuta anche tramite un file di web.config nel contenuto del sito. La configurazione efficace per il sito per sviluppatori sarà l'elenco di voci per la raccolta di file in applicationHost.config più il percorso e qualsiasi file di web.config per il sito.

<location path="Developer Site" overrideMode="Allow"> 
    <defaultDocument enabled="true"> 
        <files> 
            <add value="Developer.htm" /> 
        </files> 
    </defaultDocument> 
</location>

Se non viene dichiarato alcun percorso, equivalente a specificare un punto (.), il percorso viene compreso come da questo livello e inferiore a tutti i percorsi figlio. Questa operazione viene eseguita anche in applicationHost.config specificando la configurazione per il livello globale.

Un attributo che può essere definito in un tag location è overrideMode. Analogamente a overrideModeDefault, questo specifica se la sezione di configurazione specificata a cui si fa riferimento e le proprietà impostate nel tag di posizione corrente possono essere modificate e sottoposte a override a livelli inferiori della gerarchia.

Blocco e sblocco di una sezione

Il concetto iniziale di blocco di una sezione tramite il tag overrideModeDefault nella <configSections> sezione può essere acquisito ed esteso per essere più granulare. Consentendo l'override di una sezione a <configSections> livello, la sezione viene aperta e i relativi valori possono essere sostituiti da chiunque nel sistema tramite file web.config a qualsiasi livello dello spazio dei nomi URL. Tuttavia, ciò può comportare un grave rischio per la sicurezza e può causare effetti negativi sulla disponibilità o sulle prestazioni del sistema. Tramite i tag di posizione, è possibile usare l'attributo overrideMode e specificare lo stato di blocco di una sezione e vincolarlo per un determinato percorso.

Il frammento di codice seguente illustra come sbloccare la <windowsAuthentication> sezione per tutti i siti, le applicazioni e le directory virtuali nel sistema. Questa operazione viene eseguita impostando "Consenti" nell'attributo overrideModeDefault. Lo svantaggio di questo approccio è che sblocca una sezione per tutti e chiunque sia in grado di sostituire le impostazioni a livello di sito o applicazione tramite web.config file.

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

Il frammento di codice seguente illustra come ottenere la stessa operazione, sbloccando la <windowsAuthentication> sezione, ma solo per administratorSite in modo che le proprietà per tale sezione possano essere modificate tramite web.config file a livello di sito AdministratorSite. Gli altri siti del sistema hanno il comportamento predefinito di una sezione bloccata <windowsAuthentication> . Questa operazione viene eseguita tramite l'attributo overrideMode.

<location path="AdministratorSite" overrideMode="Allow"> 
   <security> 
        <authentication> 
            <windowsAuthentication enabled="false"> 
                <providers> 
                    <add value="Negotiate" /> 
                    <add value="NTLM" /> 
                </providers> 
            </windowsAuthentication> 
        </authentication> 
   </security> 
</location> 
 
The location tag path can be specified here a site, application or even a virtual directory to which the administrator wants to unlock configuration and/or apply configuration at that level.

È possibile ottenere il comportamento opposto, che blocca una sezione per un sito specifico, mentre il resto del sistema è in grado di modificarlo. Ad esempio, <defaultDocument> è una sezione con l'attributo overrideModeDefault impostato su "Consenti" nella <configSections> sezione, ma tramite un tag location, è possibile bloccare questa sezione per il sito di base. I frammenti di codice seguenti illustrano come eseguire questa operazione impostando anche in modo che l'unico valore accettato dal sistema come pagina predefinita per il server venga visualizzato come home page è intitolato basic.htm. La direttiva clear nulls tutti i valori ereditati dai livelli superiori nella gerarchia di configurazione, che in questo caso è l'elenco globale dei file di applicationHost.config.

<location path="Basic Site" overrideMode="Deny"> 
    <defaultDocument enabled="true"> 
        <files> 
       </clear> 
            <add value="basic.htm" /> 
        </files> 
    </defaultDocument> 
</location>

Blocco granulare

L'apertura di una sezione tramite un tag di posizione è un modo efficace per sbloccare una sezione e tutte le relative proprietà per il proprietario del sito o dell'applicazione del percorso specificato. Si tratta di un approccio all-or-nothing per consentire ai proprietari di siti e applicazioni di avere accesso illimitato a una sezione. Tuttavia, a volte gli amministratori desiderano un controllo specifico su determinate proprietà in una sezione e desiderano il controllo su un determinato valore. Altri possono essere delegati. È qui che entra in gioco il blocco granulare.

Il blocco granulare è un raggruppamento di attributi specifici che possono essere impostati su elementi o altri attributi. Il blocco granulare può dichiarare se i percorsi al di sotto di quello corrente possono modificare i valori di configurazione. I valori possono essere letti, ma se sono impostati blocchi, non possono essere modificati o persino dichiarati. Non modificare i valori i cui blocchi sono impostati, perché ciò comporterà errori di violazione del blocco della configurazione.

Il primo attributo nel raggruppamento granulare di blocco è lockAttributes. LockAttributes definisce un elenco delimitato da virgole di attributi bloccati per i percorsi al di sotto del livello di configurazione corrente. Accetta anche un asterisco (*) come valore, il che significa che tutti gli attributi sono bloccati. A questo punto, la sezione di configurazione può essere letta nei percorsi a livello figlio e anche negli attributi bloccati, ma la modifica di quelle protette genera errori.

Il frammento di codice seguente illustra come bloccare lo stato abilitato della <sezione defaultDocument> per il sito per sviluppatori. Se il proprietario del sito per sviluppatori disabilita la funzionalità del documento predefinita o anche dichiara la proprietà con lo stesso valore indicato nel tag di posizione, si verifica una violazione del blocco.

<location path="Developer Site" > 
    <defaultDocument enabled="true" lockAttributes="enabled" /> 
</location>

Il secondo attributo nel raggruppamento granulare di blocco è lockElements. LockElements definisce un elenco delimitato da virgole di elementi bloccati per i percorsi al di sotto del livello di configurazione corrente. Come lockAttributes, accetta anche un asterisco (*) come valore, il che significa che tutti gli elementi sono bloccati. Ciò è molto utile per le sezioni di configurazione che hanno più elementi o raccolte e devono essere protetti per i percorsi a livello figlio. Anche in questo caso, la modifica di uno dei valori bloccati genera errori.

Il frammento di codice seguente illustra come bloccare la raccolta di file per il sito per sviluppatori. In questo modo viene lasciato al proprietario del sito di decidere se la funzionalità del documento predefinita è abilitata o meno; ma, se abilitato, non può modificare i valori globali ed eredita ciò che l'amministratore del computer ha dichiarato in applicationHost.config.

<location path="Developer Site"> 
    <defaultDocument enabled="true" lockElements="files" > 
        <files> 
            <add value="Developer.htm" /> 
        </files> 
    </defaultDocument> 
</location>

L'esempio lockElement è utile anche all'interno delle raccolte per bloccare le direttive di tale raccolta. Le direttive sono parole chiave come aggiungere, rimuovere, cancellare una raccolta. Bloccando le direttive, un amministratore può ottimizzare se un elenco di raccolte è disponibile per l'aggiunta o la rimozione di determinati o tutti gli elementi.

Il frammento di codice seguente illustra come bloccare la rimozione e la cancellazione delle voci correnti nella raccolta di file. Se necessario, il proprietario del sito può aggiungere nuove voci alla raccolta di file. Se il proprietario del sito specifica un tag non crittografato o tenta di rimuovere una voce, si verifica una violazione del blocco.

<location path="Developer Site"> 
    <defaultDocument enabled="true" > 
        <files lockElements="clear,remove"> 
            <add value="Developer.htm" /> 
        </files> 
    </defaultDocument> 
</location> 
 
Besides lockAttribute and lockElement, there are negative counterparts: lockAllAttributesExcept, and lockAllElementsExcept. These attributes achieve  the inverse action of the previous ones in which the comma-separated list declares the attributes and elements to be unlocked while the rest are not  available to be edited in child paths.

È disponibile anche un attributo lockItem . Questo blocca un attributo e funziona a livello di attributo XML. Il frammento di codice seguente mostra in che modo l'amministratore del sito può eseguire qualsiasi operazione da eseguire, ad esempio aggiungere o rimuovere voci nella raccolta, ad eccezione della modifica della voce basic.htm nella raccolta di file.

<location path="Developer Site"> 
    <defaultDocument enabled="true" > 
        <files> 
            <add value="basic.htm" lockItem="true"/> 
        </files> 
    </defaultDocument> 
</location>

Riepilogo

Questo documento ha descritto una panoramica di base sul sistema di configurazione, sui relativi file, sulle funzionalità di schema e delega. È stata illustrata anche la gerarchia di configurazione e la configurazione effettiva. L'articolo ha anche presentato un'introduzione alle sezioni di configurazione e alla relativa struttura di elementi e attributi. Esemplifica il concetto di posizione, blocco e blocco granulare.

In generale, IIS introduce e introduce un nuovo sistema di configurazione basato su file con funzionalità per avere tutte le configurazioni in un file di configurazione centrale o distribuito tramite web.config file in cui gli amministratori di siti e applicazioni sono in grado di modificare le proprietà applicabili alle applicazioni e al contenuto. Con il modello di configurazione distribuita il concetto di applicazioni autonome in cui sono ospitate sia le impostazioni di contenuto che di configurazione nel sito o nella directory dell'applicazione e può essere distribuitax-copy da un computer a un altro è abilitata.