IIS mengeluh tentang bagian yang terkunci - bagaimana saya bisa mengetahui di mana bagian itu terkunci?

54

Saya memiliki bagian ini di web.config saya:

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

IIS7 lumpuh dan mengeluh tentang bagian otentikasi:

Modul AnonymousAuthenticationModule
Notification AuthenticateRequest
Handler StaticFile
Error Code 0x80070021
Kesalahan Konfigurasi Bagian konfigurasi ini tidak dapat digunakan di jalur ini. Ini terjadi ketika bagian dikunci di tingkat induk. Penguncian secara default (overrideModeDefault = "Deny"), atau diatur secara eksplisit oleh tag lokasi dengan overrideMode = "Deny" atau warisan allowOverride = "false".

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

Jadi cara yang biasa untuk menyelesaikan ini adalah dengan masuk %windir%\system32\inetsrv\config\applicationHost.configdan membuka bagian:

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

(sebagai alternatif, appcmd unlock config).

Yang aneh: Saya sudah melakukan itu dan masih mengeluh.

Saya mencari Lokasi (MVC adalah nama situs web saya yang merupakan akar dari semua situs yang saya gunakan):

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

Masih meledak. Saya bingung mengapa ini terjadi. Saya tidak dapat menghapusnya dari web.config, saya ingin menemukan masalah root.

Apakah ada cara untuk mendapatkan informasi spesifik dari IIS yang aturannya pada akhirnya menyangkal saya?

Sunting: Saya dapat memperbaiki ini menggunakan konsol manajemen IIS7 dengan pergi ke root (mesin saya) dan mengklik "Edit Konfigurasi" dan membuka kunci bagian di sana. Masih saya ingin tahu apakah ada cara yang lebih baik karena saya tidak dapat menemukan file yang sebenarnya dimodifikasi.

Michael Stum
sumber
Dari memori, biasanya ada bagian di 500.19 yang memberi tahu Anda file mana di lokasi yang menjadi masalah, di bagian bawah (saya pikir)
TristanK
1
Ini telah dijawab dengan sangat baik pada SO
paqogomez

Jawaban:

78

Lakukan langkah-langkah berikut untuk memperbaiki masalah bagi saya:

  1. Buka IIS Manager
  2. Klik nama server di pohon di sebelah kiri
  3. Panel kanan, bagian Manajemen, klik dua kali Editor Konfigurasi
  4. Di bagian atas, pilih bagian system.webServer/security/authentication/anonymousAuthentication
  5. Panel kanan, klik Buka Bagian
  6. Di bagian atas, pilih bagian system.webServer/security/authentication/windowsAuthentication
  7. Panel kanan, klik Buka Bagian
Tomfanning
sumber
1
Apakah ini memiliki yang setara dengan PowerShell? Saya ingin bisa menulis skrip ini.
Pete Stensønes
Jika Anda menemukannya, jangan ragu untuk mempostingnya :)
tomfanning
Saya akan, saya berharap orang lain sudah tahu caranya.
Pete Stensønes
1
@ PeteStensønes Sudah! >%windir%\system32\inetsrv\appcmd.exe unlock config -section:system.webServer/security/authentication/windowsAuthentication
joacar
14

Ini menyelesaikan kesalahan saya pada Windows Server 2012, IIS 8.5. Seharusnya bekerja untuk versi lain juga.

  1. Buka Server Manager , klik tambahkan Peran dan Fitur
  2. Di bagian peran pilih: Server Web
  3. Di bawah Subbagian Keamanan pilih semuanya (Saya mengecualikan intisari, batasan IP, dan otorisasi URL karena kami tidak menggunakannya)
  4. Di bawah Pengembangan Aplikasi pilih .NET Extensibility 4.5dan ASP>NET 4.5, kedua entri ISAPI
  5. Dalam Fitur bagian pilih: NET 3.5, .NET 4.5,ASP.NET 4.5
  6. Di server Web bagian pilih: Web Server (all), Management Tools (IIS Management Console and Management Service),Windows
Sanbuur Dahir Hersi
sumber
5

Penguncian konfigurasi dapat terjadi di:

  1. Applicationhost.config (string config: MACHINE / WEBROOT / APPHOST)

  2. file Situs Web.config (MESIN / WEBROOT / APPHOST / Nama Situs Web)

  3. File web.config Aplikasi apa pun yang (MESIN / WEBROOT / APPHOST / Nama Situs / Nama Aplikasi)

Mengunci bagian (bagian: bagian konfigurasi IIS, mis. <asp>) Memungkinkan Anda menolak kemampuan untuk mengonfigurasi pengaturan itu kepada siapa pun di tingkat yang lebih rendah dalam hierarki daripada Anda.

Menggunakan fitur Delegasi Fitur GUI tidak salah, dan melakukan hal yang sangat mirip dengan apa yang AppCMD lakukan, di bawah penutup - menetapkan OverrideMode untuk bagian tertentu dalam <location>tag pada tingkat konfigurasi apa pun yang Anda fokuskan.

APPCMD dapat digunakan untuk membuka kunci file, tetapi perhatikan di mana dikatakan melakukannya - tidak sepintar GUI tentang ini.

Menambahkan -commit:apphostke akhir Anda APPCMD UNLOCKtarget perintah applicationHost.config, yang merupakan satu file kunci untuk IIS operasi (menggantikan metabase dari versi sebelumnya; menyimpan semua pengaturan terpusat tetapi memungkinkan menimpa (jika Anda melakukannya) dalam file web.config).

Tanpa -commit: apphost, APPCMD akan menargetkan tempat logis terdekat untuk file web.config - baik di tingkat situs atau aplikasi, dan menunjukkan itu mengubah pengaturan menggunakan string konfigurasi seperti set di atas. (Selain: Anda masih dapat menargetkan hanya pengaturan di sub situs web, tetapi komit ke apphost - ia menggunakan tag lokasi untuk melakukannya)

Jadi jika dikatakan (memori paraphrase) "Perubahan berkomitmen untuk MACHINE / WEBROOT / APPHOST", itu berarti tingkat atas hierarki IIS.

Jika dikatakan "berkomitmen untuk Situs Web MESIN / WEBROOT / APPHOST / Dodgy", itu berarti mencari jalan fisik di belakang Situs Web Dodgy, dan menulis file web.config (atau memperbaruinya) di lokasi itu.

TristanK
sumber
3

Jika Anda menggunakan IISExpress dan Visual Studio 2015, applicationHost.configdisimpan di $(solutionDir).vs\config\applicationhost.config(berkat jawaban Nime Cloud ).

Ubah saja overrideModeDefault="Allow"sesuai kebutuhan.

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

Coba di Applicaiton Pool Anda, Nonaktifkan aplikasi 32-bit mendukung IIS Manager -> Application Pool -> pilih [Your AppPool] -> Pengaturan Lanjut -> Aktifkan Aplikasi 32-Bit - ubah ke 'Salah'

JohnR
sumber
-2

Lihatlah IIS - bagian konfigurasi ini tidak dapat digunakan di jalur ini (penguncian konfigurasi?)

Jawaban yang diterima bekerja dengan baik untuk saya di Windows 10, itu memerintahkan untuk melakukan hal berikut:

  • Klik "tombol Mulai"
  • di kotak pencarian, masukkan "Menghidupkan atau mematikan fitur windows"
  • di jendela fitur, Klik: "Layanan Informasi Internet"
  • Klik: "Layanan World Wide Web"
  • Klik: "Fitur Pengembangan Aplikasi"
  • Periksa (aktifkan) fitur-fiturnya. Saya memeriksa semua kecuali CGI.
Divi perdomo
sumber