No se puede leer el archivo de configuración debido a permisos insuficientes

354

Recientemente encontré un error al tratar de alojar mi sitio asp.net con IIS. He encontrado una solución por la que muchos juran.

Solución:

  1. Agregue IIS_IUSRS con permiso de lectura en los archivos de la carpeta
  2. Cambiar el método de autenticación de IIS a autenticación básica
  3. actualizar el sitio web Funcionará

( http://vivekthangaswamy.blogspot.com/2009/07/aspnet-website-cannot-read.html )

¿Qué agrego a mi archivo web.config? Nunca he tenido que editarlo antes. Aquí está su contenido actual:

<?xml version="1.0"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>
    <connectionStrings>
  <add name="DefaultConnection" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database.mdf;Integrated Security=True;User Instance=True"
   providerName="System.Data.SqlClient" />
 </connectionStrings>
 <system.web>
  <compilation debug="true" strict="false" explicit="true" targetFramework="4.0"/>
    </system.web>
</configuration>

Mi error es:

Error de configuración: no se puede leer el archivo de configuración debido a permisos insuficientes
Archivo de configuración: \? \ C: \ Users ***** \ Documents \ Visual Studio2010 \ WebSites \ PointsForTime \ web.config

Freesnöw
fuente
99
Por favor vea el módulo de reescritura de instalación. ahórrate algunas horas
regisbsb
Mi solución sería ejecutar los comandos desde la línea de comandos abierta con privilegios de administrador. Para hacer esto, busque el símbolo del sistema, haga clic derecho y haga clic en ejecutar con privilegios de administrador.
David Waddington
Además de las otras respuestas, tenga en cuenta que el sistema de cifrado de archivos (EFS) también puede interferir con IIS.
G-Wiz
Hice este anuncio ahora, el anfitrión local está pidiendo una contraseña, lo más cerca que he llegado hasta ahora de esto funciona gracias
Paul Ledger
1
Para mí no había IIS_IUSR, hice lo mismo para el usuario autenticado y funcionó
Bhanu Chhabra

Respuestas:

544

No hay problema con su web.config . Su sitio web se ejecuta bajo un proceso. En iis puedes definir la identidad de ese proceso. La identidad que el grupo de aplicaciones de su sitio web ejecuta ( Servicios de red, Sistema local , etc.) debe tener permiso para acceder y leer el archivo web.config.

Actualizar:

Esta respuesta actualizada es la misma que la anterior, pero un poco más larga, más simple y mejorada.

En primer lugar : no tiene que cambiar nada en su archivo de configuración. Está bien . El problema es con los permisos de archivos de Windows .

Este problema se produce porque su aplicación no puede acceder y leer el archivo web.config .

Haga que el archivo sea accesible para el grupo IIS_IUSRS . Simplemente haga clic derecho en web.config y haga clic en propiedades , en la pestaña de seguridad , agregue IIS_IUSRS .

Entonces, ¿qué es esto de IIS_IUSRS?

Su sitio web es como un archivo exe . Al igual que cualquier archivo exe, debe ser iniciado por un usuario y se ejecuta de acuerdo con los permisos asignados a ese usuario.

Cuando su sitio se inicia en IIS , el grupo de aplicaciones de su sitio web se asocia con un usuario ( servicios de red, sistema local , etc.) (y se puede cambiar en IIS)

Entonces, cuando dice IIS_IUSRS , significa cualquier usuario ( Servicios de red, Sistema local , etc.) que su sitio se está ejecutando como.

Y como mencionó @Seph en el comentario a continuación : Si su computadora está en un dominio , recuerde que el grupo IIS_IUSRS es un grupo local . También asegúrese de que cuando intente encontrar a este usuario, verifique la ubicación que debe estar configurada en la computadora local y no en un dominio corporativo.

Afshin Gh
fuente
79
Para otros, vale la pena señalar que el valor predeterminado generalmente es IIS_IUSRSy para asegurarse de que cuando intente encontrar a este usuario verifique la ubicación, debe establecerse en la computadora local y no en un dominio corporativo.
Seph
3
Buena respuesta, y aquí hay un consejo adicional: ejecutando IIS7 en Win7 en un dominio, es posible que no encuentre IIS_IUSRS en el grupo local si intenta buscar con 'Verificar nombres ...'. No se preocupe, simplemente escriba IIS_IUSRS en su totalidad y presione OK, y todo estará bien.
Eight-Bit Guru
2
¿Qué sucede si tiene un disco compartido para la ruta de un sitio? ¿Tiene esto algún efecto? ¿Cómo haces que esto funcione con unidades compartidas?
Kevin
2
Tenía que hacer esto por IUSR. IIS_IUSRS no funcionó para mí por alguna razón.
Todd
13
Al tratar de configurar un nuevo sitio web ASP.Net desde cero en IIS 7 en adelante, una vez que haya solucionado el error que se discute en este hilo, podría enfrentar un error de autorización "Error HTTP 401.3 - No autorizado" como su próximo obstáculo. Para solucionarlo si ha habilitado la autenticación anónima, cambie la identidad del usuario anónimo de "IUSR" (establecido por defecto por IIS) a identidad del grupo de aplicaciones. Para obtener la ventana de edición para esta configuración, use la acción "Editar" del panel Acciones en la vista de características de IIS para la característica de "Autenticación" de IIS.
RBT
72

Tenía lo que parecía ser el mismo problema de permisos en el web.configarchivo.
Sin embargo, mi problema se debió a que IIS no pudo cargar el archivo de configuración porque contenía reglas de reescritura de URL y no había instalado el módulo de reescritura de URL de IIS en el nuevo servidor.

Solución: instale el módulo de reescritura.
Espero que ahorre a alguien unas horas.

Jarrod
fuente
Sip. El servidor anterior en el que utilicé esto reescribió la ruta no ssl a ssl ... tanto por un gran mensaje de error de IIS. error::) +1 Debido a que en lugar de requerir SSL, reescribí la URL a HTTPS en caso de que alguien esté vinculado sin https. Que enigma.
Piotr Kula
¡¡¡gracias!!! ¡Estuve fallando con los permisos durante horas y al final todo se redujo a esto!
Carl Woodhouse
¿Cómo se hace para instalar el módulo de reescritura de URL de IIS?
B. Clay Shannon
2
Este también fue mi problema, ¡gracias! Para instalar el módulo de reescritura, descárguelo de esta página: iis.net/downloads/microsoft/url-rewrite cierre IIS, instale, reinicie IIS (solo para estar seguro).
Tyler Forsythe
2
@ B.ClayShannon utiliza el Instalador de plataforma web, busca IIS Rewrite
enorl76 el
64

