El acceso de escritura a TODOS funciona, IUSR, IIS_IUSRS, DefaultAppPool no funciona. ¿por qué?

10

Okay. Aquí estamos tratando de configurar un sitio web ASP clásico en IIS 7.5 en Windows Server 2008 R2. Hay una carpeta llamada dbc debajo de la raíz del sitio web y tiene un archivo que se usa para leer y escribir cierta información mientras se procesa cada página.

El problema es que si otorgo permisos de escritura IUSR y permisos de escritura IIS_IUSRS, o permisos de escritura DefaultAppPool, obtengo el "Acceso a la ruta 'E: .. \ websiteroot \ dbc \ filename.txt' está denegado"

Pero si concedo acceso de escritura a TODOS en esa carpeta dbc, entonces no obtengo ningún error, todo parece perfecto.

Más información: El sitio web se ejecuta en modo de canalización clásico, la autenticación anónima está habilitada (quizás es la única autenticación habilitada). Y probé la autenticación anónima usando la cuenta IUSR y la identidad del grupo de aplicaciones. En mi caso, ApplicationPoolIdentity es la identidad para la autenticación del sitio web. Utilizamos un COM + para E / S de archivo. Y Classic ASP Server.CreateObject para instanciar un objeto fuera de él. El COM + se ejecuta como un servicio de red.

Pensamientos? No quiero otorgar permiso de escritura a TODOS. ¿Me estoy perdiendo de algo?

RESUELTO: Esto es lo que hice.

Mi sitio web llamado CipherDemo se ejecutaba bajo una AppPoolIdentity en IIS 7.5, que podría ubicarse en Identity IIS AppPool \ CipherDemo. Usé ICACLS para otorgar permisos RW en esa carpeta.

y el COM + que realmente estaba haciendo el archivo de E / S se ejecutaba bajo la Identidad del servicio de red. Cuando estaba usando Process Monitor para rastrear el error de acceso denegado, resultó que el servicio de red solo tenía un permiso de lectura en esa carpeta.

Utilicé ICACLS "nombre de carpeta" / grant: r "NT AUTHORITY \ NETWORKSERVICE" :( OI) (CI) RXW / T para otorgar acceso de escritura en esa carpeta.

Y lo resolvió.

Tenía la intención de que, dado que el sitio web se ejecuta como CipherDemo Identity, esta será la cuenta que se utilizará para acceder al archivo a través de COM +. Pero es vergonzoso descubrir que el COM + aún funcionaría en sus propios límites de identidad.

gmaran23
fuente

Respuestas:

5

Bajo IIS 7.5 (y opcionalmente en IIS 7) todos los trabajadores se ejecutan con la identidad del grupo de aplicaciones: usuario "IIS AppPool * PoolName *".

Otorgue acceso a ese usuario en lugar de a Todos (deberá escribir el nombre en los diálogos de selección de identidad; no aparecerá en la función de búsqueda).

Hay una página muy útil en iis.net que cubre las cosas con mucho más detalle.

También tenga en cuenta: bajo IIS7 (Server 2008):

  • Establece la identidad del grupo de aplicaciones por grupo de aplicaciones en la configuración avanzada.
  • No hay soporte de GUI, por lo que necesitará la línea de comando para establecer permisos ( icacls.exe).

Finalmente, la selección de identidad de SQL Server tampoco conoce la identidad del grupo de aplicaciones: use CREATE LOGINe CREATE USERinicialmente, después de esto, la GUI se puede usar para otorgar roles, etc.

Ricardo
fuente
@ Richard - Sí. Gracias por la respuesta rápida. Los foros de msdn son muy inútiles en estos días. Regresando ... He estado molestando alrededor del sitio web IIS.net y el servidor por defecto durante un par de días. Uso la identidad predeterminada del grupo de aplicaciones en mi servidor IIS 7.5 / Win 2008 R2. Y así, he otorgado los permisos WIS APPPOOL \ DefaultAppPool Wite en mi carpeta 'dbc'. Además, he otorgado permisos de escritura IUSR e IIS_IUSRS en esa carpeta. Todavía no funcionaría hasta que otorgue permisos de escritura a TODOS. Sé que hay algo que me falta. ¿Pueden ayudarme?
gmaran23
@ gmaran23: Si los pasos obvios no han funcionado, uso Process Monitor para ver exactamente qué está fallando (y a menudo será que el archivo abierto solicita demasiado acceso, no he podido configurar la ACL correctamente, o algo así) más tiene el archivo abierto).
Richard
@ Richard - Realizo operaciones de lectura / escritura con un lector de archivos en c # con FileMode.Open, FileAccess.ReadWrite. - Supongo que esa parte es buena. Algo más tiene el archivo abierto . Supongo que esto podría descartarse, porque no hay posibilidades. Hay algo mal con la ACL. Lo comprobaré y lo publicaré aquí. También probará el Monitor de proceso. Gracias por la asistencia :)
gmaran23
@ gmaran23: Si no está funcionando, no asumas que sabes algo, prueba siempre. Perdí demasiado tiempo a lo largo de los años porque sé que algo era o no era cierto; con demasiada frecuencia me equivoqué.
Richard
1
@ gmaran23: Use herramientas para ver exactamente lo que está sucediendo: está adivinando y no está resolviendo los problemas sistemáticamente. (1) Use Process Explorer para confirmar que el archivo no está abierto. (2) Use Process Monitor para ver qué acceso se solicita y con qué identidad (y tiene el archivo correcto). (3) Verifique dos veces el resultado del n. ° 2 contra la ACL del archivo (y abra las propiedades de seguridad avanzadas para obtener todos los detalles). (4) Ajuste una cosa y vaya al # 1 hasta que se arregle. Si todavía está atascado después de algunas iteraciones, expanda la Q con todos los detalles (y sea específico).
Richard
5

Puede agregar la cuenta a través de la GUI de NTFS escribiéndola directamente. El nombre está en el formato de IIS APPPOOL\<<app pool name>>, por ejemplo IIS APPPOOL\DefaultAppPool. (vea este artículo de soporte de Microsoft )

Una solución alternativa: he estado usando la cuenta "Servicio de red" como usuario del grupo de aplicaciones otorgándole permiso de escritura.

splattne
fuente
Correcto, ese consejo es bueno, pero ya lo hice. Uso el "ApplicationPoolIdentity" predeterminado para el grupo de aplicaciones. Y para la carpeta 'dbc' ya he otorgado permisos de escritura para IIS AppPool \ DefaultAppPool. Pero aún así no funcionaría hasta que otorgue a TODOS permiso de escritura.
gmaran23
1

Si solo desea otorgar el permiso de ESCRITURA a la carpeta para el usuario específico, también debe cambiar 'Identidad de usuario anónimo' del sitio a 'Usuario específico', no 'Identidad de grupo de aplicaciones'.

usuario2147802
fuente