IIS AppPoolIdentity y permisos de acceso de escritura del sistema de archivos

Aquí hay un problema con IIS 7.5 y ASP.NET que he estado investigando y que no ha llegado a ninguna parte. Cualquier ayuda sería muy apreciada.

Mi pregunta es: usando ASP.NET en IIS 7.5, ¿cómo IIS y / o el sistema operativo permiten que la aplicación web escriba en una carpeta como C:\dump cuando se ejecuta con plena confianza? ¿Cómo es que no tengo que agregar explícitamente el acceso de escritura para el usuario del grupo de aplicaciones (en este caso, ApplicationPoolIdentity )?

Esto mucho lo sé:

  • En IIS 7.5, la identidad predeterminada para un grupo de aplicaciones es ApplicationPoolIdentity .
  • ApplicationPoolIdentity representa una cuenta de usuario de Windows llamada “IIS APPPOOL \ AppPoolName”, que se crea cuando se crea el grupo de aplicaciones, donde AppPoolName es el nombre del grupo de aplicaciones.
  • El usuario “IIS APPPOOL \ AppPoolName” es, por defecto, miembro del grupo IIS_IUSRS .
  • Si está ejecutando bajo Full Trust, su aplicación web puede escribir en muchas áreas del sistema de archivos (excluyendo carpetas como C:\Users , C:\Windows , etc.). Por ejemplo, su aplicación tendrá acceso para escribir en algunas carpetas, como C:\dump .
  • De forma predeterminada, el grupo IIS_IUSRS no tiene acceso de lectura o escritura a C:\dump (al menos no tiene acceso que se puede ver a través de la pestaña “Seguridad” en Windows Explorer).
  • Si niega el acceso de escritura a IIS_IUSRS , obtendrá una SecurityException al intentar escribir en la carpeta (como se esperaba).

Entonces, teniendo todo esto en cuenta, ¿cómo se otorga el acceso de escritura al usuario “IIS APPPOOL \ AppPoolName”? El proceso w3wp.exe se ejecuta como este usuario, entonces, ¿qué permite a este usuario escribir en una carpeta a la que parece no tener acceso explícito?

Tenga en cuenta que entiendo que esto probablemente se haya realizado por conveniencia, ya que sería una molestia otorgarle a un usuario acceso a cada carpeta en la que necesita escribir si se está ejecutando con plena confianza. Si desea limitar este acceso, siempre puede ejecutar la aplicación bajo Fideicomiso medio. Estoy interesado en conocer la forma en que el sistema operativo y / o IIS permiten que se realicen estas escrituras, aunque aparentemente no se haya otorgado acceso explícito al sistema de archivos.

    A ApplicationPoolIdentity se le asigna pertenencia al grupo Users , así como al grupo IIS_IUSRS . A primera vista, esto puede parecer algo preocupante, sin embargo, el grupo de Users tiene derechos NTFS algo limitados.

    Por ejemplo, si intentas crear una carpeta en la carpeta C:\Windows entonces verás que no puedes. El ApplicationPoolIdentity aún necesita poder leer los archivos de las carpetas del sistema de Windows (de lo contrario, ¿de qué otro modo el proceso de trabajo podría cargar dinámicamente las DLL esenciales)?

    Con respecto a sus observaciones acerca de poder escribir en su carpeta c:\dump . Si echas un vistazo a los permisos en la configuración de seguridad avanzada, verás lo siguiente:

    enter image description here

    Mira que el permiso especial se hereda de c:\ :

    enter image description here

    Esa es la razón por la cual ApplicationPoolIdentity su sitio puede leer y escribir en esa carpeta. Ese derecho se hereda de la unidad c:\ .

    En un entorno compartido donde posiblemente tenga varios cientos de sitios, cada uno con su propio grupo de aplicaciones e identidad de grupo de aplicaciones, debe almacenar las carpetas del sitio en una carpeta o volumen que haya tenido el grupo de Users eliminado y los permisos configurados de manera que solo los administradores y la cuenta del SISTEMA tiene acceso (con herencia).

    A continuación, debe asignar individualmente los permisos necesarios que cada IIS AppPool\[name] requiere en su carpeta raíz del sitio.

    También debe asegurarse de que las carpetas que cree donde almacene archivos o datos potencialmente confidenciales eliminen el grupo Users . También debe asegurarse de que las aplicaciones que instale no almacenen datos confidenciales en sus carpetas c:\program files\[app name] y que usen las carpetas de perfil de usuario.

    Así que sí, a primera vista parece que ApplicationPoolIdentity tiene más derechos de los que debería, pero en realidad no tiene más derechos de los que su membresía grupal impone.

    La membresía de un grupo de ApplicationPoolIdentity se puede examinar utilizando la herramienta SysInternals Process Explorer . Busque el proceso de trabajo que se está ejecutando con la identidad del grupo de aplicaciones que le interesa (tendrá que agregar la columna User Name a la lista de columnas para mostrar:

    enter image description here

    Por ejemplo, tengo un grupo aquí llamado 900300 que tiene una identidad de grupo de aplicaciones de IIS APPPOOL\900300 . Al hacer clic con el botón derecho en las propiedades del proceso y seleccionar la pestaña Seguridad, vemos:

    enter image description here

    Como podemos ver, IIS APPPOOL\900300 es un miembro del grupo de Users .

    1. Haga clic derecho en la carpeta.

    2. Haga clic en Propiedades

    3. Haga clic en la pestaña Seguridad. Verás algo como esto:

    enter image description here

    1. Haga clic en el botón “Editar …” en la pantalla de arriba. Verás algo como esto:

    enter image description here

    1. Haga clic en el botón “Agregar …” en la pantalla de arriba. Verás algo como esto:

    enter image description here

    1. Haga clic en el botón “Ubicaciones …” en la pantalla de arriba. Verás algo como esto. Ahora, dirígete a la parte superior de esta estructura de árbol y selecciona el nombre de tu computadora, luego haz clic en Aceptar.

    enter image description here

    1. Ahora escriba “iis apppool \ your_apppool_name” y haga clic en el botón “Comprobar nombres”. Si el apppool existe, verá el nombre de su grupo de aplicaciones en el cuadro de texto con subrayado. Haga clic en el botón Aceptar.

    enter image description here

    1. Marque / desmarque cualquier acceso que necesite otorgar a la cuenta

    2. Haga clic en el botón Aplicar y luego en Aceptar.

    Cada grupo de aplicaciones en II crea su propia carpeta de usuario segura con permiso COMPLETO de lectura / escritura de forma predeterminada en c: \ users. Abra su carpeta de Usuarios y vea qué carpetas de grupo de aplicaciones hay, haga clic con el botón derecho y verifique sus derechos para la cuenta virtual del grupo de aplicaciones asignada. Debería ver su cuenta del grupo de aplicaciones agregada ya con acceso de lectura / escritura asignado a su raíz y subcarpetas.

    Entonces, ese tipo de acceso de almacenamiento de archivos se realiza automáticamente y usted debe poder escribir lo que quiera allí en las carpetas de la cuenta de usuario de la agrupación de aplicaciones sin cambiar nada. Es por eso que se crearon cuentas de usuario virtuales para cada grupo de aplicaciones.