Não é possível ler o arquivo de configuração devido a permissões insuficientes

354

Recentemente, encontrei um erro ao tentar hospedar meu site asp.net com o IIS. Eu encontrei uma solução pela qual muitos juram.

Solução:

  1. Adicione IIS_IUSRS com permissão de leitura em arquivos na pasta
  2. Alterar o método de autenticação do IIS para BasicAuthentication
  3. atualize o site. Vai funcionar

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

O que eu adiciono ao meu arquivo web.config? Eu nunca tive que editá-lo antes. Aqui está o seu conteúdo atual:

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

Meu erro é:

Erro de configuração: não é possível ler o arquivo de configuração devido a permissões insuficientes
Arquivo de configuração: \? \ C: \ Users ***** \ Documents \ Visual Studio2010 \ WebSites \ PointsForTime \ web.config

Freesnöw
fonte
9
Por favor, consulte o módulo de reescrita de instalação. economize algumas horas
regisbsb
Minha solução seria executar os comandos da linha de comando aberta com privilégios de administrador. Para fazer isso, localize o prompt de comando, clique com o botão direito do mouse e clique em executar com privilégios de administrador.
David Waddington
Além das outras respostas, observe que o EFS (sistema de arquivos com criptografia) também pode interferir no IIS.
L-Mag
Eu fiz este anúncio agora host local está a pedir uma senha, mais próximo eu chegar tão longe para isso graças de trabalho
Paul Ledger
11
Para mim não havia IIS_IUSR, eu fiz o mesmo para Usuário Autenticado e funcionou
Bhanu Chhabra

Respostas:

544

Não há nenhum problema com o seu web.config . Seu site é executado sob um processo. No iis, você pode definir a identidade desse processo. A identidade que o pool de aplicativos do site executa como ( Serviços de Rede, Sistema Local etc.) deve ter permissão para acessar e ler o arquivo web.config.

Atualizar:

Esta resposta atualizada é a mesma que acima, mas um pouco mais longa, mais simples e aprimorada.

Primeiro de tudo : você não precisa alterar nada no seu arquivo de configuração. Tudo bem . O problema está nas permissões de arquivo do Windows .

Esse problema ocorre porque seu aplicativo não pode acessar e ler o arquivo web.config .

Torne o arquivo acessível ao grupo IIS_IUSRS . Apenas clique com o botão direito do mouse em web.config e clique em Propriedades , na guia Segurança , adicione IIS_IUSRS .

Então, o que é essa coisa do IIS_IUSRS?

Seu site é como um arquivo exe . Assim como qualquer arquivo exe, ele deve ser iniciado por um usuário e executado de acordo com as permissões atribuídas a esse usuário.

Quando o site é iniciado no IIS , o Pool de Aplicativos do site é associado a um usuário ( Serviços de Rede, Sistema Local , Etc. ...) (e pode ser alterado no IIS)

Então, quando você diz IIS_IUSRS , significa qualquer usuário ( Serviços de Rede, Sistema Local , Etc. ...) para o qual seu site está sendo executado.

E como o @Seph mencionado no comentário abaixo : Se o seu computador estiver em um domínio , lembre-se de que o grupo IIS_IUSRS é um grupo local . Além disso, verifique se, ao tentar encontrar esse usuário, o local deve ser definido no computador local e não no domínio corporativo.

Afshin Gh
fonte
79
Para outros, vale ressaltar que o padrão geralmente é IIS_IUSRSe garantir que, ao tentar encontrar esse usuário, verifique o local em que ele deve ser definido no computador local e não no domínio corporativo.
Seph
3
Boa resposta e aqui está uma dica adicional - executando o IIS7 no Win7 em um domínio, talvez você não encontre IIS_IUSRS no grupo local se tentar encontrar com 'Verificar nomes ...'. Não se preocupe - basta digitar IIS_IUSRS por inteiro e clicar em OK, e tudo ficará bem.
oito bits Guru
2
E se você tiver uma unidade compartilhada para o caminho de um site? Isso tem algum efeito? Como você faz isso funcionar com unidades compartilhadas?
Kevin
2
Eu tive que fazer isso por IUSR. IIS_IUSRS não funcionou para mim por algum motivo.
Todd
13
Ao tentar configurar um novo site da ASP.Net do zero no IIS 7 em diante, depois de corrigir o erro discutido neste segmento, você poderá enfrentar um erro de autorização "HTTP Error 401.3 - Unauthorized" como seu próximo obstáculo. Para corrigir isso, se você ativou a autenticação anônima, altere a identidade do usuário anônimo de "IUSR" (definido como padrão pelo IIS) para Identidade do pool de aplicativos. Para obter a janela de edição dessa configuração, use a ação "Editar" do painel Ações, no modo de exibição de recursos do IIS, para o recurso "Autenticação" do IIS.
RBT
71

