IIS phàn nàn về một phần bị khóa - làm thế nào tôi có thể tìm ra nơi nó bị khóa?


54

Tôi có phần này trong web.config:

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

IIS7 gặp sự cố và phàn nàn về phần tự động:

Mô-đun nặc danhAuthenticationModule
Thông báo xác
thựcRequest Handler
Mã lỗi tĩnh 0x80070021
Lỗi cấu hình Phần cấu hình này không thể được sử dụng tại đường dẫn này. Điều này xảy ra khi phần bị khóa ở cấp độ cha. Khóa theo mặc định (overrideModeDefault = "Deny") hoặc được đặt rõ ràng bằng thẻ vị trí với overrideMode = "Deny" hoặc legacy allowOverride = "false".

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

Vì vậy, cách thông thường để giải quyết điều này là đi vào %windir%\system32\inetsrv\config\applicationHost.configvà mở khóa phần:

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

(cách khác, appcmd unlock config).

Điều kỳ lạ: Tôi đã làm điều đó và nó vẫn phàn nàn.

Tôi đã tìm Địa điểm (MVC là tên trang web của tôi, đó là gốc của tất cả các trang web tôi đang sử dụng):

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

Vẫn là nó nổ tung. Tôi hoang mang không biết tại sao điều này lại xảy ra. Tôi không thể xóa nó khỏi web.config, tôi muốn tìm vấn đề gốc.

Có cách nào để có được thông tin cụ thể từ IIS mà quy tắc cuối cùng đang từ chối tôi không?

Chỉnh sửa: Tôi đã có thể khắc phục điều này bằng cách sử dụng bảng điều khiển quản lý IIS7 bằng cách vào chính root (máy của tôi) và nhấp vào "Chỉnh sửa cấu hình" và mở khóa phần ở đó. Vẫn muốn biết liệu có cách nào tốt hơn không vì tôi không thể tìm thấy tệp mà nó thực sự sửa đổi.


Từ bộ nhớ, thông thường có một phần trong 500,19 cho bạn biết tập tin nào đang ở vị trí nào, ở phía dưới (tôi nghĩ)
TristanK

1
Điều này đã được trả lời rất tốt trên SO
paqogomez

Câu trả lời:


78

Đã giải quyết các bước này để khắc phục sự cố cho tôi:

  1. Mở trình quản lý IIS
  2. Nhấp vào tên máy chủ trong cây bên trái
  3. Cửa sổ bên phải, phần Quản lý, nhấp đúp vào Trình chỉnh sửa Cấu hình
  4. Ở trên cùng, chọn phần system.webServer/security/authentication/anonymousAuthentication
  5. Cửa sổ bên phải, nhấp vào Mở khóa Phần
  6. Ở trên cùng, chọn phần system.webServer/security/authentication/windowsAuthentication
  7. Cửa sổ bên phải, nhấp vào Mở khóa Phần

1
Cái này có tương đương PowerShell không? Tôi muốn có thể kịch bản này.
Pete Stensønes

Nếu bạn tìm thấy một cái, vui lòng gửi nó :)
tomfanning

Tôi sẽ, tôi đã hy vọng người khác đã biết làm thế nào.
Pete Stensønes

1
@ PeteStensønes Nó có! >%windir%\system32\inetsrv\appcmd.exe unlock config -section:system.webServer/security/authentication/windowsAuthentication
joacar

14

Điều này đã giải quyết lỗi của tôi trên Windows Server 2012, IIS 8.5. Nên làm việc cho các phiên bản khác quá.

  1. Chuyển đến Trình quản lý máy chủ , nhấp vào Thêm Vai trò và Tính năng
  2. Trong phần vai trò chọn: Máy chủ Web
  3. Trong phần phụ Bảo mật , hãy chọn mọi thứ (Tôi đã loại trừ thông báo, hạn chế IP và ủy quyền URL khi chúng tôi không sử dụng chúng)
  4. Trong mục Phát triển ứng dụng, chọn .NET Extensibility 4.5ASP>NET 4.5, cả hai mục ISAPI
  5. Trong Các tính năng phần chọn: NET 3.5, .NET 4.5,ASP.NET 4.5
  6. Trong Web server phần chọn: Web Server (all), Management Tools (IIS Management Console and Management Service),Windows

