Impossible de lire le fichier de configuration en raison d'autorisations insuffisantes

354

J'ai récemment rencontré une erreur en essayant d'héberger mon site asp.net avec IIS. J'ai trouvé une solution que beaucoup ne jurent que par.

Solution:

  1. Ajouter IIS_IUSRS avec l'autorisation de lecture sur les fichiers du dossier
  2. Remplacez la méthode d'authentification IIS par BasicAuthentication
  3. rafraîchir le site Web. Ça va marcher

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

Que dois-je ajouter à mon fichier web.config? Je n'ai jamais eu à le modifier auparavant. Voici son contenu actuel:

<?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>

Mon erreur est:

Erreur de configuration: impossible de lire le fichier de configuration en raison d'autorisations insuffisantes
Fichier de configuration: \? \ C: \ Users ***** \ Documents \ Visual Studio2010 \ WebSites \ PointsForTime \ web.config

Freesnöw
la source
9
Veuillez consulter le module d'installation de réécriture. épargnez-vous quelques heures
regisbsb
Ma solution serait d'exécuter les commandes à partir de la ligne de commande ouverte avec des privilèges d'administrateur. Pour ce faire, recherchez l'invite de commande, cliquez dessus avec le bouton droit et cliquez sur Exécuter avec des privilèges d'administrateur.
David Waddington
En plus des autres réponses, notez que le cryptage du système de fichiers (EFS) peut également interférer avec IIS.
G-Wiz
J'ai fait cette annonce maintenant, l'hôte local demande un mot de passe, le plus proche que j'aie atteint jusqu'à présent grâce à ce travail
Paul Ledger
1
Pour moi, il n'y avait pas IIS_IUSR, j'ai fait la même chose pour l'utilisateur authentifié et cela a fonctionné
Bhanu Chhabra

Réponses:

544

Il n'y a aucun problème avec votre web.config . Votre site Web fonctionne selon un processus. Dans iis, vous pouvez définir l'identité de ce processus. L' identité sous laquelle s'exécute le pool d'applications de votre site Web ( services réseau, système local , etc.) doit avoir l'autorisation d'accéder au fichier web.config et de le lire.

Mise à jour:

Cette réponse mise à jour est la même que ci-dessus, mais un peu plus longue et plus simple et améliorée.

Tout d'abord : vous n'avez rien à changer dans votre fichier de configuration. Ça va . Le problème vient des autorisations de fichiers Windows .

Ce problème se produit car votre application ne peut pas accéder au fichier web.config et le lire .

Rendez le fichier accessible au groupe IIS_IUSRS . Cliquez simplement avec le bouton droit sur web.config et cliquez sur Propriétés , sous l' onglet Sécurité , ajoutez IIS_IUSRS .

Alors, quelle est cette chose IIS_IUSRS?

Votre site Web est comme un fichier exe . Comme tout fichier exe, il doit être démarré par un utilisateur et s'exécute selon les autorisations attribuées à cet utilisateur.

Lorsque votre site est démarré dans IIS , le pool d'applications de votre site Web est associé à un utilisateur ( services réseau, système local , etc.) (et peut être modifié dans IIS)

Ainsi, lorsque vous dites IIS_IUSRS , cela signifie tout utilisateur ( services réseau, système local , etc.) que votre site utilise .

Et comme @Seph l'a mentionné dans le commentaire ci - dessous : Si votre ordinateur est sur un domaine , n'oubliez pas que le groupe IIS_IUSRS est un groupe local . Assurez-vous également que lorsque vous essayez de trouver cet utilisateur, vérifiez l'emplacement, il doit être défini sur ordinateur local et non sur un domaine d'entreprise.

Afshin Gh
la source
79
Pour d'autres, il convient de souligner que la valeur par défaut est généralement IIS_IUSRSet de s'assurer que lorsque vous essayez de trouver cet utilisateur, vérifiez l'emplacement, il doit être défini sur l'ordinateur local et non sur un domaine d'entreprise.
Seph
3
Bonne réponse, et voici une astuce supplémentaire - en exécutant IIS7 sur Win7 dans un domaine, vous ne trouverez peut-être pas IIS_IUSRS dans le groupe local si vous essayez de trouver avec "Vérifier les noms ...". Ne vous inquiétez pas - tapez simplement IIS_IUSRS en entier et appuyez sur OK, et tout ira bien.
Eight-Bit Guru
2
Que faire si vous avez un lecteur partagé pour le chemin d'un site? Cela a-t-il un effet? Comment faites-vous cela avec des disques partagés?
Kevin
2
Je devais le faire pour IUSR. IIS_IUSRS n'a pas fonctionné pour moi pour une raison quelconque.
Todd
13
Lorsque vous essayez de configurer un nouveau site Web ASP.Net à partir de zéro dans IIS 7 une fois que vous avez corrigé l'erreur en cours de discussion dans ce fil, vous pourriez rencontrer une erreur d'autorisation "Erreur HTTP 401.3 - Non autorisé" comme prochain obstacle. Pour résoudre ce problème si vous avez activé l'authentification anonyme, modifiez l'identité de l'utilisateur anonyme de "IUSR" (définie par défaut par IIS) en identité de pool d'applications. Pour obtenir la fenêtre de modification de ce paramètre, utilisez l'action "Modifier" dans le volet Actions de la vue Fonctionnalités IIS pour la fonction IIS "Authentification".
RBT
72