Eu tinha o que parecia ser o mesmo problema de permissão no web.configarquivo.
No entanto, meu problema foi causado pelo fato de o IIS não ter carregado o arquivo de configuração porque ele continha regras de reescrita de URL e eu não havia instalado o módulo de reescrita de URL do IIS no novo servidor.

Solução: Instale o módulo de reescrita.
Espero que isso salve alguém por algumas horas.

Jarrod
fonte
Sim. O servidor anterior que eu usei isso reescreveu a rota não ssl para ssl .. tanto por uma ótima mensagem de erro do IIS. error::) +1 Em vez de exigir o SSL, eu reescrevi o URL para HTTPS caso alguém vinculado sem https. Que enigma.
Piotr Kula
obrigado!!! esteve mexendo com permissões por horas e ficou por isso no final!
22815 Carl Woodhouse
Como alguém instala o módulo de reescrita de URL do IIS?
B. Clay Shannon
2
Este foi o meu problema também - obrigado! Para instalar o módulo de reescrita, faça o download desta página: iis.net/downloads/microsoft/url-rewrite feche o IIS, instale, reinicie o IIS (apenas por segurança).
Tyler Forsythe
2
@ B.ClayShannon usar o Web Platform Installer, procurar IIS Rewrite
enorl76
64

Nota do editor: Fazer o que esta resposta diz é PERIGOSO ! A conta LocalSystem é uma ...

Conta totalmente confiável, mais do que a conta de administrador. Não há nada em uma única caixa que esta conta não possa fazer e ela tem o direito de acessar a rede como a máquina (isso requer o Active Directory e a concessão de permissões à conta da máquina para algo)


Alterar a identidade de ApplicationPoolIdentity para LocalSystem fez o trabalho;).

Estou usando o win7 64 com o IIS 7.5

mais sobre a identidade do pool de aplicativos no IIS 7.5 e ganhe 7

insira a descrição da imagem aqui

amd
fonte
Resposta útil para o IIS 6 também. Encontrado mais informações sobre como alterar Aplicação Identidade do Pool no site Microsoft aqui: microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/...
Manuel Alvarez
22
Fazer essa alteração é um risco por causa do acesso estará concedendo a este serviço de segurança: msdn.microsoft.com/en-us/library/windows/desktop/...
WhiteKnight
Esse parece ter sido meu problema aqui e a alteração da identidade do pool de aplicativos para o LocalSystem funcionou conforme descrito!
Vasily Hall
21
A votação é baixa devido à brecha de segurança que isso deixa no servidor. Você nunca deve executar serviços públicos como o IIS na conta do sistema local !!!! Você está basicamente entregando as chaves do reino para qualquer pessoa que possa invadir o servidor. Sério NÃO FAÇA ISTO.
Dimesio
5
OMG Esta resposta é TÃO INCORRETA por segurança. É necessária intervenção moderada. Esta é uma ideia HORRÍVEL. Imagine qualquer acesso ao arquivo especificado na string de consulta ... boom ... qualquer um pode LER web.config e o IIS servirá de bom grado para o mundo. NÃO USE ESTA RESPOSTA.
enorl76
47

Eu tive o mesmo problema quando tentei compartilhar a pasta raiz do site com outro usuário. Alguma pasta perdeu a permissão. Então, eu segui as etapas para adicionar permissão ao grupo IIS_IUSRS , conforme sugerido por Afshin Gh. O problema é que este grupo não estava disponível para mim. Estou usando o Windows 7.

