O IIS reclama de uma seção bloqueada - como posso descobrir onde está bloqueada?

54

Eu tenho esta seção no meu web.config:

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
    <security>
        <authentication>
            <anonymousAuthentication enabled="true" />
            <windowsAuthentication enabled="true" />
        </authentication>
    </security>
</system.webServer>

O IIS7 trava e reclama sobre a seção de autenticação:

Módulo AnonymousAuthenticationModule
Notification
Manipulador AuthenticateRequest StaticFile
Código de erro 0x80070021
Erro de configuração Esta seção de configuração não pode ser usada neste caminho. Isso acontece quando a seção está bloqueada no nível pai. O bloqueio é por padrão (overrideModeDefault = "Negar") ou configurado explicitamente por uma tag de local com overrideMode = "Negar" ou pelo legado allowOverride = "false".

Config Source  
   69:  <authentication>
   70:    <anonymousAuthentication enabled="true" />

Portanto, a maneira usual de resolver isso é entrar %windir%\system32\inetsrv\config\applicationHost.confige desbloquear a seção:

    <sectionGroup name="system.webServer">
        <sectionGroup name="security">
            <section name="access" overrideModeDefault="Deny" />
            <section name="applicationDependencies" overrideModeDefault="Deny" />
            <sectionGroup name="authentication">
                <section name="anonymousAuthentication" overrideModeDefault="Allow" />
                <section name="basicAuthentication" overrideModeDefault="Allow" />
                <section name="clientCertificateMappingAuthentication" overrideModeDefault="Allow" />
                <section name="digestAuthentication" overrideModeDefault="Allow" />
                <section name="iisClientCertificateMappingAuthentication" overrideModeDefault="Allow" />
                <section name="windowsAuthentication" overrideModeDefault="Allow" />
            </sectionGroup>

(alternativamente appcmd unlock config).

O estranho: eu fiz isso e ainda reclama.

Procurei locais (MVC é o nome do meu site que é a raiz de todos os sites que estou usando):

<location path="MVC" overrideMode="Allow">
    <system.webServer overrideMode="Allow">
        <security overrideMode="Allow">
            <authentication overrideMode="Allow">
                <windowsAuthentication enabled="true" />
                <anonymousAuthentication enabled="true" />
            </authentication>
        </security>
    </system.webServer>
</location>

Ainda explode. Estou confuso sobre o porquê disso acontecer. Não consigo removê-lo do web.config, quero encontrar o problema raiz.

Existe uma maneira de obter informações específicas do IIS, que regra está me negando?

Editar: Consegui consertar isso usando o console de gerenciamento do IIS7, indo até a raiz (minha máquina) e clicando em "Editar configuração" e desbloqueando a seção lá. Ainda assim, gostaria de saber se existe uma maneira melhor, pois não consigo encontrar o arquivo que ele realmente modifica.

Michael Stum
fonte
De memória, há normalmente uma seção no 500.19 que lhe diz qual arquivo no qual o local que está em questão, no fundo (eu acho)
TristanK
11
Isso foi respondido muito bem em SO
paqogomez 10/09/2015

Respostas:

78

Resolvemos estas etapas que corrigem o problema para mim:

  1. Abra o Gerenciador do IIS
  2. Clique no nome do servidor na árvore à esquerda
  3. Painel direito, seção Gerenciamento, clique duas vezes em Editor de Configuração
  4. No topo, escolha a seção system.webServer/security/authentication/anonymousAuthentication
  5. Painel direito, clique em Desbloquear seção
  6. No topo, escolha a seção system.webServer/security/authentication/windowsAuthentication
  7. Painel direito, clique em Desbloquear seção
tomfanning
fonte
11
Isso tem um equivalente do PowerShell? Eu gostaria de poder escrever isso.
Pete Stensønes
Se você encontrar um, fique à vontade para postá-lo :)
tomfanning
Eu vou, eu esperava que alguém já soubesse.
Pete Stensønes
11
@ PeteStensønes Tem! >%windir%\system32\inetsrv\appcmd.exe unlock config -section:system.webServer/security/authentication/windowsAuthentication
joacar
14

