IIS AppPoolIdentity e permessi di accesso in scrittura del file system

Ecco un problema con IIS 7.5 e ASP.NET con cui ho svolto ricerche e che non ho seguito da nessuna parte. Qualsiasi aiuto sarebbe molto apprezzato.

La mia domanda è: utilizzando ASP.NET in IIS 7.5, in che modo IIS e / o il sistema operativo consentono all’applicazione Web di scrivere in una cartella come C:\dump durante l’esecuzione in full trust? Com’è che non devo aggiungere esplicitamente l’accesso in scrittura per l’utente del pool di applicazioni (in questo caso ApplicationPoolIdentity )?

Questo lo so molto:

  • In IIS 7.5, l’identity framework predefinita per un pool di ApplicationPoolIdentity è ApplicationPoolIdentity .
  • ApplicationPoolIdentity rappresenta un account utente di Windows chiamato “IIS APPPOOL \ AppPoolName”, creato quando viene creato il pool di applicazioni, dove AppPoolName è il nome del pool di applicazioni.
  • L’utente “IIS APPPOOL \ AppPoolName” è per impostazione predefinita un membro del gruppo IIS_IUSRS .
  • Se stai utilizzando Full Trust, la tua applicazione web può scrivere su molte aree del file system (escluse cartelle come C:\Users , C:\Windows , ecc.). Ad esempio, la tua applicazione avrà accesso a scrivere su alcune cartelle, come C:\dump .
  • Per impostazione predefinita, al gruppo IIS_IUSRS non viene fornito l’accesso in lettura o scrittura a C:\dump (almeno non l’accesso visibile tramite la scheda “Protezione” in Esplora risorse).
  • Se si nega l’accesso in scrittura a IIS_IUSRS , si otterrà un SecurityException quando si tenta di scrivere nella cartella (come previsto).

Quindi, tenendo conto di tutto ciò, in che modo viene concesso l’accesso in scrittura all’utente “IIS APPPOOL \ AppPoolName”? Il processo w3wp.exe viene eseguito come questo utente, quindi cosa consente a questo utente di scrivere in una cartella a cui non sembra avere accesso esplicito?