O que fiz, acabei de alterar algumas etapas:

  1. Clique com o botão direito do mouse na pasta pai (que perdeu a permissão),
  2. Propriedades => Segurança => Em "Nomes de grupo ou usuário:",
  3. Clique em Editar ...
  4. A janela "Permissão para sua pasta" será aberta.
  5. Em "Nomes de grupo ou usuário:" pressione ADD ... btn,
  6. Digite Authen e pressione Verificar nomes,
  7. Você verá o nome completo do grupo " Usuários autenticados "
  8. Pressione ok => aplicar.
  9. Isso deve ativar privilégios novamente.

Isso funcionou para mim.

zwitterion
fonte
2
Isso funcionou para mim. Essa deve ser a resposta aceita. Eu tentei os outros métodos, eles não funcionam.
GunWanderer
11
Tentei todas as outras soluções não funcionará até este.
jenna_3108 18/06/19
11
Ok, acho que tenho uma explicação do por que isso funciona. Alguns desenvolvedores hospedam seu código em C:\ ie C:\Devou C:\Code, etc. O grupo de segurança Authenticated Usersé concedido C:\ e propagado para pastas filho. No entanto, na C:\Userspasta, essa propagação é interrompida. Portanto, desenvolvedores como eu, que hospedam seu código dentro da pasta pessoal, precisam conceder acesso Authenticated Usersa essas pastas raiz do IIS para que o IIS funcione.
Colin
quando clico em verificar nomes, ele me pede credenciais. Não tenho certeza de quais credenciais de usuário são esperadas aqui.
RSB
18

Você não precisa alterar nada no seu web.config.

O problema são as permissões do sistema de arquivos. Suas permissões de arquivo não permitem que o usuário IIS_IUSRS acesse web.config (ou provavelmente qualquer um dos arquivos). Altere suas permissões de arquivo no Windows para permitir que a conta IIS_IUSRS acesse.

