IIS AppPoolIdentity y permisos de acceso de escritura al sistema de archivos
Aquí hay un problema con IIS 7.5 y ASP.NET que he estado investigando y no he llegado a ninguna parte. Cualquier ayuda sería muy apreciada.
Mi pregunta es: al usar 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:\dump
cuando 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 casoApplicationPoolIdentity
)?
Esto es lo que 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
IIS_IUSRS
grupo. - Si está ejecutando 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
IIS_IUSRS
grupo no tiene acceso de lectura o escritura aC:\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 a
IIS_IUSRS
, obtendrá una SecurityException al intentar 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 complicado otorgarle a un usuario acceso a cada carpeta en la que necesita escribir si está ejecutando con Full Trust. Si desea limitar este acceso, siempre puede ejecutar la aplicación en Medium Trust. Estoy interesado en conocer la forma en que el sistema operativo y/o IIS permiten que se realicen estas escrituras, aunque parece que no se otorga acceso explícito al sistema de archivos.
Se ApplicationPoolIdentity
le asigna la membresía del Users
grupo así como del IIS_IUSRS
grupo. A primera vista esto puede parecer algo preocupante, sin embargo, el Users
grupo tiene derechos NTFS algo limitados.
Por ejemplo, si intenta crear una carpeta en la C:\Windows
carpeta, descubrirá que no puede. Todavía ApplicationPoolIdentity
debe 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 DLL esenciales)?
Con respecto a tus observaciones sobre poder escribir en tu c:\dump
carpeta. Si echas un vistazo a los permisos en la Configuración de seguridad avanzada, verás lo siguiente:
Vea que el permiso especial se hereda de c:\
:
Esa es la razón por la que su sitio ApplicationPoolIdentity
puede leer y escribir en esa carpeta. Ese derecho se hereda de la c:\
pulsión.
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 en el que se haya Users
eliminado el grupo y se hayan establecido los permisos de manera que solo los administradores y el La cuenta SISTEMA tiene acceso (con herencia).
Luego, asignará individualmente los permisos necesarios que cada uno IIS AppPool\[name]
requiere en la carpeta raíz de su sitio.
También debe asegurarse de que se elimine el grupo de cualquier carpeta que cree donde almacene archivos o datos potencialmente confidenciales Users
. También debe asegurarse de que las aplicaciones que instale no almacenen datos confidenciales en sus c:\program files\[app name]
carpetas y que utilicen las carpetas de perfil de usuario.
Entonces, 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 dicta su membresía en el grupo.
La pertenencia a un ApplicationPoolIdentity
grupo 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 (deberá agregar la User Name
columna a la lista de columnas para mostrar:
Por ejemplo, tengo un grupo llamado aquí 900300
que 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:
Como podemos ver IIS APPPOOL\900300
es un miembro del Users
grupo.
Haga clic derecho en la carpeta.
Haga clic en Propiedades
Haga clic en la pestaña Seguridad. Verás algo como esto:
- Haga clic en el botón "Editar..." en la pantalla de arriba. Verás algo como esto:
- Haga clic en el botón "Agregar..." en la pantalla de arriba. Verás algo como esto:
- 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.
- Ahora escriba "iis apppool\your_apppool_name" y haga clic en el botón "Verificar nombres". Si el grupo de aplicaciones existe, verá el nombre de su grupo de aplicaciones en el cuadro de texto subrayado. Haga clic en el botón Aceptar.
Marque/desmarque cualquier acceso que necesite otorgar a la cuenta
Haga clic en el botón Aplicar y luego en Aceptar.