IIS skarży się na zablokowaną sekcję - jak mogę dowiedzieć się, gdzie jest zablokowana?

54

Mam tę sekcję w moim pliku web.config:

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

IIS7 ulega awarii i skarży się na sekcję uwierzytelniania:

Moduł AnonymousAuthenticationModule
Notification AuthenticateRequest
Handler
Kod błędu pliku statycznego 0x80070021
Błąd konfiguracji W tej ścieżce nie można użyć tej sekcji konfiguracji. Dzieje się tak, gdy sekcja jest zablokowana na poziomie nadrzędnym. Blokowanie jest albo domyślnie (overrideModeDefault = „Odmów”), albo jawnie ustawione przez tag lokalizacji z overrideMode = „Odmów” lub starsze zezwalanieOverride = „false”.

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

Tak więc zwykłym sposobem rozwiązania tego jest wejście %windir%\system32\inetsrv\config\applicationHost.configi odblokowanie sekcji:

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

(alternatywnie appcmd unlock config).

Dziwna rzecz: zrobiłem to i wciąż narzeka.

Szukałem lokalizacji (MVC to nazwa mojej witryny, która jest głównym źródłem wszystkich witryn, z których korzystam):

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

Nadal się wysadza. Zastanawiam się, dlaczego tak się dzieje. Nie mogę go usunąć z pliku web.config, chcę znaleźć problem root.

Czy istnieje sposób na uzyskanie określonych informacji z IIS, która reguła ostatecznie mnie odmawia?

Edycja: Udało mi się to naprawić za pomocą konsoli zarządzania IIS7, przechodząc do samego katalogu głównego (mojej maszyny) i klikając „Edytuj konfigurację” i odblokowując tam sekcję. Nadal chciałbym wiedzieć, czy istnieje lepszy sposób, ponieważ nie mogę znaleźć pliku, który faktycznie modyfikuje.

Michael Stum
źródło
Z pamięci zwykle znajduje się sekcja w 500.19, która mówi, który plik, w której lokalizacji występuje problem, na dole (tak myślę)
TristanK
1
Odpowiedzi na to bardzo dobrze
udzielił

Odpowiedzi:

78

Opracowałem następujące kroki, które rozwiązują problem:

  1. Otwórz Menedżera IIS
  2. Kliknij nazwę serwera w drzewie po lewej stronie
  3. Panel po prawej stronie, sekcja Zarządzanie, kliknij dwukrotnie Edytor konfiguracji
  4. U góry wybierz sekcję system.webServer/security/authentication/anonymousAuthentication
  5. W prawym okienku kliknij opcję Odblokuj sekcję
  6. U góry wybierz sekcję system.webServer/security/authentication/windowsAuthentication
  7. W prawym okienku kliknij opcję Odblokuj sekcję
tomfanning
źródło
1
Czy to ma odpowiednik PowerShell? Chciałbym móc to napisać.
Pete Stensønes,
Jeśli znajdziesz, możesz go opublikować :)
tomfanning
Będę miał nadzieję, że ktoś już wiedział.
Pete Stensønes,
1
@ PeteStensønes It has! >%windir%\system32\inetsrv\appcmd.exe unlock config -section:system.webServer/security/authentication/windowsAuthentication
joacar
14

To rozwiązało mój błąd w systemie Windows Server 2012, IIS 8.5. Powinien działać również w przypadku innych wersji.

  1. Przejdź do Menedżera serwera , kliknij opcję Dodaj role i funkcje
  2. W sekcji roli wybierz: Serwer WWW
  3. W podsekcji Bezpieczeństwo wybierz wszystko (wykluczyłem skrót, ograniczenia adresów IP i autoryzację adresów URL, ponieważ ich nie używamy)
  4. W obszarze Application Development wybierz .NET Extensibility 4.5i ASP>NET 4.5oba wpisy ISAPI
  5. W mieście sekcja wyboru: NET 3.5, .NET 4.5,ASP.NET 4.5
  6. W serwerze WWW sekcji wyboru: Web Server (all), Management Tools (IIS Management Console and Management Service),Windows
