IIS жалуется на заблокированный раздел - как я могу узнать, где он заблокирован?

54

У меня есть этот раздел в моем web.config:

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

IIS7 падает и жалуется на раздел аутентификации:

Модуль AnonymousAuthenticationModule
Notification AuthenticateRequest
Обработчик StaticFile
Error Code 0x80070021
Ошибка конфигурации Этот раздел конфигурации не может использоваться по этому пути. Это происходит, когда раздел заблокирован на родительском уровне. Блокировка либо по умолчанию (overrideModeDefault = "Deny"), либо устанавливается явно с помощью тега местоположения с помощью overrideMode = "Deny" или устаревшего allowOverride = "false".

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

Таким образом, обычный способ решить эту проблему - перейти в %windir%\system32\inetsrv\config\applicationHost.configраздел и разблокировать его:

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

(альтернативно appcmd unlock config).

Странная вещь: я сделал это, и он все еще жалуется.

Я искал Locations (MVC - это название моего сайта, которое является корнем всех сайтов, которые я использую):

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

Все еще это взрывается. Я озадачен тем, почему это происходит. Я не могу удалить его из web.config, я хочу найти проблему root.

Есть ли способ получить конкретную информацию от IIS, какое правило в конечном итоге мне отказывает?

Изменить: я смог исправить это с помощью консоли управления IIS7, перейдя в самый корень (мой компьютер) и нажав «Изменить конфигурацию» и разблокировав там раздел. Тем не менее, я хотел бы знать, есть ли лучший способ, так как я не могу найти файл, который он на самом деле изменяет.

Майкл Стум
источник
Из памяти обычно есть раздел в 500.19, который сообщает вам, какой файл и в каком месте идет речь, внизу (я думаю)
TristanK
1
На этот вопрос очень хорошо ответили на SO
paqogomez

Ответы:

78

Разработал эти шаги, которые решают проблему для меня:

  1. Открыть IIS Manager
  2. Нажмите на имя сервера в дереве слева
  3. Правая панель, раздел «Управление», дважды щелкните «Редактор конфигурации»
  4. Вверху выберите раздел system.webServer/security/authentication/anonymousAuthentication
  5. Правая панель, нажмите Разблокировать раздел
  6. Вверху выберите раздел system.webServer/security/authentication/windowsAuthentication
  7. Правая панель, нажмите Разблокировать раздел
tomfanning
источник
1
Имеет ли это эквивалент PowerShell? Я хотел бы иметь возможность написать это.
Пит Стенсонес
Если вы найдете один, не стесняйтесь опубликовать его :)
tomfanning
Я буду, я надеялся, кто-то еще уже знал, как.
Пит Стенсонес
1
@ PeteStensønes Это имеет! >%windir%\system32\inetsrv\appcmd.exe unlock config -section:system.webServer/security/authentication/windowsAuthentication
Джоакар
14

Это решило мою ошибку на Windows Server 2012, IIS 8.5. Должно работать и для других версий.

  1. Зайдите в Диспетчер серверов , нажмите Добавить роли и компоненты
  2. В разделе ролей выберите: Веб-сервер
  3. В разделе « Безопасность » выберите все (я исключил дайджест, ограничения IP и авторизацию URL, поскольку мы их не используем)
  4. В разделе Разработка приложений выберите .NET Extensibility 4.5и ASP>NET 4.5обе записи ISAPI.
  5. В Характеристики секции выберите: NET 3.5, .NET 4.5,ASP.NET 4.5
  6. В веб - сервере раздела выберите: Web Server (all), Management Tools (IIS Management Console and Management Service),Windows
Санбуур Дахир Херси
источник
5

Блокировка конфигурации может происходить при:

  1. Applicationhost.config (строка конфигурации: MACHINE / WEBROOT / APPHOST)

  2. файл Web.config сайта (MACHINE / WEBROOT / APPHOST / Имя веб-сайта)

  3. Любой файл web.config приложения, который (MACHINE / WEBROOT / APPHOST / Имя сайта / Имя приложения)

Блокировка раздела (например, раздел «Конфигурация IIS» <asp>) позволяет запретить настройку этих параметров кому-либо на более низком уровне иерархии, чем вы.

Использование функции делегирования графического интерфейса не является неправильным и делает то же самое, что и AppCMD, под обложками - устанавливает OverrideMode для данного раздела в <location>теге на любом уровне конфигурации, на котором вы сосредоточены.

APPCMD можно использовать для разблокировки файлов, но обратите внимание на то, где говорится, что он это делает - он не такой умный, как GUI по этому поводу.

Добавление -commit:apphostк концу вашей APPCMD UNLOCKкоманды целей Applicationhost.config, что является ключевым файлом для работы IIS (заменяет метабазу от более ранних версий, хранит все централизованные настройки , но позволяет переопределение (если вы делаете) в файлах web.config).

Без -commit: apphost APPCMD нацелится на ближайшее логическое место для файла web.config - будь то на уровне сайта или приложения и укажет, что он изменил настройку, используя строку конфигурации, подобную вышеприведенному набору. (Кроме того: вы все еще можете настроить таргетинг только на настройки на дополнительных веб-сайтах, но зафиксировать для apphost - для этого используются теги местоположения)

Так что если бы он сказал (перефразируя память) «Изменения, внесенные в MACHINE / WEBROOT / APPHOST», это означало бы верхний уровень иерархии IIS.

Если он говорит «совершено на MACHINE / WEBROOT / APPHOST / Dodgy Web Site», это будет означать, что он посмотрел физический путь за Dodgy Web Site и написал файл web.config (или обновил его) в этом месте.

TristanK
источник
3

Если вы используете IISExpress и Visual Studio 2015, они applicationHost.configхранятся в $(solutionDir).vs\config\applicationhost.config(благодаря ответу Nime Cloud ).

Просто измените, overrideModeDefault="Allow"где это уместно.

<sectionGroup name="security">
    <section name="access" overrideModeDefault="Deny" />
    <section name="applicationDependencies" overrideModeDefault="Deny" />
    <sectionGroup name="authentication">
        <section name="anonymousAuthentication" overrideModeDefault="Allow" />
etc...
Маркос Димитрио
источник
1

Попробуйте в пуле Applicaiton отключить поддержку IIS Manager для 32-разрядных приложений -> Пулы приложений -> выберите [Ваш AppPool] -> Расширенные настройки -> Включить 32-разрядные приложения - измените значение на «False»

JohnR
источник
-2

Взгляните на IIS - этот раздел конфигурации нельзя использовать по этому пути (блокировка конфигурации?)

Принятый ответ отлично сработал для меня в Windows 10, он дает указания сделать следующее:

  • Нажмите кнопку «Пуск»
  • в поле поиска введите «Включить или отключить функции Windows»
  • в окне функций нажмите: «Информационные службы Интернета»
  • Нажмите: "Услуги всемирной паутины"
  • Нажмите: «Особенности разработки приложений»
  • Проверьте (включите) функции. Я проверил все, кроме CGI.
Divi Perdomo
источник