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

395

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

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

Esto 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, un miembro del IIS_IUSRSgrupo.
  • Si está ejecutando bajo Plena confianza, su aplicación web puede escribir en muchas áreas del sistema de archivos (con exclusión de carpetas como C:\Users, C:\Windows, etc.). Por ejemplo, la aplicación tendrá acceso a escritura en algunas carpetas, como, C:\dump.
  • De forma predeterminada, el IIS_IUSRSgrupo no tiene acceso de lectura o escritura C:\dump(al menos no acceso visible a través de la pestaña "Seguridad" en el Explorador de Windows).
  • Si niega el acceso de escritura IIS_IUSRS, obtendrá una SecurityException cuando intente escribir en la carpeta (como se esperaba).

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

Tenga en cuenta que entiendo que esto probablemente se hizo por conveniencia, ya que sería difícil otorgarle a un usuario acceso a cada carpeta en la que necesita escribir si se está ejecutando con Full Trust. Si desea limitar este acceso, siempre puede ejecutar la aplicación en Confianza media. Estoy interesado en conocer la forma en que el sistema operativo y / o IIS permite que estas escrituras se lleven a cabo, aunque parece que no hay acceso explícito al sistema de archivos otorgado.

rsbarro
fuente

Respuestas:

403

Se ApplicationPoolIdentityle asigna la pertenencia al Usersgrupo, así como al IIS_IUSRSgrupo. A primera vista, esto puede parecer algo preocupante, sin embargo, el Usersgrupo tiene derechos NTFS algo limitados.

Por ejemplo, si intenta crear una carpeta en la C:\Windowscarpeta, encontrará que no puede. El ApplicationPoolIdentitytodavía necesita poder leer archivos de las carpetas del sistema de Windows (de lo contrario, ¿de qué otra manera el proceso de trabajo podría cargar dinámicamente las DLL esenciales?).

Con respecto a sus observaciones acerca de poder escribir en su c:\dumpcarpeta. Si observa los permisos en la Configuración de seguridad avanzada, verá lo siguiente:

ingrese la descripción de la imagen aquí

Ver ese permiso especial que se hereda de c:\:

ingrese la descripción de la imagen aquí

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

En un entorno compartido donde posiblemente tenga varios cientos de sitios, cada uno con su propio grupo de aplicaciones e Identidad del grupo de aplicaciones, almacenaría las carpetas del sitio en una carpeta o volumen al que se haya Userseliminado el grupo y los permisos establecidos de tal manera que solo los Administradores y La cuenta SYSTEM tiene acceso (con herencia).

Luego asignaría individualmente los permisos necesarios que cada uno IIS AppPool\[name]requiere en la carpeta raíz del sitio.

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

Entonces, sí, a primera vista parece que ApplicationPoolIdentitytiene más derechos de los que debería, pero en realidad no tiene más derechos de los que dicta la membresía de grupo.

La ApplicationPoolIdentitymembresía de un grupo se puede examinar con la herramienta SysInternals Process Explorer . Encuentre el proceso de trabajo que se ejecuta con la Identidad del grupo de aplicaciones que le interesa (deberá agregar la User Namecolumna a la lista de columnas para mostrar:

ingrese la descripción de la imagen aquí

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

ingrese la descripción de la imagen aquí

Como podemos ver IIS APPPOOL\900300es un miembro del Usersgrupo.

Kev
fuente
@Kev [+1] Publiqué una pregunta similar con respecto a los permisos NTFS para las identidades del grupo de aplicaciones aquí: stackoverflow.com/questions/11232675/… . Le agradecería que le eche un vistazo.
one.beat.consumer
@ one.beat.consumer - lo siento, nunca vi tu comentario. ¿Todavía te quedaste con esa pregunta?
Kev
@Kev: sí, se ha convertido en un problema menor, ya que me han llevado a otra basura, pero aún no se ha resuelto. ¿Alguna idea?
one.beat.consumer
77
Votemos para incluir esta sección en MSDN. Nunca me tomé el tiempo para resolver esto, así que es de gran ayuda (y me da vergüenza no haberlo sabido nunca).
Mueca de desesperación
67
No está claro por qué esta documentación principal de Microsoft IIS está en SO en lugar de MSDN.
Amit Naidu
40
  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:

ingrese la descripción de la imagen aquí

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

ingrese la descripción de la imagen aquí

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

ingrese la descripción de la imagen aquí

  1. Haga clic en el botón "Ubicaciones ..." en la pantalla de arriba. Verás algo como esto. Ahora, vaya a la parte superior de esta estructura de árbol y seleccione el nombre de su computadora, luego haga clic en Aceptar.

ingrese la descripción de la imagen aquí

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

ingrese la descripción de la imagen aquí

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

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

fluido
fuente
0

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

De modo que ese tipo de acceso al almacenamiento de archivos se realiza automáticamente y debería poder escribir lo que quiera en las carpetas de la cuenta de usuario de los grupos de aplicaciones sin cambiar nada. Es por eso que se crearon cuentas de usuario virtuales para cada grupo de aplicaciones.

Stokely
fuente
Esto solo ocurre si "Cargar perfil de usuario" está configurado en Verdadero.
JamesQMurphy
Eso es correcto, lo que significa que la carpeta del usuario de AppPool no se crearía si no fuera cierto, ¿verdad? Es por eso que lo construyeron de esta manera ... para evitar que los II accedan y almacenen basura en Windows / Temp y en todo el disco duro en lugar de una carpeta segura administrada solo para esa cuenta.
Stokely
0

Intenté esto para solucionar problemas de acceso a un sitio web de IIS, que se manifestó como algo similar a lo siguiente en los registros de eventos → Windows → Aplicación:

Nombre de registro: aplicación
Fuente: ASP.NET 4.0.30319.0
Fecha: 1/5/2012 4:12:33 PM
Id. De evento: 1314
Categoría de tarea: evento web
Nivel: información
Palabras clave: clásico
Usuario: N / A
Computadora: SALTIIS01

Descripción:
Código de evento: 4008 
Mensaje de evento: error de autorización de archivo para la solicitud. 
Hora del evento: 1/5/2012 4:12:33 PM 
Hora del evento (UTC): 1/6/2012 12:12:33 AM 
Id. De evento: 349fcb2ec3c24b16a862f6eb9b23dd6c 
Secuencia de eventos: 7 
Suceso del evento: 3 
Código de detalle del evento: 0 

Información de la aplicación: 
    Dominio de aplicación: / LM / W3SVC / 2 / ROOT / Application / SNCDW-19-129702818025409890 
    Nivel de confianza: completo 
    Ruta virtual de la aplicación: / Aplicación / SNCDW 
    Ruta de la aplicación: D: \ Sites \ WCF \ Application \ SNCDW \ 
    Nombre de la máquina: SALTIIS01 

Procesar informacion: 
    ID de proceso: 1896 
    Nombre de proceso: w3wp.exe 
    Nombre de cuenta: iisservice 

Información requerida: 
    URL de solicitud: http: //webservicestest/Application/SNCDW/PC.svc 
    Ruta de solicitud: /Application/SNCDW/PC.svc 
    Dirección de host del usuario: 10.60.16.79 
    Usuario: js3228 
    Está autenticado: verdadero 
    Tipo de autenticación: negociar 
    Nombre de la cuenta del hilo: iisservice 

Al final tuve que darle al Everyonegrupo de Windows acceso de lectura a esa carpeta para que funcione correctamente.

SharpC
fuente