Che ruolo gioca "Identità pool di app" per un pool di applicazioni?


16

Quando si parla di sicurezza IIS 7.5, AFAIK:

Identità pool di app decide chi esegue la mia applicazione Web.

Il metodo di autenticazione decide chi sono i client autenticati.

Ho una cartella virtuale configurata in questo modo:

  • Uso l'autenticazione anonima con l'aspettativa che tutti i client debbano essere autenticati come IUSR .
  • Dò a IUSR il pieno controllo della cartella.
  • L'identità del mio pool di app è impostata come account XXX, che non ha alcuna autorizzazione per la cartella. (Ho impostato questo intenzionalmente)

Ma risulta che non riesco a sfogliare i file in quella cartella. Una volta che autorizzo l'account XXX ad accedere a quella cartella, le cose vanno bene.

Quindi quale ruolo svolge l'identità del pool di app nell'autenticazione anonima? È del tutto inaspettato che devo dare all'account Identity Pool App l'autorizzazione per accedere alla cartella. Ho pensato che l'autenticazione anonima sarebbe stata sufficiente?

Grazie.

Risposte:


18

Molti termini sovraccarichi qui e un cambiamento tra IIS 7 e 7.5.

Identità pool di app e account pool di app

Iniziamo con l'identità del pool di applicazioni (I minuscola, noto anche come account pool di app ):

Per come lo dico, l' account del pool di applicazioni è l'account utilizzato per l' avvio di un pool di app e l'identità che il pool di app assume quando non impersona nessun altro.

Pertanto, indipendentemente dall'identità fornita al pool di app, dovrà essere in grado di leggere i file nella cartella del contenuto : in particolare {ma non limitato a} qualsiasi file web.config (che fa parte della configurazione di IIS e controllare ciò che il App Pool farà).

Se non riesce ad accedere a una cartella, supporrà che ci sia un file web.config importante (che cambia il gioco) e visualizzerà un errore. Pertanto, l'account del pool di app deve disporre dell'accesso in lettura a tutte le cartelle del contenuto.

ApplicationPoolIdentity

Perché differenziare l'account del pool di app (l'identità del pool di app) dall'identità del pool di app? Perché ApplicationPoolIdentity utilizzato da maiuscole speciali è un nuovo tipo di account - un account di servizio gestito - introdotto e reso predefinito in IIS 7.5 / Windows 2008 R2 e disponibile anche da Windows 2008 SP2 (ma non predefinito).

Vedere Identità pool di applicazioni su IIS.Net

Quando si crea un sito Web in R2 utilizzando la GUI:

  • verrà creato un pool di app per ospitare quel sito Web e
  • il tipo di account sarà ApplicationPoolIdentity, anziché Servizio di rete (impostazione predefinita 2008), Servizio locale o Sistema locale.

Con 2008 RTM, l'account predefinito del pool di app era Network Service oltre a univoco identificativo / univoco del pool di app; il nuovo tipo di account AppPoolIdentity R2 / SP2 è un account simile a un servizio di rete (ovvero è il computer quando ci si connette off-box), ma impedisce la rappresentazione di un altro pool di app all'interno della stessa casella.

Torna alla domanda originale:

  • L'account del pool di app definisce chi viene eseguito come quando non impersona nessun altro

  • Il metodo di autenticazione descrive come autenticare i client (al fine di impersonarli)

  • L' account utente anonimo definisce chi verrà eseguito come quando si impersona un utente per una richiesta non autenticata: IUSR è tale utente.

Per inciso, con IIS 7.5, è possibile impostare l'account utente Anonimo come Identità pool di applicazioni (proprietà del metodo di autenticazione Anonimo), il che potrebbe rendere più semplice isolare e proteggere il contenuto di un determinato sito Web.

Impostare le autorizzazioni utilizzando IIS AppPool \ YourSiteName per il formato del nome. (vedi anche questo post )


4

Stai vedendo due cose, che sono comunemente confuse in ASP.NET:

  1. "identità utente": l'autenticazione di un account utente non ha nulla a che fare con l'account o l'identità che in realtà viene eseguita in entrambi IIs e ASP.NET. L'autenticazione anonima consente a qualsiasi utente di accedere a qualsiasi contenuto pubblico senza fornire un nome utente e una password al browser client. L'account IUSR anonimo che viene autenticato per impostazione predefinita in IIS applica solo l'accesso al contenuto del sito Web pubblico. Non influisce sui processi o sulle risorse utilizzati dagli II o dai servizi ASP.NET sottostanti.
  2. "identità dell'applicazione": si tratta dell'account "WindowsIdentity" effettivo sul server che in realtà viene eseguito dietro IIS e ASP.NET, che è l'account Identity Pool di applicazioni assegnato al pool da IIs e assegnato ad ASP.NET. Il processo ASP.NET viene eseguito con questo account Identity Pool di applicazioni (chiamato account virtuale in IIs versione 7.5+) per impostazione predefinita.