J'ai eu ce qui semblait être le même problème d'autorisations sur le web.configfichier.
Cependant, mon problème était dû au fait qu'IIS ne chargeait pas le fichier de configuration car il contenait des règles de réécriture d'URL et je n'avais pas installé le module de réécriture d'URL IIS sur le nouveau serveur.

Solution: installez le module de réécriture.
J'espère que cela fera gagner quelques heures à quelqu'un.

Jarrod
la source
Ouaip. Le serveur précédent, j'ai utilisé cela sur réécrit la route non ssl vers ssl .. tant pour un excellent message d'erreur d'IIS. error::) +1 Parce qu'au lieu d'exiger SSL, j'ai réécrit l'URL en HTTPS en incluant quelqu'un lié sans https. Quelle énigme.
Piotr Kula
Merci!!! me suis trompé d'autorisations pendant des heures et c'était à la fin!
Carl Woodhouse
Comment procéder pour installer le module de réécriture d'URL IIS?
B. Clay Shannon
2
C'était aussi mon problème - merci! Pour installer le module de réécriture, téléchargez-le à partir de cette page: iis.net/downloads/microsoft/url-rewrite fermer IIS, installer, redémarrer IIS (juste pour être sûr).
Tyler Forsythe
2
@ B.ClayShannon utilise le programme d'installation de la plate-forme Web, recherchez IIS Rewrite
enorl76
64

Note de l'éditeur: Faire ce que dit cette réponse est DANGEREUX ! Le compte LocalSystem est un ...