Isso resolveu meu erro no Windows Server 2012, IIS 8.5. Também deve funcionar para outras versões.

  1. Vá para o Gerenciador do Servidor , clique em Adicionar Funções e Recursos
  2. Na seção funções, escolha: Servidor Web
  3. Na subseção Segurança , escolha tudo (excluí o resumo, restrições de IP e autorização de URL, pois não os usamos)
  4. Em Desenvolvimento de aplicativos, escolha .NET Extensibility 4.5e ASP>NET 4.5, ambas as entradas ISAPI
  5. No Features seção escolher: NET 3.5, .NET 4.5,ASP.NET 4.5
  6. No servidor Web seção escolher: Web Server (all), Management Tools (IIS Management Console and Management Service),Windows
Sanbuur Dahir Hersi
fonte
5

O bloqueio da configuração pode ocorrer em:

  1. Applicationhost.config (string de configuração: MACHINE / WEBROOT / APPHOST)

  2. um arquivo Web.config do Site (MACHINE / WEBROOT / APPHOST / Nome do Site)

  3. Qualquer arquivo web.config do aplicativo que (MACHINE / WEBROOT / APPHOST / Nome do site / Nome do aplicativo)

Bloquear uma seção (seção: seção de configuração do IIS, por exemplo <asp>) permite negar a capacidade de definir essas configurações para qualquer pessoa em um nível inferior na hierarquia que você.

O uso da delegação de recursos da GUI não está errado e faz uma coisa muito semelhante ao que o AppCMD faz, oculto - define OverrideMode para uma determinada seção em uma <location>tag em qualquer nível de configuração em que você esteja focado.

O APPCMD pode ser usado para desbloquear arquivos, mas preste atenção no local em que ele está fazendo - não é tão inteligente quanto a GUI sobre isso.

A adição -commit:apphostao final do seu APPCMD UNLOCKcomando tem como destino Applicationhost.config, que é o arquivo-chave da operação do IIS (substitui a metabase de versões anteriores; armazena todas as configurações centralizadas, mas permite substituições (se você o fizer) nos arquivos web.config).

Sem -commit: apphost, o APPCMD terá como alvo o ponto lógico mais próximo de um arquivo web.config - seja no nível do site ou do aplicativo, e indica que foi alterada a configuração usando uma cadeia de configuração como a definida acima. (Além disso: você ainda pode segmentar apenas as configurações nos sub sites, mas comprometa-se com o apphost - ele usa tags de localização para fazer isso)

Portanto, se disser (paráfrase de memória) "Alterações confirmadas em MACHINE / WEBROOT / APPHOST", isso significaria o nível superior da hierarquia do IIS.

Se ele diz "comprometido com o site MACHINE / WEBROOT / APPHOST / Dodgy", isso significa que procurou o caminho físico por trás do site Dodgy e escreveu um arquivo web.config (ou atualizou) nesse local.

TristanK
fonte
3

Se você estiver usando o IISExpress e o Visual Studio 2015, o arquivo applicationHost.configserá armazenado $(solutionDir).vs\config\applicationhost.config(graças à resposta da Nime Cloud ).

Apenas mude overrideModeDefault="Allow"sempre que apropriado.

<sectionGroup name="security">
    <section name="access" overrideModeDefault="Deny" />
    <section name="applicationDependencies" overrideModeDefault="Deny" />
    <sectionGroup name="authentication">
        <section name="anonymousAuthentication" overrideModeDefault="Allow" />
etc...
Marcos Dimitrio
fonte
1

Tente em seu pool de aplicativos, desabilite o suporte a aplicativos de 32 bits Gerenciador do IIS -> pools de aplicativos -> selecione [Your AppPool] -> configurações avançadas -> ativar aplicativos de 32 bits - altere para 'False'

JohnR
fonte
-2

Dê uma olhada no IIS - esta seção de configuração não pode ser usada neste caminho (bloqueio de configuração?)

A resposta aceita funcionou perfeitamente para mim no Windows 10, ele instrui a fazer o seguinte:

  • Clique no botão "Iniciar"
  • na caixa de pesquisa, digite "Ativar ou desativar recursos do Windows"
  • na janela de recursos, clique em: "Internet Information Services"
  • Clique em: "Serviços da World Wide Web"
  • Clique em: "Recursos de desenvolvimento de aplicativos"
  • Marque (ative) os recursos. Eu verifiquei tudo, menos CGI.
Divi perdomo
fonte