Spiegazione: In primo luogo, "autenticazione" in ASP.NET è solo un evento solitamente impostato in web.config che accede a un determinato account utente che viene passato come token utente da IIs ad ASP.NET come un semplice oggetto HttpContext ... cioè la sessione o il contesto corrente dell'utente corrente. In realtà non cambia l'identità di Windows che esegue il processo ASP.NET, passa solo un token ID utente ad esso. Usando HttpContext, il tuo codice può usare quell'id o quel nome per archiviare i diritti del database in varie sezioni del tuo sito web. Tuttavia, ciò non influirà sull'accesso ai file da parte di ASP.NET perché non influisce né modifica l'identità dell'account "processo" effettivo dell'applicazione che esegue ASP.NET su IIs.

Ciò non accade fino a quando non si esegue la "rappresentazione" che indica ad ASP.NET di impersonare qualsiasi token che gli viene passato dagli II e di eseguirlo con tale ID account. È possibile impostare la rappresentazione in web.config. Quando si attiva la rappresentazione in ASP.NET, WindowsIdentity cambia nel processo di lavoro in qualsiasi account autenticato che viene passato ad ASP.NET da IIS e quindi è possibile accedere ai file, in base ovviamente ai diritti assegnati a tale account utente. È importante notare quando ciò si verifica temporaneamente e ASP.NET può ripristinare la sua identità di processo predefinita che è di nuovo nelle versioni IIs correnti l'account Identità pool di applicazioni assegnato a un determinato pool di app.

Quando IIs utilizza semplicemente il semplice account utente anonimo senza alcuna autenticazione esplicita impostata in ASP.NET, IIs avvia per impostazione predefinita l'account Identity Pool del pool di applicazioni del sito Web assegnato e lo passa ad ASP.NET e al processo di lavoro che lo esegue. L'account dell'identità del pool di applicazioni elabora tutte le richieste per IIS ed esegue ASP.NET per quel sito.

Quando IIs inizia con questa configurazione e vi accede da un utente, in realtà autentica dietro le quinte per impostazione predefinita l'account IUSR anonimo che determina l'accesso alle pagine Web e ad altre risorse di base. Ma quell'account NON viene passato ad ASP.NET. E non influisce sull'IIS di Identity Pool di applicazioni in esecuzione e su cui viene eseguito ASP.NET.

Se imposti Impersonate su "true", ad esempio web.config, e stai utilizzando l'account IUSR anonimo predefinito in IIs per l'accesso pubblico, e imposti su true in modo esplicito la proprietà anonymousAuthentication in web.config (invece di utilizzare Windows o altro account di accesso), II lancerà Identity Pool Identity e IIs e ASP.NET eseguiranno entrambi i processi di applicazione come account IUSR anonimo autenticato e rappresentato.

Quando lo fai, ASP.NET e i suoi processi verranno ora eseguiti con l'account IUSR .... ovvero, il processo delle applicazioni di ASP.NET eseguirà il suo account WindowsIdentity come account IUSR. Ora puoi applicare l'accesso in lettura / scrittura a quell'account IUSR anonimo e alle cartelle a cui vuoi accedere. (Nota: assicurarsi tuttavia di aggiungere l'account di processo predefinito, l'account Pool di applicazioni per il pool, i diritti e quelle cartelle. Questo è secondo la raccomandazione di Microsoft)

In bocca al lupo!


2

Ci sono due contesti di autenticazione in gioco. Il processo del server Web (che gestisce le richieste Web) viene eseguito come utente Identità pool di app. Quando arriva una richiesta per il tuo host virtuale, il pool di applicazioni rappresenta l'utente elencato nelle "Credenziali di autenticazione anonima" del sito specifico, per impostazione predefinita IUSR.

Tutti gli script eseguiti all'interno del tuo sito Web verranno eseguiti come IUSR, ma la registrazione e alcune altre funzioni verranno eseguite come utente del pool di app (per impostazione predefinita Servizio di rete - sebbene questo sia stato modificato di recente per utilizzare un utente speciale del pool di app virtuali). L'identità del pool di app (servizio di rete) deve essere in grado di elencare i file nella directory poiché alcuni controlli vengono eseguiti nello stack delle richieste prima che il controllo venga trasferito allo script.

È buona norma eseguire un sito per pool e impostare l'identità del pool di app in modo che venga eseguito come lo stesso utente dell'utente anonimo del sito Web. È possibile uscire dal contesto Utente anonimo (IUSR) ed elevare i privilegi a quelli dell'identità del pool di app stesso.

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.