Nota del editor: ¡Hacer lo que dice esta respuesta es PELIGROSO ! La cuenta LocalSystem es un ...

Cuenta completamente confiable, más que la cuenta de administrador. No hay nada en un solo cuadro que esta cuenta no pueda hacer, y tiene derecho a acceder a la red como máquina (esto requiere Active Directory y otorgarle permisos a la cuenta de la máquina para algo)


Cambiar la identidad de ApplicationPoolIdentity a LocalSystem hizo el trabajo;).

Estoy usando win7 64 con IIS 7.5

Más información sobre la identidad del grupo de aplicaciones en IIS 7.5 y win 7

ingrese la descripción de la imagen aquí

amd
fuente
Respuesta útil para IIS 6 también. Encontró más información sobre cómo cambiar la identidad del grupo de aplicaciones en el sitio web de Microsoft aquí: microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/…
Manuel Alvarez
22
Hacer este cambio es un riesgo de seguridad debido al acceso que le está otorgando a este servicio: msdn.microsoft.com/en-us/library/windows/desktop/…
WhiteKnight
¡Este parece haber sido mi problema aquí y cambiar la identidad del grupo de aplicaciones a LocalSystem funcionó como se describe!
Vasily Hall
21
Votar abajo esto debido a la brecha de seguridad que deja en el servidor. ¡NUNCA debe ejecutar servicios públicos como IIS en la cuenta del sistema local! Básicamente estás entregando las llaves del reino a cualquiera que pueda hackear el servidor. En serio, NO HAGAS ESTO.
Dimesio
55
OMG Esta respuesta es TAN INCORRECTA por seguridad. Se necesita intervención de moderación. Esta es una idea HORRIBLE. Imagine cualquier acceso a archivos que se especifique en la cadena de consulta ... boom ... cualquiera puede LEER web.config e IIS lo servirá felizmente al mundo. NO UTILICE ESTA RESPUESTA.
enorl76
47