5

Khóa cấu hình có thể xảy ra tại:

  1. Applicationhost.config (chuỗi cấu hình: MÁY / WEBROOT / APPHOST)

  2. một tệp Web.config trang web (MÁY / WEBROOT / APPHOST / Tên trang web)

  3. Bất kỳ tệp ứng dụng web.config nào (MÁY / WEBROOT / APPHOST / Tên trang web / Tên ứng dụng)

Khóa một phần (phần: phần cấu hình IIS, ví dụ <asp>) cho phép bạn từ chối khả năng định cấu hình các cài đặt đó cho bất kỳ ai ở cấp thấp hơn trong cấu trúc phân cấp so với bạn.

Sử dụng điều khoản Phân quyền tính năng của GUI không sai và thực hiện một điều rất giống với những gì AppCMD làm, dưới vỏ bọc - đặt OverrideMode cho một phần nhất định trong <location>thẻ ở bất kỳ mức cấu hình nào bạn tập trung vào.

APPCMD có thể được sử dụng để mở khóa các tệp, nhưng chú ý đến nơi nó nói nó đang làm điều đó - nó không thông minh như GUI về điều này.

Thêm -commit:apphostđến hết bạn APPCMD UNLOCKtiêu lệnh Applicationhost.config, đó là các tập tin quan trọng cho IIS hoạt động (thay thế metabase từ phiên bản trước; lưu trữ tất cả các thiết lập trung nhưng cho phép ghi đè (nếu bạn làm) trong tập tin web.config).

Không có -commit: apphost, APPCMD sẽ nhắm mục tiêu điểm logic gần nhất cho tệp web.config - cho dù ở cấp độ trang web hoặc ứng dụng và cho biết nó đã thay đổi cài đặt bằng chuỗi cấu hình như bộ trên. (Ngoài ra: bạn vẫn có thể chỉ nhắm mục tiêu các cài đặt trong các trang web phụ, nhưng cam kết với apphost - nó sử dụng thẻ vị trí để thực hiện điều đó)

Vì vậy, nếu nó nói (diễn giải bộ nhớ) "Các thay đổi được cam kết với MÁY / WEBROOT / APPHOST", điều đó có nghĩa là cấp cao nhất của hệ thống phân cấp IIS.

Nếu nó nói "cam kết với trang web MÁY / WEBROOT / APPHOST / Dodgy", điều đó có nghĩa là nó đã tìm đường dẫn vật lý đằng sau Trang web Dodgy và viết một tệp web.config (hoặc cập nhật nó) ở vị trí đó.


3

Nếu bạn đang sử dụng IISExpress và Visual Studio 2015, phần applicationHost.confignày sẽ được lưu trữ $(solutionDir).vs\config\applicationhost.config(nhờ câu trả lời của Nime Cloud ).

Chỉ cần thay đổi overrideModeDefault="Allow"bất cứ nơi nào thích hợp.

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

1

Thử trong nhóm Applicaiton của bạn, Vô hiệu hóa các ứng dụng 32 bit hỗ trợ Trình quản lý IIS -> Nhóm ứng dụng -> chọn [AppPool của bạn] -> Cài đặt nâng cao -> Bật ứng dụng 32 bit - thay đổi thành 'Sai'


-2

Hãy xem IIS - phần cấu hình này không thể được sử dụng tại đường dẫn này (khóa cấu hình?)

Câu trả lời được chấp nhận hoạt động hoàn hảo với tôi trên Windows 10, nó hướng dẫn thực hiện như sau:

  • Nhấp vào "Nút bắt đầu"
  • trong hộp tìm kiếm, nhập "Bật hoặc tắt tính năng của windows"
  • trong cửa sổ tính năng, Nhấp vào: "Dịch vụ thông tin Internet"
  • Nhấp vào: "Dịch vụ web toàn cầu"
  • Nhấp vào: "Tính năng phát triển ứng dụng"
  • Kiểm tra (kích hoạt) các tính năng. Tôi đã kiểm tra tất cả trừ CGI.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.