Sanbuur Dahir Hersi
źródło
5

Blokowanie konfiguracji może nastąpić pod:

  1. Applicationhost.config (ciąg konfiguracji: MACHINE / WEBROOT / APPHOST)

  2. plik Web.config witryny (MACHINE / WEBROOT / APPHOST / Web Site Name)

  3. Dowolny plik web.config aplikacji, który (MACHINE / WEBROOT / APPHOST / Site Name / App Name)

Zablokowanie sekcji (sekcja: sekcja konfiguracji IIS, np. <asp>) Pozwala odmówić skonfigurowania tych ustawień każdemu na niższym poziomie w hierarchii niż ty.

Korzystanie z funkcji delegowania funkcji GUI nie jest złe i robi bardzo podobne do tego, co robi AppCMD, pod osłonami - ustawia OverrideMode dla danej sekcji w <location>znaczniku na dowolnym poziomie konfiguracji, na którym się koncentrujesz.

APPCMD może być używany do odblokowywania plików, ale zwróć uwagę na to, gdzie mówi, że to robi - nie jest tak inteligentny jak GUI w tym zakresie.

Dodanie -commit:apphostdo końca swoich APPCMD UNLOCKcelów dowodzenia ApplicationHost.config, co jest plik klucza do pracy IIS (zastępuje metabazę z wcześniejszymi wersjami; przechowuje wszystkie ustawienia scentralizowane ale pozwala przesłonięcia (jeśli nie) w plikach web.config).

Bez -commit: apphost, APPCMD będzie celować w najbliższe miejsce logiczne dla pliku web.config - czy to na poziomie witryny, czy aplikacji, i wskaże, że zmieniło to ustawienie za pomocą ciągu konfiguracyjnego takiego jak powyższy zestaw. (Poza tym: nadal możesz kierować reklamy tylko na ustawienia w podstronach, ale zatwierdzić apphost - do tego celu używa tagów lokalizacji)

Więc jeśli powie (parafraza pamięci) „Zmiany wprowadzone w MACHINE / WEBROOT / APPHOST”, oznaczałoby to najwyższy poziom hierarchii IIS.

Jeśli napisane jest „zaangażowany w MACHINE / WEBROOT / APPHOST / Dodgy Web Site”, oznaczałoby to, że przejrzał fizyczną ścieżkę za Dodgy Web Site i napisał plik web.config (lub zaktualizował go) w tej lokalizacji.

TristanK
źródło
3

Jeśli używasz IISExpress i Visual Studio 2015 roku applicationHost.configjest przechowywany w $(solutionDir).vs\config\applicationhost.config(dzięki nime cloud odpowiedzi ).

Po prostu zmień, overrideModeDefault="Allow"gdziekolwiek jest to właściwe.

<sectionGroup name="security">
    <section name="access" overrideModeDefault="Deny" />
    <section name="applicationDependencies" overrideModeDefault="Deny" />
    <sectionGroup name="authentication">
        <section name="anonymousAuthentication" overrideModeDefault="Allow" />
etc...
Marcos Dimitrio
źródło
1

Wypróbuj w swojej puli aplikacji, wyłącz obsługę 32-bitowych aplikacji Menedżer IIS -> Pule aplikacji -> wybierz [Twoja AppPool] -> Ustawienia zaawansowane -> Włącz aplikacje 32-bitowe - zmień na „Fałsz”

JohnR
źródło
-2

Spójrz na IIS - tej sekcji konfiguracji nie można użyć na tej ścieżce (blokowanie konfiguracji?)

Przyjęta odpowiedź działała idealnie dla mnie w systemie Windows 10, nakazuje wykonać następujące czynności:

  • Kliknij „przycisk Start”
  • w polu wyszukiwania wpisz „Włącz lub wyłącz funkcje systemu Windows”
  • w oknie funkcji kliknij: „Internetowe usługi informacyjne”
  • Kliknij: „Usługi WWW”
  • Kliknij: „Funkcje programowania aplikacji”
  • Sprawdź (włącz) funkcje. Sprawdziłem wszystko oprócz CGI.
Divi perdomo
źródło