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
Handler StaticFile
Код помилки 0x80070021
Config Error Цей розділ конфігурації не можна використовувати на цьому шляху. Це відбувається, коли розділ заблоковано на батьківському рівні. Блокування є або за замовчуванням (overrideModeDefault = "Заборонити"), або встановлено явно тегом локації з overrideMode = "Заборонити" або спадщиною дозволеноюOverride = "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).

Дивна річ: я це зробив, і досі скаржиться.

Я шукав місцеположення (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, я хочу знайти кореневу проблему.

Чи є спосіб отримати конкретну інформацію від IIS, яке правило зрештою мені заперечує?

Редагувати: мені вдалося виправити це за допомогою консолі управління IIS7, перейшовши до самого кореня (моя машина) і натиснувши "Редагувати конфігурацію" та розблокувати там розділ. Я все ж хотів би знати, чи є кращий спосіб, оскільки я не можу знайти файл, який він фактично модифікує.


З пам’яті зазвичай в розділі 500.19 є розділ, який повідомляє про те, який файл, у якому місці знаходиться проблема, внизу (я думаю)
TristanK

1
На це відповіли дуже добре на SO
paqogomez

Відповіді:


78

Опрацював ці кроки, які вирішили проблему для мене:

  1. Відкрийте менеджер IIS
  2. Клацніть ім’я сервера в дереві зліва
  3. Права панель, розділ Керування, двічі клацніть Редактор конфігурації
  4. Угорі виберіть розділ system.webServer/security/authentication/anonymousAuthentication
  5. На правій панелі натисніть Розблокувати розділ
  6. Угорі виберіть розділ system.webServer/security/authentication/windowsAuthentication
  7. На правій панелі натисніть Розблокувати розділ

1
Чи має це еквівалент PowerShell? Я хотів би мати можливість це сценарій.
Піт Стеншнес

Якщо ви знайдете його,
сміливо повідомте

Буду, я сподівався, що хтось інший уже вміє.
Піт Стеншнес

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 (config string: MACHINE / WEBROOT / APPHOST)

  2. файл веб-сайту Web.config (МАШИНА / WEBROOT / APPHOST / Ім'я веб-сайту)

  3. Будь-який файл web.config програми, який (МАШИНА / WEBROOT / APPHOST / Ім'я сайту / Назва програми)

Блокування розділу (розділ: розділ конфігурації IIS, наприклад <asp>) дозволяє відмовити у можливості налаштування цих параметрів будь-кому на нижчому рівні в ієрархії, ніж ви.

Використання функції делегування функцій GUI не помиляється, і робить дуже схоже на те, що робить AppCMD, під обкладинками - встановлює OverrideMode для певного розділу в <location>тезі на будь-якому рівні конфігурації, на якій ви зосереджені.

APPCMD можна використовувати для розблокування файлів, але зверніть увагу на те, де йдеться, що це робиться - це не так розумно, як GUI щодо цього.

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

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

Отже, якщо він сказав (перефразовуючи пам'ять) "Зміни, допущені до MACHINE / WEBROOT / APPHOST", це означало б верхній рівень ієрархії IIS.

Якщо в ньому написано "прихильний до веб-сайту MACHINE / WEBROOT / APPHOST / Dodgy", це означатиме, що він знайшов фізичний шлях за веб-сайтом Dodgy, і написав файл web.config (або оновив його) у цьому місці.


3

Якщо ви використовуєте IISExpress і Visual Studio 2015 року, то applicationHost.configзберігається в $(solutionDir).vs\config\applicationhost.config(завдяки німу Клауд відповіді ).

Просто міняйте, 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 Pool, вимкніть підтримку 32-бітних програм IIS Manager -> Пул додатків -> виберіть [Ваш AppPool] -> Додаткові налаштування -> Увімкніть 32-бітні програми - змініть його на "Невірно"


-2

Погляньте на IIS - цей розділ конфігурації не можна використовувати на цьому шляху (блокування конфігурації?)

Прийнята відповідь для мене відмінно працювала в Windows 10, вона вказує зробити наступне:

  • Натисніть кнопку "Пуск"
  • в полі пошуку введіть "Увімкнення та вимкнення функцій Windows"
  • у вікні функцій натисніть "Інтернет-інформаційні послуги"
  • Клацніть: "World Wide Web Services"
  • Клацніть: "Особливості розробки додатків"
  • Перевірте (увімкніть) функції. Я перевірив усіх, крім CGI.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.