Compte entièrement fiable, plus encore que le compte administrateur. Il n'y a rien sur une seule boîte que ce compte ne peut pas faire, et il a le droit d'accéder au réseau en tant que machine (cela nécessite Active Directory et l'octroi des autorisations de compte de machine à quelque chose)


Changer l'identité de ApplicationPoolIdentity à LocalSystem a fait le travail;).

J'utilise win7 64 avec IIS 7.5

en savoir plus sur l' identité du pool d'applications dans IIS 7.5 et gagner 7

entrez la description de l'image ici

amd
la source
Réponse utile pour IIS 6 également. Vous trouverez plus d'informations sur la modification de l'identité du pool d'applications sur le site Web de Microsoft ici: microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/…
Manuel Alvarez
22
Apporter cette modification est un risque pour la sécurité en raison de l'accès auquel vous accordez
WhiteKnight
Cela semble avoir été mon problème ici et changer l'identité du pool d'applications en LocalSystem a fonctionné comme décrit!
Vasily Hall
21
Votant contre cela en raison du trou de sécurité béant que cela laisse sur le serveur. Vous ne devez JAMAIS exécuter des services accessibles au public comme IIS sous le compte système local !!!! Vous remettez les clés du royaume à quiconque peut pirater le serveur. Sérieusement, NE FAITES PAS CELA.
Dimesio
5
OMG Cette réponse est SI INCORRECTE pour des raisons de sécurité. Une intervention de modération est nécessaire. C'est une idée HORRIBLE. Imaginez n'importe quel accès aux fichiers spécifié sur la chaîne de requête ... boom ... n'importe qui peut LIRE web.config et IIS le servira avec plaisir au monde entier. N'UTILISEZ PAS CETTE RÉPONSE.
enorl76
47

J'ai eu le même problème lorsque j'ai essayé de partager le dossier racine du site avec un autre utilisateur. Un dossier a perdu l'autorisation. J'ai donc suivi les étapes pour ajouter l'autorisation au groupe IIS_IUSRS comme suggéré par Afshin Gh. Le problème est que ce groupe n'était pas disponible pour moi. J'utilise Windows 7.

Ce que j'ai fait, je viens de changer quelques étapes:

  1. Faites un clic droit sur le dossier parent (qui a perdu l'autorisation),
  2. Propriétés => Sécurité => Dans "Noms de groupes ou d'utilisateurs:",
  3. Cliquez sur Modifier ...
  4. La fenêtre "Autorisation pour votre dossier" sera ouverte.
  5. Dans "Noms de groupe ou d'utilisateur:" appuyez sur AJOUTER ... btn,
  6. Tapez Authen et appuyez sur Vérifier les noms,
  7. Vous verrez le nom complet du groupe " Utilisateurs authentifiés "
  8. Appuyez sur ok => appliquer.
  9. Cela devrait réactiver les privilèges.

Cela a fonctionné pour moi.

zwitterion
la source
2
Cela a fonctionné pour moi. Ce devrait être la réponse acceptée. J'ai essayé les autres méthodes, elles ne fonctionnent pas.
GunWanderer
1
J'ai essayé toutes les autres solutions ne fonctionneront pas avant celle-ci.
jenna_3108
1
D'accord, je pense avoir une explication pour expliquer pourquoi cela fonctionne. Certains développeurs hébergent leur code sur C:\ ie C:\Devou C:\Code, etc. Le groupe de sécurité Authenticated Usersest accordé sur C:\ et propagé aux dossiers enfants. Cependant, au niveau du C:\Usersdossier, cette propagation s'arrête. Ainsi, les développeurs comme moi qui hébergent leur code dans le dossier de base doivent accorder l'accès Authenticated Usersà ces dossiers racine IIS pour que IIS fonctionne.
Colin
lorsque je clique sur Vérifier les noms, il me demande des informations d'identification. Je ne sais pas quelles informations d'identification d'utilisateur sont attendues ici. Quelqu'un peut-il aider?
RSB
18

Vous n'avez rien à changer dans votre web.config.

Le problème est les autorisations du système de fichiers. Vos autorisations de fichier ne permettent pas à l'utilisateur IIS_IUSRS d'accéder à web.config (ou probablement à l'un des fichiers). Modifiez leurs autorisations de fichier dans les fenêtres pour permettre au compte IIS_IUSRS d'y accéder.

Erik Funkenbusch
la source
1
J'avais un problème similaire. Si quelqu'un ne trouve jamais l'utilisateur IIS_IUSRS, vérifiez l'emplacement. Le mien est par défaut dans le domaine de l'entreprise, donc je ne l'ai pas trouvé tout de suite parce que j'ai oublié de vérifier où il cherchait.
jgreep
@Mystere Man J'ai le même problème. J'ai changé les autorisations et puis essayé. Je reçois toujours la même erreur. :(
Rauf
"(ou probablement l'un des fichiers)" fonctionne pour moi, autoriser l'accès du compte IIS_IUSRS à web.config ne suffit pas, je dois lui permettre d'avoir accès à tous les fichiers du site.
Tuyen Nguyen
2
Je devais le faire pour IUSR. IIS_IUSRS n'a pas fonctionné pour moi.
Todd
Merci. J'ai accordé à «Tout le monde» une autorisation complète sur le dossier de l'application Web et cela fonctionne.
Minh Nguyen
16

Rendez le fichier accessible au groupe IIS_IUSRS . Cliquez avec le bouton droit sur votre web.config, développez les propriétés et sous l'onglet sécurité, ajoutez IIS_IUSRS. Accordez au groupe un accès en lecture / écriture.

Lorsque le groupe n'est PAS disponible, remplacez IIS_IUSRS par ComputerName \ IIS_IUSRS

Kurt Van den Branden
la source
+1 Bon conseil. La réponse acceptée est bonne, mais néglige de mentionner que vous devrez peut-être ajouter le nom de votre ordinateur devant «IIS_IUSRS», ce qui m'a permis de dépasser cela.
Ralph Lavelle
Cela ("Lorsque le groupe n'est PAS disponible") avait mes espoirs, mais même lorsque j'ai ajouté le nom de l'ordinateur ("IBM-TAMMYFAYEBAKER.platypus.local \ IIS_IUSRS"), j'obtiens toujours la même erreur. J'ai également essayé le nom complet de l'ordinateur, mais il n'accepterait même pas cela en tant qu'utilisateur valide.
B. Clay Shannon
15

Accédez au dossier parent, cliquez avec le bouton droit et sélectionnez Propriétés . Sélectionnez l' onglet Sécurité , modifiez les autorisations et ajoutez . Cliquez sur Avancé et sur Rechercher maintenant . Sélectionnez IIS_IUSRS et cliquez sur OK puis à nouveau sur OK . Assurez-vous d'avoir coché Écrire . Cliquez sur OK et à nouveau sur OK .

Travail accompli!

Quinny
la source
19
Qu'est-ce que c'est que de recommander un accès en écriture lorsque la lecture est tout ce qui est nécessaire? /
downvoted
2
Le seul IIS * que j'ai est IIS_WPG
B. Clay Shannon
1
@ B.ClayShannon Moi aussi. Je n'ai que IIS_WPG
Fortune
13

Lorsque vous accordez des autorisations à IIS_IUSRS, vous devez vérifier que dans la section IIS / Authentification de votre application Web, les informations d'identification d'authentification anonyme utilisent l'identité du pool d'applications et non IUSR.

entrez la description de l'image ici

Carlos
la source
Où puis-je obtenir cette interface?
Dans l'onglet Affichage des fonctionnalités de votre application Web: Authentification
Carlos
Cette réponse doit faire partie de la cause de réponse acceptée sans cela, vous devez également ajouter IUSR dans la liste d'accès du dossier du site Web
Laurent S.
7

Pour une raison quelconque, votre web.config est défini en lecture seule. Décochez l'option en lecture seule du fichier web.config.

Luis
la source
Si votre autorisation est un accès complet et continue d'obtenir l'erreur, c'est la bonne réponse (y).
Vasil Valchev
4

J'ai utilisé subst pour créer un mappage de D: vers C: afin de conserver la même configuration que les autres développeurs de l'équipe. Cela m'a également donné les mêmes erreurs que celles décrites. La suppression de cela l'a corrigé pour moi.

Sniipe
la source
3

La solution acceptée ne me convenait pas. J'utilise un dépôt Git et il a été cloné dans le dossier suivant

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

J'ai créé un nouveau site Web IIS et l'ai pointé vers le chemin. Qui n'avait pas les autorisations iis_iusrs suggérées dans la solution acceptée. Lorsque j'ai ajouté les autorisations, cela ne fonctionnait toujours pas.

Il n'a commencé à fonctionner que lorsque j'ai accordé les autorisations suivantes au groupe «Utilisateurs» et que l'héritage a répercuté les autorisations sur web.config. Aurait probablement dû l'appliquer uniquement au web.config pour réduire la surface d'attaque.

Pemissions des utilisateurs

Tom McDonald
la source
Eu exactement la même situation. Cela a aidé.
Roemer
2

Nous avions un site Web fonctionnant avec une identité spécifique dans l'apppool, seulement après avoir donné à cet utilisateur un accès en lecture au dossier contenant le web.config, cela fonctionnerait. Nous avons suivi cela après avoir ajouté l'utilisateur "tout le monde" avec lecture et tout a bien fonctionné.

Rob
la source
2

Pour moi, l'erreur s'est produite lors du débogage sur ma machine locale et s'est avérée être liée au web.config de base, qui est initié par le .NET Framework lors de la compilation du site Web. Mon fichier C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Config \ web.config comportait un élément non reconnu (folderLevelBuildProviders). La correction de cela a corrigé l'erreur 500.19.

Voir ceci: IIS Manager ne peut pas configurer la compilation .NET sur les applications .NET 4

Rafael Emshoff
la source
2

La modification de l'identité du modèle de processus en LocalSystem a résolu ce problème pour moi. Vous pouvez trouver ce paramètre si vous faites un clic droit sur le pool d'applications et choisissez "Paramètres avancés". J'utilise IIS 7.5.

jshoaf
la source
2

Cliquez avec le bouton droit sur Web.Config => onglet Sécurité => bouton Modifier => bouton Ajouter => bouton avancé => bouton Rechercher maintenant => dans les résultats de la recherche, sélectionnez votre groupe (dans notre cas "IIS_IUSRS") => Ok => Ok => D'accord

Igor Levkivskiy
la source
2

Cela nous est arrivé lorsque l' application IIS a un répertoire virtuel avec un chemin physique qui contient des barres obliques /au lieu de barres obliques inverses \. Cela a été accidentellement fait en utilisant une API de gestion PowerShell pour IIS au cours de notre processus de livraison continue.

Exemple de mauvaise configuration - applicationHost.config

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

Assurez-vous que l' physicalPathattribut ne contient pas de barres obliques /, uniquement des barres obliques inverses\

Exemple de configuration corrigée - applicationHost.config

<application path="/MySite/MyService" applicationPool="MyAppPool" enabledProtocols="http">
    <virtualDirectory path="/" physicalPath="C:\inetpub\MySite\MyService" />
</application>
SliverNinja - MSFT
la source
1
Dans mon cas, le chemin physique avait une double barre oblique par exemple C:\inetpub\MySite\\MyService. Le changer en une seule barre oblique arrière a fonctionné
Ben Anderson
2

J'ai résolu ce problème en ajoutant une autorisation de lecture au dossier pour l'utilisateur du pool d'applications (WIN SERVER 2008 R2): C: \ Windows \ System32 \ inetsrv \ config

Un peu d'histoire: Notre serveur a été piraté en utilisant une erreur classique où l'utilisateur de l'application avait plus d'autorisations qu'il le devrait (administrateur local).

Pour le corriger, nous avons créé un nouvel utilisateur de domaine qui ne disposait que d'autorisations sur le dossier d'application, avec les droits nécessaires minimum et l'avons affecté en tant qu'utilisateur du pool d'applications. que nous avons touché dans la question et c'était la solution à nos problèmes.

Ludens
la source
2

Déplacez votre projet vers un lecteur autre que C: a fonctionné pour moi avec la même erreur.

Talha Imam
la source
2

Cela peut se produire si votre application se trouve dans un répertoire virtuel et que le chemin d'accès aux fichiers est un lecteur mappé.

Si vous modifiez le chemin d'accès aux fichiers sur un lecteur local, cela le résoudra, si tel est bien votre problème.

UKcentric
la source
2

Toutes les réponses données sont valables et fonctionnent dans des circonstances différentes.

Pour moi, le redémarrage de Visual Studio a fonctionné.

Doruk
la source
1

Je recevais également le "Impossible de lire le fichier de configuration en raison d'autorisations insuffisantes". Il s'avère que les restrictions ISAPI et CGI dans IIS pour ASP.NET 4.0 32 bits et 64 bits ont été définies pour être refusées. Les marquer tous les deux sur Autorisé a résolu mon problème.

comte
la source
1

Les réponses ci-dessus ont été utiles, mais au cas où cela aiderait quelqu'un - j'ai eu ce problème exact, et il s'est avéré que j'étais (réseau Windows) partageant le dossier racine à partir duquel le site était hébergé. Nous avons tué le partage et ajouté la permission des utilisateurs de lire / exécuter et cela a fonctionné à nouveau très bien.

Je soupçonne que la part a foiré.

Michael
la source
0

Eu ce problème avec une application virtuelle. Toutes les autorisations ont été définies. IIS_IUSRS, AppPoolIdentity, puis a donné un accès complet à tout le monde. Rien n'a fonctionné. Apppool, site et IIS redémarrés, mais non.

Supprimé l'application virtuelle et l'ajoutée à nouveau à partir de zéro et il a commencé à fonctionner.

J'aimerais savoir ce qui l'a résolu.

gbs
la source
0

vérifiez si le fichier n'est pas marqué en lecture seule , malgré l'autorisation IIS_IUSRS, il affichera le même message.

Syed Umar Ahmed
la source
0

J'ai eu ce message d'erreur qui s'est avéré être dû au fait que mon dossier physique se trouvait sur un lecteur réseau par opposition au lecteur local. Il semble que les autorisations sur ces disques par défaut puissent être différentes. Par exemple, alors que l'emplacement du lecteur local autorisait les utilisateurs de l'ordinateur local, l'emplacement réseau ne l'a pas fait.

En outre, la réponse acceptée ne fonctionne pas dans un tel cas. Les utilisateurs locaux ou les utilisateurs IIS n'étaient pas disponibles pour attribuer des autorisations. La solution était de déplacer le dossier physique vers le lecteur local.

Kat
la source
0

J'ai eu le même problème et après avoir fait toutes les choses écrites ici comme réponses, il s'est toujours reproduit. La seconde moitié du problème était le fait que .NET était désactivé sous "Activer ou désactiver les fonctionnalités Windows"

Bogdan Mates
la source
0

Parfois, s'il s'agit d'un nouveau serveur, vous devez configurer ou installer la fonctionnalité ASP.NET sur IIS pour qu'il puisse lire votre fichier web.config.

Dans mon cas, c'était la raison.

SanthoshM
la source
0

Dans mon cas, j'essayais d'héberger des pages à partir d'un lecteur mappé (subst). Le problème est que le subst a été exécuté sous mon compte et l'utilisateur IIS n'est pas en mesure de voir le même lecteur

Dinesh Rajan
la source
0

J'ai donné la permission et utilisé ICACLS.exe mais cela n'a pas fonctionné. Ensuite, j'ai changé le chemin physique et cela a fonctionné avec succès.

(IIS 8.5 windows 2012 R2)

Adem Aygun
la source