Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
di Tobin Titus
Riassunto
Il sistema di configurazione in IIS 7 e versioni successive si basa su file XML distribuiti, non crittografati che contengono le impostazioni di configurazione per l'intera piattaforma server Web, tra cui IIS, ASP.NET e altri componenti e, facoltativamente, possono essere impostati nelle directory del contenuto insieme al contenuto Web. Diversi livelli della gerarchia di configurazione possono essere delegati dall'amministratore del computer ad altri utenti, ad esempio l'amministratore del sito o lo sviluppatore dell'applicazione. Le impostazioni predefinite sicure e il blocco predefinito limitano l'accesso in scrittura alle impostazioni di configurazione solo all'amministratore del sistema; tuttavia, funzionalità di blocco sofisticate e granulari consentono lo sblocco sicuro e la delega della gestione di impostazioni di configurazione specifiche a più utenti, nell'ambito del namespace web. Il sistema è compatibile con le versioni precedenti, a livello di API, con le versioni precedenti di IIS e a livello XML, con le versioni precedenti di .NET Framework. Questo documento offre una panoramica generale del nuovo sistema di configurazione.
Introduzione
Il sistema di configurazione in IIS si basa su file XML distribuiti, non crittografati che contengono le impostazioni di configurazione per l'intera piattaforma server Web, tra cui IIS, ASP.NET e altri componenti e, facoltativamente, possono essere impostati nelle directory del contenuto insieme al contenuto Web. Diversi livelli della gerarchia di configurazione possono essere delegati dall'amministratore del computer ad altri utenti, ad esempio l'amministratore del sito o lo sviluppatore dell'applicazione. Le impostazioni predefinite sicure e il blocco iniziale limitano l'accesso in scrittura alle impostazioni di configurazione solo all'amministratore del computer; tuttavia, funzionalità sofisticate e granulari di blocco abilitano uno sblocco sicuro e la delega della gestione di specifiche impostazioni di configurazione a più utenti, nell'ambito dello spazio dei nomi web. Il sistema è compatibile con le versioni precedenti, a livello di API, con le versioni precedenti di IIS e a livello XML, con le versioni precedenti di .NET Framework.
Il nuovo sistema di configurazione è progettato per essere:
Semplice: tutto lo stato si trova nei file; Non viene usato alcun negozio proprietario; Nessun database di configurazione in memoria che è il master reale dello stato di configurazione (a differenza del servizio IISADMIN in IIS 6.0); Lo schema è basato sui dati ed è 100% dichiarativo e individuabile.
Low-TCO: la configurazione può essere copiata insieme al contenuto Web; L'amministrazione delegata facoltativa elimina il coinvolgimento dell'amministratore del computer in ogni modifica della configurazione; L'unificazione delle impostazioni di configurazione e del modello in IIS, ASP.NET e il resto della piattaforma server Web offre un'unica soluzione per la gestione del server usando lo stesso set di strumenti e API (ad esempio, i file web.config possono contenere sia le impostazioni IIS che ASP.NET e c'è un'unica posizione per controllare le funzionalità, ad esempio l'autenticazione, l'autorizzazione, gli errori personalizzati); backup, ripristino, gestione della sicurezza (ACL) si basano su strumenti e processi standard del file system.
Sicuro: quando IIS viene installato, lo stato di configurazione si trova in un unico file protetto solo per l'accesso amministratore computer; Nessuna delega è abilitata per impostazione predefinita; Per impostazione predefinita, non vengono archiviate informazioni riservate, ad esempio password; Quando le informazioni riservate devono essere scritte nei file di configurazione, vengono crittografate automaticamente su disco; La configurazione per applicazione può essere di tipo sand boxed e isolata in un file dedicato (protetto da ACL del file system) in modo che altre applicazioni non possano condividere né leggere le impostazioni.
Estendibile: l'aggiunta allo schema è semplicemente una questione di eliminazione di un file XML nella cartella schemi; Non è necessario chiamare API o eseguire strumenti per estendere lo schema; Le impostazioni sono organizzate in blocchi correlati logicamente denominati "sezioni" (esattamente come nella configurazione di .NET Framework) e l'aggiunta di nuove sezioni è semplice (non è necessario scrivere codice, a differenza della configurazione di .NET Framework); La lettura delle impostazioni di sezione personalizzate da un modulo server o un'applicazione è semplice e semplice.
Compatibile: le applicazioni IIS esistenti possono continuare a chiamare interfacce come ABO (Admin Base Objects), il provider IIS ADSI e il provider WMI IIS 6.0; Le applicazioni .NET Framework esistenti possono continuare a chiamare interfacce come System.Configuration e System.Web.Configuration; Gli utenti che hanno familiarità con il formato XML di machine.config e web.config continueranno a sperimentare lo stesso formato e sintassi in questi file, oltre a poter modificare manualmente le impostazioni IIS che seguono lo stesso formato e modello; Gli utenti che hanno familiarità con i nomi delle proprietà metabase IIS troveranno gli stessi nomi per le proprietà nei nuovi file di configurazione iis 7.0 e versioni successive.
Schema pulito
Di seguito è riportato un esempio che illustra lo schema per la configurazione.
Illustra come le impostazioni di autenticazione sono organizzate in IIS 6 e in IIS 7.0 e versioni successive.
Annotazioni
I lettori che non hanno familiarità con i concetti di IIS 6.0 possono semplicemente ignorare il confronto con IIS 6.0 e leggere solo i concetti e i vantaggi di IIS 7.0 e versioni successive.
Verrà prima confrontato il modo in cui la configurazione viene salvata in modo permanente nel file e quindi verrà esaminata la definizione dello schema.
Nel file di configurazione stesso:
//
// Snippet from IIS 6.0 Metabase.xml
//
<IIsWebService Location ="/LM/W3SVC"
... many lines here ...
AuthFlags="AuthAnonymous"
... many lines here ...
>
</IIsWebService>
<IIsWebDirectory Location ="/LM/W3SVC/1/ROOT/aspnet_webadmin/2_0_41016"
AuthFlags="AuthAnonymous | AuthNTLM"
>
</IIsWebDirectory>
<IIsWebVirtualDir Location ="/LM/W3SVC/Info/Templates/Public Web Site/Root"
AuthFlags="AuthAnonymous"
>
</IIsWebVirtualDir>
//
// Snippet from IIS 7.0 applicationHost.config
//
<anonymousAuthentication enabled="true" userName="…" password="" />
<basicAuthentication enabled="false" />
<clientCertificateMappingAuthentication enabled="false" />
<windowsAuthentication enabled="true" >
<providers>
<add value="Negotiate" />
<add value="NTLM" />
</providers>
</windowsAuthentication>
Aspetti chiave:
- IIS 6.0 usa un elenco di proprietà molto lungo e "flat". Nessuna gerarchia o raggruppamento di proprietà. È difficile cercare le impostazioni di configurazione tra centinaia di impostazioni nello stesso elenco. IIS 7.0 e versioni successive usa una gerarchia di sezioni e gruppi di sezioni e sottoelementi all'interno delle sezioni. È facile cercare le impostazioni di autenticazione, cercandole nel gruppo di sezioni di autenticazione o in una sezione di autenticazione specifica.
- IIS 6.0 usa flag per impostare gli schemi di autenticazione. IIS 7.0 e versioni successive usa una sezione per ogni schema di autenticazione, con enabled="true|false" in ognuno di essi. Le impostazioni aggiuntive rilevanti solo per alcuni schemi di autenticazione possono essere impostate solo nelle sezioni pertinenti( ad esempio, nome utente e password possono essere impostate solo per l'autenticazione anonima).
- IIS 6.0 usa percorsi all'interno del file Metabase per specificare il livello di configurazione (servizio, directory virtuale, directory fisica). La configurazione per l'intero server si trova in un unico file. IIS 7.0 e versioni successive usa un file per impostazione predefinita, ma gli utenti possono sfruttare i file di web.config distribuiti nelle directory del contenuto, che specificano le impostazioni di configurazione per l'ambito.
- IIS 6.0 usa nomi delle proprietà lunghi nel tentativo di avere impostazioni di configurazione autodescrittive. Si sta tentando di migliorare la leggibilità del file e aiutare l'utente a capire cosa fa la proprietà. IIS 7.0 e versioni successive usano nomi brevi, che si trovano sempre nel contesto di una sezione specifica o anche di un sottoelemento all'interno della sezione.
- IIS 6.0 usa più sz (elementi delimitati da virgole in una proprietà stringa) e flag per gestire più valori di elemento, ad esempio NTAuthenticationProviders. IIS 7.0 e versioni successive usa raccolte, con semplice sintassi add/remove/clear, esattamente come la configurazione di .NET Framework. In questo modo, i livelli inferiori della gerarchia possono aggiungere (o rimuovere) solo l'elemento necessario, invece di duplicare l'intero dati con (o senza) l'elemento specificato. Offre inoltre una maggiore leggibilità del file (che si traduce in errori meno umani durante la modifica diretta).
Nel file di schema:
//
// Snippet from IIS 6.0 MBSchema.xml
//
<Property InternalName="AuthFlags" ID="6000" Type="DWORD" UserType="IIS_MD_UT_FILE" Attributes="INHERIT" >
<Flag InternalName="AuthAnonymous" Value="1" ID="6218" />
<Flag InternalName="AuthBasic" Value="2" ID="6219" />
<Flag InternalName="AuthNTLM" Value="4" ID="6220" />
<Flag InternalName="AuthMD5" Value="16" ID="6221" />
<Flag InternalName="AuthPassport" Value="64" ID="6299" />
</Property>
//
// Snippet from IIS 7.0 IIS_Schema.xml
//
<sectionSchema name="system.webServer/security/authentication/basicAuthentication">
<attribute name="enabled" type="bool" defaultValue="false" />
<attribute name="realm" type="string" />
<attribute name="defaultLogonDomain" type="string" />
<attribute name="logonMethod" type="enum" defaultValue="ClearText">
<enum name="Interactive" value="0" />
<enum name="Batch" value="1" />
<enum name="Network" value="2" />
<enum name="ClearText" value="3" />
</attribute>
</sectionSchema>
Aspetti chiave:
- IIS 6.0 usa ID (numeri) per identificare le impostazioni. IIS 7.0 e versioni successive usa stringhe descrittive per denominare le impostazioni.
- IIS 6.0 usa concetti non intuitivi, ad esempio UserType e terminologia come InternalName. IIS 7.0 e versioni successive usa nomi descrittivi che hanno senso per i lettori umani e non solo per le applicazioni.
Gerarchia dei file di configurazione
Lo stato "master" per la configurazione è sempre i file di configurazione (a differenza di IIS 6.0, dove era il database di configurazione in memoria, che è stato scaricato periodicamente su disco).
A livello radice (o globale) sono presenti due file separati:
- system32\inetsrv\config\applicationHost.config: contiene le impostazioni predefinite globali per le impostazioni del server Web (IIS).
- \windows\microsoft.net\framework\v2.0.50727\config\machine.config: contiene le impostazioni predefinite globali per le impostazioni di .NET Framework, incluse alcune delle ASP.NET (le altre si trovano nella web.config nella stessa cartella, che a volte viene chiamata radice web.config)
Il motivo per cui ci sono ancora due file separati è dato dal fatto che le due tecnologie hanno versioni diverse (a livello di pianificazione e di prodotto). IIS fa parte di Windows e .NET Framework può eseguire la versione in modo indipendente, come parte delle versioni di Visual Studio.
Nelle directory del contenuto Web possono essere presenti file facoltativi web.config che controllano il comportamento per il livello della gerarchia e verso il basso. Possono essere locali o remoti (se la cartella dei contenuti si trova in una condivisione UNC, ad esempio). Possono contenere impostazioni di configurazione per IIS, ASP.NET o qualsiasi altro framework .NET che possono essere specificate a livello loro. Per impostazione predefinita, non sono presenti file web.config.
In termini di gerarchia di ereditarietà, il file radice è machine.config, poi web.config nella stessa directory (e indicato come radice web.config), poi applicationHost.config, seguiti dai file opzionali web.config lungo lo spazio dei nomi.
File di configurazione inclusi
In alcuni casi è utile che il file web.config includa un altro file .config. Questa operazione può essere eseguita usando l'attributo configSource. Attualmente è limitato a puntare a percorsi fisici relativi nelle sottodirectory, per motivi di sicurezza (ad esempio, il file A può includere solo il file B se B è nella sottodirectory fisica di A). Ecco un esempio di base che illustra come usare configSource:
<!-- in inetsrv\applicationHost.config -->
<configuration>
<system.webServer>
<!-- mimemaps moved by the customer to a different file -->
<!-- so that this file is shorter and more readable -->
<staticContent configSource="staticContent.config"/>
<!-- the rest of system.webServer sections are here… -->
</system.webServer>
</configuration>
<!-- in inetsrv\staticContent.config -->
<configuration>
<system.webServer>
<staticContent>
<!-- all the mimemap definitions are here -->
<mimeMap ….. />
<mimeMap ….. />
<mimeMap ….. />
</staticContent>
</system.webServer>
</configuration>
In questo esempio, il cliente voleva spostare il contenuto della sezione staticContent in un file separato, in modo da avere un file più breve, più leggibile, applicationHost.config.
Si noti che quando le impostazioni di configurazione cambiano in un file di .config, il server rileverà automaticamente le modifiche e agisce su di esse. Il cliente non deve preoccuparsi del riciclo di applicazioni o pool di applicazioni o dell'intero server (il server stesso può riciclare i pool di applicazioni, ad esempio, a seconda delle impostazioni di configurazione modificate).
Organizzazione delle impostazioni
All'interno di un file di configurazione (ad esempio, per un determinato livello della gerarchia), le impostazioni sono organizzate in modo strutturato e non come elenco flat. L'unità di base di distribuzione, registrazione ed estendibilità è la sezione di configurazione. Una sezione è contenuta all'interno di un gruppo di sezioni, che a sua volta può essere contenuta in un gruppo di sezioni padre. Le sezioni non sono annidate di per sé. I gruppi di sezioni sono disponibili.
Di seguito è riportato un esempio di applicationHost.config:
<!-- section group for web server configuration -->
<system.webServer>
<!-- section group for web server security configuration -->
<security>
<!-- section group for web server authentication configuration -->
<authentication>
<!-- three sections for authentication -->
<basicAuthentcation ... />
<windowsAutnentication ... />
<anonymousAuthentication ... />
</authentication>
</security>
</system.webServer>
Le impostazioni di configurazione appartengono sempre a una sezione specifica.
I gruppi di sezioni esistono solo per una migliore strutturazione; non hanno impostazioni direttamente in esse, ma solo sezioni.
All'interno di una sezione, la struttura è la seguente:
- Elemento di configurazione: contiene le impostazioni di configurazione e potenzialmente altri elementi di configurazione. Rappresentato come elemento XML. Le sezioni sono anche elementi.
- Raccolta di configurazione: caso privato dell'elemento di configurazione, che contiene un elenco di elementi di configurazione, sotto forma di add/remove/clear (denominate direttive di raccolta). Rappresentato come elemento XML con <add>, <remove>, <clear> sottosistemi.
- Proprietà di configurazione: si tratta di un'impostazione di configurazione di tipo "leaf". Rappresentato come attributo XML.
Di seguito è riportato un esempio di applicationHost.config:
<!-- "windowsAuthentcation" is a section which is an element -->
<!-- "enabled" is a property -->
<windowsAuthentication enabled="true">
<!-- "providers" is a collection which is an element -->
<providers>
<!-- the collection contains two elements -->
<!-- "add" is the collection directive; "value" is the property -->
<add value="Negotiate"/>
<add value=""NTLM/>
</providers>
</windowsAuthentication>
Per impostazione predefinita, applicationHost.config contiene due gruppi di sezioni principali: system.applicationHost e system.webServer. Contiene anche una sezione denominata <configSections>, che è un po ' speciale in quanto viene usata internamente dal sistema di configurazione per registrare tutte le altre sezioni.
Per impostazione predefinita, machine.config contiene diversi gruppi di sezioni. Le impostazioni ASP.NET si trovano nel gruppo di sezioni system.web.
Tag di posizione contro i file di configurazione
In molti casi si desidera evitare i file web.config nelle directory del contenuto, ma si desidera ancora avere una configurazione per URL che sostituisce le impostazioni predefinite globali. Ad esempio: l'amministratore vuole specificare che un sito specifico deve usare uno schema di autenticazione e gli amministratori del sito (e gli sviluppatori di applicazioni in tale sito) non devono essere in grado di disattivarlo.
Il modo più semplice per ottenere questo risultato consiste nell'usare i tag di posizione. Si tratta di un meccanismo per specificare la configurazione per un percorso specifico, senza disporre di un web.config nella cartella mappata al percorso virtuale.
Questo esempio mostra come viene usato un tag location all'interno di applicationHost.config:
<!-- the following will take effect on MyAdminSite -->
<location path="MyAdminSite">
<system.webServer>
<security>
<authentication>
<basicAuthentication enabled="false"/>
<windowsAuthentication enabled="true"/>
<anonymousAuthentication enabled="false"/>
</authentication>
</security>
</system.webServer>
</location>
I tag di posizione possono essere usati per specificare la configurazione per il livello globale (path="."), per un sito o per un percorso specifico all'interno di un sito. In un file possono essere presenti più etichette di localizzazione. I tag di posizione possono trovarsi in qualsiasi file di .config, non solo applicationHost.config o machine.config.
I tag di posizione possono essere usati anche per le sezioni di blocco e sblocco. Per altre informazioni, vedere il lab di blocco della configurazione.
In alcuni casi, non esiste alcuna alternativa all'uso dei tag di posizione:
- Due o più percorsi virtuali mappati alla stessa cartella fisica. Ovviamente, se i due percorsi virtuali hanno una configurazione diversa, non può essere specificato in un file web.config perché è condiviso.
- Configurazione specifica del file. Non esiste alcun file web.config per i file; solo per l'intera cartella.
Riassunto
Questo documento ha fornito una panoramica iniziale, generale, del sistema di configurazione in IIS 7.0 e versioni successive. Ha evidenziato il formato dello schema più pulito; la natura distribuita del sistema di configurazione e il modo in cui abilita la delega delle impostazioni di configurazione al proprietario del sito o allo sviluppatore di applicazioni; l'organizzazione strutturata delle impostazioni nei file di configurazione; e l'integrazione tra IIS e ASP.NET sistemi di configurazione.
Per altre informazioni, è consigliabile esaminare il resto dei documenti di configurazione e, in particolare, il documento Configurazioni intrinseche, che contiene informazioni più dettagliate di basso livello sul sistema, tra cui la progettazione e l'architettura.