Tuve el mismo problema cuando intenté compartir la carpeta raíz del sitio con otro usuario. Alguna carpeta perdió el permiso. Así que seguí los pasos para agregar permiso al grupo IIS_IUSRS como lo sugiere Afshin Gh. El problema es que este grupo no estaba disponible para mí. Estoy usando Windows 7.

Lo que hice solo cambié algunos pasos:

  1. Haga clic derecho en la carpeta principal (que perdió el permiso),
  2. Propiedades => Seguridad => En "Nombres de grupo o usuario:",
  3. Haga clic en Editar ...
  4. Se abrirá la ventana "Permiso para su carpeta".
  5. En "Nombres de grupos o usuarios:" presione AGREGAR ... btn,
  6. Escriba Authen y presione Comprobar nombres,
  7. Verá el nombre completo del grupo " Usuarios autenticados "
  8. Presione ok => aplicar.
  9. Esto debería habilitar los privilegios nuevamente.

Eso funcionó para mí.

zwitterion
fuente
2
Esto funcionó para mí. Esta debería ser la respuesta aceptada. Probé los otros métodos, no funcionan.
GunWanderer
1
Intenté que todas las demás soluciones no funcionarán hasta esta.
jenna_3108
1
De acuerdo, creo que tengo una explicación de por qué esto funciona. Algunos desarrolladores alojan su código en C:\ ie C:\Devo C:\Code, etc. El grupo de seguridad Authenticated Usersse otorga en las C:\ carpetas secundarias y se propaga a ellas. Sin embargo, en la C:\Userscarpeta, esta propagación se detiene. Por lo tanto, los desarrolladores como yo que alojan su código dentro de la carpeta de inicio deben otorgar acceso Authenticated Usersa esas carpetas raíz de IIS para que IIS funcione.
Colin
cuando hago clic en verificar nombres, me pide credenciales. No estoy seguro de qué credenciales de usuario se esperan aquí. ¿Alguien puede ayudarme?
RSB
18

No tiene que cambiar nada en su web.config.

El problema son los permisos del sistema de archivos. Sus permisos de archivo no permiten que el usuario IIS_IUSRS acceda a web.config (o probablemente a cualquiera de los archivos). Cambie sus permisos de archivo en Windows para permitir que la cuenta IIS_IUSRS acceda a él.