Si prega di notare che ho capito che questo è stato probabilmente fatto per comodità, dal momento che sarebbe un problema concedere a un utente l’accesso a tutte le cartelle su cui ha bisogno di scrivere se si sta utilizzando Full Trust. Se si desidera limitare questo accesso, è sempre ansible eseguire l’applicazione in Medium Trust. Sono interessato a scoprire come il sistema operativo e / o IIS consentano l’esecuzione di tali scritture, anche se non sembra esserci alcun accesso esplicito al file system.

    Ad ApplicationPoolIdentity viene assegnata l’appartenenza al gruppo Users e al gruppo IIS_IUSRS . A prima vista potrebbe sembrare un po ‘preoccupante, tuttavia il gruppo Users ha diritti NTFS piuttosto limitati.

    Ad esempio, se provi a creare una cartella nella cartella C:\Windows , scoprirai che non puoi. ApplicationPoolIdentity deve ancora essere in grado di leggere i file dalle cartelle di sistema di Windows (altrimenti in qual modo il processo di lavoro potrebbe essere in grado di caricare in modo dinamico le DLL essenziali).

    Per quanto riguarda le tue osservazioni sulla possibilità di scrivere nella cartella c:\dump . Se dai un’occhiata alle autorizzazioni nelle Impostazioni di sicurezza avanzate, vedrai quanto segue:

    inserisci la descrizione dell'immagine qui

    Vedi che l’authorization speciale viene ereditata da c:\ :

    inserisci la descrizione dell'immagine qui

    Questo è il motivo per cui ApplicationPoolIdentity del tuo sito può leggere e scrivere in quella cartella. Questo diritto viene ereditato dal drive c:\ .

    In un ambiente condiviso in cui è ansible disporre di diverse centinaia di siti, ciascuno con il proprio pool di applicazioni e l’id quadro del pool di applicazioni, le cartelle del sito vengono archiviate in una cartella o volume che ha rimosso il gruppo Users e le autorizzazioni sono impostate in modo tale che solo Amministratori e l’account SYSTEM ha accesso (con ereditarietà).

    Assegnare quindi singolarmente le autorizzazioni necessarie a ciascun IIS AppPool\[name] richiesto nella cartella principale del sito.

    È inoltre necessario assicurarsi che tutte le cartelle che si creano in cui si archiviano file o dati potenzialmente sensibili abbiano rimosso il gruppo Users . È inoltre necessario assicurarsi che tutte le applicazioni installate non memorizzino dati riservati nelle cartelle c:\program files\[app name] e che invece utilizzino le cartelle del profilo utente.

    Quindi sì, a prima vista sembra che ApplicationPoolIdentity abbia più diritti di quanto dovrebbe, ma in realtà non ha più diritti di quelli dettati dall’appartenenza al gruppo.

    ApplicationPoolIdentity appartenenza al gruppo di ApplicationPoolIdentity può essere esaminata utilizzando lo strumento Process Explorer di SysInternals. Trova il processo di lavoro in esecuzione con l’identity framework del pool di applicazioni a cui sei interessato (dovrai aggiungere la colonna User Name all’elenco di colonne da visualizzare:

    inserisci la descrizione dell'immagine qui

    Ad esempio, ho qui un pool denominato 900300 che ha 900300 pool di applicazioni IIS APPPOOL\900300 di IIS APPPOOL\900300 . Facendo clic con il tasto destro sulle proprietà per il processo e selezionando la scheda Sicurezza vediamo:

    inserisci la descrizione dell'immagine qui

    Come possiamo vedere IIS APPPOOL\900300 è un membro del gruppo Users .

    1. Fare clic destro sulla cartella.

    2. Clicca Proprietà

    3. Fai clic sulla scheda Sicurezza. Vedrai qualcosa di simile a questo:

    inserisci la descrizione dell'immagine qui

    1. Fai clic sul pulsante “Modifica …” nella schermata sopra. Vedrai qualcosa di simile a questo:

    inserisci la descrizione dell'immagine qui

    1. Fai clic sul pulsante “Aggiungi …” nella schermata sopra. Vedrai qualcosa di simile a questo:

    inserisci la descrizione dell'immagine qui

    1. Fai clic sul pulsante “Posizioni …” nella schermata sopra. Vedrai qualcosa di simile. Ora vai alla parte superiore di questa struttura ad albero e seleziona il nome del tuo computer, quindi fai clic su OK.

    inserisci la descrizione dell'immagine qui

    1. Ora digita “iis apppool \ tuo_apppool_name” e fai clic sul pulsante “Controlla nomi”. Se l’apppool esiste, vedrai il nome del tuo apppool nella casella di testo con sottolineatura in esso. Fai clic sul pulsante OK.

    inserisci la descrizione dell'immagine qui

    1. Seleziona / deseleziona qualsiasi accesso tu debba concedere all’account

    2. Fare clic sul pulsante Applica e quindi su OK.

    Ogni pool di applicazioni in IIs crea la propria cartella utente protetta con il permesso di lettura / scrittura FULL per impostazione predefinita in c: \ users. Aprire la cartella Utenti e vedere quali cartelle del pool di applicazioni ci sono, fare clic con il tasto destro e controllare i loro diritti per l’account virtuale del pool di applicazioni assegnato. Dovresti vedere il tuo account del pool di applicazioni aggiunto già con accesso in lettura / scrittura assegnato alla sua root e sottocartelle.

    In questo modo, il tipo di accesso ai file di archiviazione viene eseguito automaticamente e dovresti essere in grado di scrivere qualsiasi cosa ti piaccia nelle cartelle dell’account utente dei pool di app senza modificare nulla. Ecco perché sono stati creati account utente virtuali per ogni pool di applicazioni.