Erik Funkenbusch
fonte
11
Eu tive um problema parecido. Se alguém não conseguir encontrar o usuário IIS_IUSRS, verifique o local. O meu era padronizado para o domínio corporativo, por isso não o encontrei imediatamente porque esqueci de verificar para ver para onde ele estava procurando.
jgreep
@Mystere Man Eu tenho o mesmo problema. Mudei as permissões e tentei. Ainda recebo o mesmo erro. :(
Rauf
"(ou provavelmente qualquer um dos arquivos)" funciona para mim, permitindo que a conta IIS_IUSRS acesse o web.config não é suficiente, preciso habilitar o acesso a todos os arquivos do site.
Tuyen Nguyen
2
Eu tive que fazer isso por IUSR. IIS_IUSRS não funcionou para mim.
Todd
Obrigado. Eu concedi a 'Todos' com permissão total na pasta do aplicativo Web e ele funciona.
Minh Nguyen
16

Torne o arquivo acessível ao grupo IIS_IUSRS . Clique com o botão direito do mouse em seu web.config, expanda propriedades e, na guia segurança, adicione IIS_IUSRS. Dê ao grupo acesso de leitura / gravação.

Quando o grupo NÃO estiver disponível, substitua IIS_IUSRS por ComputerName \ IIS_IUSRS

Kurt Van den Branden
fonte
+1 boa dica. A resposta aceita é boa, mas esquece de mencionar que você pode precisar adicionar o nome do computador na frente de 'IIS_IUSRS', que foi o que me levou a superar isso.
Ralph Lavelle
Isso ("Quando o grupo NÃO está disponível") teve minhas esperanças, mas mesmo quando eu acrescentei o nome do computador ("IBM-TAMMYFAYEBAKER.platypus.local \ IIS_IUSRS"), ainda recebo o mesmo erro. Também tentei o nome completo do computador, mas ele nem aceitaria isso como um usuário válido.
B. Clay Shannon
15

Vá para a pasta pai, clique com o botão direito do mouse e selecione Propriedades . Selecione a guia Segurança , edite as permissões e Adicionar . Clique em Avançado e em Localizar agora . Selecione IIS_IUSRS e clique em OK e OK novamente. Verifique se você tem a opção Escrever . Clique em OK e OK novamente.

Tarefa concluída!

Quinny
fonte
19
O que diabos é recomendar o acesso de gravação quando basta ler? / downvoted
TristanK
2
A única IIS * eu tenho é IIS_WPG
B. Clay Shannon
11
@ B.ClayShannon Eu também. Eu só tenho IIS_WPG
Fortune
13

Ao conceder permissões ao IIS_IUSRS , verifique se, na seção IIS / Autenticação do seu Aplicativo da Web, as credenciais de autenticação anônima usam a identidade do pool de aplicativos e não o IUSR.

insira a descrição da imagem aqui

Carlos
fonte
Onde posso obter essa interface?
Na guia Exibição de recursos do seu aplicativo Web: Autenticação
Carlos
Esta resposta deve fazer parte da causa de resposta aceita. Sem isso, você também precisará adicionar o IUSR na lista de acesso da pasta do site
Laurent S.
7

Por alguma razão, seu web.config está definido como somente leitura. Desmarque a opção somente leitura do arquivo web.config.

Luis
fonte
Se sua permissão for de acesso total e ainda assim receber o erro, esta é a resposta correta (y).
Vasil Valchev
4

Usei subst para criar um mapeamento de D: para C: para manter a mesma configuração que outros desenvolvedores da equipe. Isso também me deu os mesmos erros descritos. Remover isso corrigiu para mim.

Sniipe
fonte
3

A solução aceita não foi para mim. Eu uso um repositório Git e ele é clonado para a seguinte pasta

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

Eu criei um novo site do IIS e apontei para o caminho. Que não tinha as permissões iis_iusrs sugeridas na solução aceita. Quando adicionei as permissões, ele ainda não funcionou.

Ele só começou a funcionar quando eu dei as seguintes permissões ao grupo 'Usuários' e a herança conectou em cascata as permissões ao web.config. Provavelmente deveria tê-lo aplicado apenas ao web.config para reduzir a área da superfície de ataque.

Pemissions do usuário

Tom McDonald
fonte
Exatamente a mesma situação. Isso ajudou.
Roemer
2

Tínhamos um site em execução com uma identidade específica no pool de aplicativos, somente depois de dar a esse usuário acesso de leitura à pasta que continha o web.config funcionaria. Nós rastreamos isso depois de adicionar o usuário 'everyone' com leitura e tudo funcionou bem.

roubar
fonte
2

Para mim, o erro apareceu durante a Depuração na minha máquina local e acabou relacionado ao web.config base, que é iniciado pelo .NET Framework ao compilar o site. Meu arquivo C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Config \ web.config tinha um elemento não reconhecido (folderLevelBuildProviders). A correção disso corrigiu o erro 500.19.

Veja isto: O Gerenciador do IIS não pode configurar a compilação do .NET nos aplicativos .NET 4

Rafael Emshoff
fonte
2

Alterar a identidade do modelo de processo para LocalSystem corrigiu esse problema para mim. Você pode encontrar essa configuração se clicar com o botão direito do mouse no pool de aplicativos e escolher "Configurações avançadas". Estou executando o IIS 7.5.

jshoaf
fonte
2

Clique com o botão direito do mouse em Web.Config => Segurança da guia => Edição de botão => Adicionar botão => Botão avançado => Localizar agora => Nos resultados da pesquisa, selecione seu grupo (no nosso caso "IIS_IUSRS") => Ok => Ok => Está bem

Igor Levkivskiy
fonte
2

Isso aconteceu quando o aplicativo IIS possui um diretório virtual com um caminho físico que contém barras invertidas em /vez de barras invertidas \. Isso foi feito acidentalmente usando uma API de gerenciamento de PowerShell para IIS durante nosso processo de entrega contínua.

Exemplo de configuração incorreta - applicationHost.config

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

Verifique se o physicalPathatributo não contém barras /, apenas barras invertidas\

Exemplo de configuração corrigido - applicationHost.config

<application path="/MySite/MyService" applicationPool="MyAppPool" enabledProtocols="http">
    <virtualDirectory path="/" physicalPath="C:\inetpub\MySite\MyService" />
</application>
SliverNinja - MSFT
fonte
11
No meu caso, o caminho físico tinha uma barra dupla, por exemplo C:\inetpub\MySite\\MyService. Alterá-lo para uma única barra invertida trabalhou
Ben Anderson
2

Eu resolvi isso adicionando permissão de leitura à pasta do usuário do pool de aplicativos (WIN SERVER 2008 R2): C: \ Windows \ System32 \ inetsrv \ config

Um pouco de histórico: nosso servidor foi hackeado usando um erro clássico, em que o usuário do aplicativo tinha mais permissões do que deveria (administrador local).

Para corrigi-lo, criamos um novo usuário de domínio que tinha apenas permissões na pasta do aplicativo, com direitos mínimos necessários e o atribuímos como usuário do pool de aplicativos. do que atingimos na questão e essa foi a solução para nossos problemas.

ludens
fonte
2

Mude seu projeto para alguma unidade diferente de C: funcionou para mim com o mesmo erro.

Talha Imam
fonte
2

Isso pode acontecer se seu aplicativo estiver em um diretório virtual e o caminho para os arquivos for uma unidade mapeada.

Se você alterar o caminho dos arquivos para uma unidade local, isso será resolvido, se esse for realmente o seu problema.

UKcentric
fonte
2

Todas as respostas dadas são válidas e funcionam em diferentes circunstâncias.

Para mim, reiniciar o Visual Studio funcionou.

Doruk
fonte
1

As respostas acima foram úteis, mas, caso isso ajude alguém - eu tive esse problema exato, e aconteceu que eu estava (rede Windows) compartilhando a pasta raiz da qual o site estava sendo hospedado. Matamos o compartilhamento e adicionamos a permissão de Usuários para ler / executar e funcionou novamente muito bem.

Eu suspeito que a parte tenha estragado tudo.

Michael
fonte
0

Eu também estava recebendo o "Não é possível ler o arquivo de configuração devido a permissões insuficientes". Acontece que as restrições ISAPI e CGI no IIS para o ASP.NET 4.0 32 bits e 64 bits foram definidas para negar. Marcar os dois como Permitido corrigiu meu problema.

Conde
fonte
0

Teve esse problema com um aplicativo virtual. Todas as permissões foram definidas. IIS_IUSRS, AppPoolIdentity e, em seguida, concedeu acesso total a Todos. Nada funcionou. Reinicie o apppool, o site e o IIS, mas não vá.

Excluiu o aplicativo virtual e o adicionou novamente do zero e começou a funcionar.

Gostaria de saber o que resolveu.

gbs
fonte
0

verifique se o arquivo não está marcado como somente leitura , apesar da permissão IIS_IUSRS, ele exibirá a mesma mensagem.

Syed Umar Ahmed
fonte
0

Eu recebi essa mensagem de erro devido à minha pasta física estar localizada em uma unidade de rede em oposição à unidade local. Parece que as permissões nessas unidades, por padrão, podem ser diferentes. Por exemplo, enquanto o local da unidade local deu permissão aos usuários do computador local, o local da rede não.

Além disso, a resposta aceita não funciona para esse caso. Os usuários locais ou usuários do IIS não estavam disponíveis para atribuir permissões. A solução foi mover a pasta física para a unidade local.

Kat
fonte
0

Eu tive o mesmo problema e, depois de fazer todas as coisas escritas aqui como respostas, ele ainda se reproduzia. A segunda metade do problema foi o fato de o .NET estar desativado em "Ativar ou desativar os recursos do Windows"

Bogdan Mates
fonte
0

Às vezes, se for um novo servidor, você precisará configurar ou instalar o recurso ASP.NET no IIS para poder ler seu arquivo web.config.

No meu caso, esse foi o motivo.

SanthoshM
fonte
0

No meu caso, eu estava tentando hospedar páginas de uma unidade mapeada (subst). O problema é que o subst foi executado em minha conta e o usuário do IIS não pode ver a mesma unidade

Dinesh Rajan
fonte
0

Dei permissão e usei o ICACLS.exe, mas não funcionou. Então mudei o caminho físico e funcionou com sucesso.

(IIS 8.5 do Windows 2012 R2)

Adem Aygun
fonte