Erik Funkenbusch
fuente
1
Tuve un problema similar. Si alguna vez alguien no puede encontrar el usuario IIS_IUSRS, verifique la ubicación. El mío estaba predeterminado en el dominio corporativo, por lo que no lo encontré de inmediato porque olvidé verificar para ver dónde estaba mirando.
jgreep
@Mister Hombre, tengo el mismo problema. Cambié los permisos y luego lo intenté. Todavía me sale el mismo error. :(
Rauf
"(o probablemente cualquiera de los archivos)" funciona para mí, lo que permite que el acceso de la cuenta IIS_IUSRS a web.config no sea suficiente, necesito habilitarlo para que tenga acceso a todos los archivos del sitio.
Tuyen Nguyen
2
Tenía que hacer esto por IUSR. IIS_IUSRS no funcionó para mí.
Todd
Gracias. He otorgado 'Todos' con permiso completo en la carpeta de la aplicación web y funciona.
Minh Nguyen
16

Haga que el archivo sea accesible para el grupo IIS_IUSRS . Haga clic derecho en su web.config, expanda propiedades y, en la pestaña de seguridad, agregue IIS_IUSRS. Otorgue al grupo acceso de lectura / escritura.

Cuando el grupo NO esté disponible, reemplace IIS_IUSRS por ComputerName \ IIS_IUSRS

Kurt Van den Branden
fuente
+1 Buen consejo. La respuesta aceptada es buena, pero no menciona que es posible que deba agregar el nombre de su computadora frente a 'IIS_IUSRS', que es lo que me ayudó a superar esto.
Ralph Lavelle
Esto ("Cuando el grupo NO está disponible") tenía esperanzas, pero incluso cuando antepuse el nombre de la computadora ("IBM-TAMMYFAYEBAKER.platypus.local \ IIS_IUSRS") sigo teniendo el mismo error. También probé el nombre completo de la computadora, pero ni siquiera lo aceptaría como usuario válido.
B. Clay Shannon
15

Vaya a la carpeta principal, haga clic derecho y seleccione Propiedades . Seleccione la pestaña Seguridad , edite los permisos y Agregue . Haga clic en Avanzado y en Buscar ahora . Seleccione IIS_IUSRS y haga clic en Aceptar y en Aceptar nuevamente. Asegúrese de tener el cheque Escribir . Haga clic en Aceptar y en Aceptar nuevamente.

¡Trabajo hecho!

Quinny
fuente
19
¿Qué pasa con recomendar acceso de escritura cuando leer es todo lo que se necesita? /
votado a favor
2
El único IIS * que tengo es IIS_WPG
B. Clay Shannon
1
@ B.ClayShannon Yo también. Solo tengo IIS_WPG
Fortune
13

Cuando concede permisos a IIS_IUSRS , debe verificar que en la sección IIS / Autenticación de su Aplicación Web, las Credenciales de Autenticación Anónima usen Identidad de Grupo de Aplicaciones y no IUSR.

ingrese la descripción de la imagen aquí

Carlos
fuente
¿Dónde puedo obtener esta interfaz?
En la pestaña Vista de características de su aplicación web: Autenticación
Carlos
Esta respuesta debe ser parte de la respuesta aceptada porque sin esto también debe agregar IUSR en la lista de acceso de la carpeta del sitio web
Laurent S.
7

Por alguna razón, su web.config está configurado como de solo lectura. Desmarque la opción de solo lectura del archivo web.config.

Luis
fuente
Si su permiso es de acceso completo y aún recibe el error, esta es la respuesta correcta (y).
Vasil Valchev
4

Usé Subst para crear una asignación de D: a C: para mantener la misma configuración que otros desarrolladores del equipo. Esto también me dio los mismos errores que los descritos. Eliminar esto me lo arregló.

Sniipe
fuente
3

La solución aceptada no fue para mí. Utilizo un repositorio de Git y lo cloné en la siguiente carpeta

c:\users\myusername\source\repos\myWebSite

Creé un nuevo sitio web de IIS y lo señalé en el camino. Que no tenía los permisos iis_iusrs sugeridos en la solución aceptada. Cuando agregué los permisos aún no funcionaba.

Solo comenzó a funcionar cuando le di los siguientes permisos al grupo 'Usuarios' y la herencia en cascada los permisos a web.config. Probablemente debería haberlo aplicado solo a web.config para reducir el área de superficie de ataque.

Permisos de usuario

Tom McDonald
fuente
Tenía exactamente la misma situación. Esto ayudó
Roemer
2

Teníamos un sitio web ejecutándose con una identidad específica en el grupo de aplicaciones, solo después de darle a ese usuario acceso de lectura a la carpeta que contenía web.config funcionaría. Rastreamos esto después de agregar el usuario 'todos' con lectura y todo funcionó bien.

robar
fuente
2

Para mí, el error apareció durante la depuración en mi máquina local y resultó estar relacionado con la base web.config, que inicia .NET Framework al compilar el sitio web. Mi archivo C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Config \ web.config tenía un elemento no reconocido (folderLevelBuildProviders). Arreglar esto solucionó el error 500.19.

Vea esto: IIS Manager no puede configurar la compilación .NET en aplicaciones .NET 4

Rafael Emshoff
fuente
2

Cambiar la identidad del modelo de proceso a LocalSystem solucionó este problema por mí. Puede encontrar esta configuración si hace clic derecho en el grupo de aplicaciones y elige "Configuración avanzada". Estoy ejecutando IIS 7.5.

jshoaf
fuente
2

Haga clic derecho en Web.Config => Tab Security => Button Edit => Button Add => Button Advanced => Button Find Now => En los resultados de búsqueda, seleccione su grupo (en nuestro caso "IIS_IUSRS") => Ok => Ok => Okay

Igor Levkivskiy
fuente
2

Esto nos sucedió cuando la aplicación IIS tiene un directorio virtual con una ruta física que contiene barras diagonales en /lugar de barras diagonales inversas \. Esto se realizó accidentalmente utilizando una API de administración de PowerShell para IIS durante nuestro proceso de entrega continua.

Ejemplo de configuración incorrecta applicationHost.config

<application path="/MySite/MyService" applicationPool="MyAppPool" enabledProtocols="http">
    <virtualDirectory path="/" physicalPath="C:\inetpub\MySite/MyService" />
</application>

Asegúrese de que el physicalPathatributo no contenga barras inclinadas /, solo barras invertidas\

Ejemplo de configuración corregida - applicationHost.config

<application path="/MySite/MyService" applicationPool="MyAppPool" enabledProtocols="http">
    <virtualDirectory path="/" physicalPath="C:\inetpub\MySite\MyService" />
</application>
SliverNinja - MSFT
fuente
1
En mi caso, la ruta física tenía una doble barra diagonal, por ejemplo C:\inetpub\MySite\\MyService. Cambiarlo a una sola barra diagonal funcionó
Ben Anderson
2

He resuelto esto agregando permiso de lectura a la carpeta para el usuario del grupo de aplicaciones (WIN SERVER 2008 R2): C: \ Windows \ System32 \ inetsrv \ config

Un poco de historia: nuestro servidor ha sido pirateado usando un error clásico donde el usuario de la aplicación tenía más permisos de los que debería (administrador local).

Para solucionarlo, creamos un nuevo usuario de dominio que solo tenía permisos en la carpeta de la aplicación, con los derechos mínimos necesarios y lo asignamos como usuario del grupo de aplicaciones. de lo que encontramos en el problema y esta fue la solución a nuestros problemas.

Ludens
fuente
2

Cambie su proyecto a otra unidad que no sea C: funcionó para mí con el mismo error.

Talha Imam
fuente
2

Esto puede suceder si su aplicación está en un directorio virtual y la ruta a los archivos es una unidad asignada.

Si cambia la ruta de los archivos a una unidad local, esto lo resolverá, si ese es realmente su problema.

UKcentric
fuente
2

Todas las respuestas dadas son válidas y funcionan en diferentes circunstancias.

Para mí, reiniciar Visual Studio funcionó.

Doruk
fuente
1

También recibí el mensaje "No se puede leer el archivo de configuración debido a permisos insuficientes". Resulta que las restricciones ISAPI y CGI en IIS para ASP.NET 4.0 32 bits y 64 bits se configuraron para denegar. Marcarlos a ambos como Permitidos solucionó mi problema.

Conde
fuente
1

Las respuestas anteriores fueron útiles, pero en caso de que esto ayude a alguien, tuve este problema exacto y resultó que estaba (redes de Windows) compartiendo la carpeta raíz desde la que estaba alojado el sitio. Eliminamos el recurso compartido, y agregamos el permiso de los Usuarios para leer / ejecutar y funcionó nuevamente bien.

Sospecho que la acción lo estropeó.

Miguel
fuente
0

Tenía este problema con una aplicación virtual. Todos los permisos fueron establecidos. IIS_IUSRS, AppPoolIdentity y luego le dio acceso completo a Todos. Nada funcionó. Se reiniciaron el grupo de aplicaciones, el sitio y IIS, pero no se puede realizar.

Eliminó la aplicación virtual y la agregó nuevamente desde cero y comenzó a funcionar.

Ojalá supiera lo que lo resolvió.

gbs
fuente
0

compruebe si el archivo no está marcado como de solo lectura , a pesar del permiso IIS_IUSRS, mostrará el mismo mensaje.

Syed Umar Ahmed
fuente
0

Recibí este mensaje de error que resultó ser debido a que mi carpeta física se encuentra en una unidad de red en lugar de la unidad local. Parece que los permisos en tales unidades por defecto pueden ser diferentes. Por ejemplo, mientras que la ubicación de la unidad local daba permiso a los usuarios de la computadora local, la ubicación de la red no.

Además, la respuesta aceptada no funciona para tal caso. Los usuarios locales o usuarios de IIS no estaban disponibles para asignar permisos. La solución fue mover la carpeta física a la unidad local.

Kat
fuente
0

Tuve el mismo problema y después de hacer todo lo escrito aquí como respuesta, todavía se reprodujo. La segunda mitad del problema fue el hecho de que .NET se desactivó en "Activar o desactivar las características de Windows"

Bogdan Mates
fuente
0

A veces, si se trata de un servidor nuevo, debe configurar o instalar la función ASP.NET en IIS para que pueda leer su archivo web.config.

En mi caso, esta fue la razón.

SanthoshM
fuente
0

En mi caso, estaba tratando de alojar páginas desde una unidad asignada (subst). El problema es que el subst se ejecutó en mi cuenta y el usuario de IIS no puede ver la misma unidad

Dinesh Rajan
fuente
0

Le di permiso y usé ICACLS.exe pero no funcionó. Luego cambié la ruta física y funcionó con éxito.

(IIS 8.5 Windows 2012 R2)

Adem Aygun
fuente