IIS บ่นเกี่ยวกับส่วนที่ถูกล็อค - ฉันจะรู้ได้อย่างไรว่ามันถูกล็อคอยู่ที่ไหน?


54

ฉันมีส่วนนี้ในเว็บของฉัน config:

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

IIS7 ขัดข้องและบ่นเกี่ยวกับส่วน autientication:

Module AnonymousAuthenticationModule
Notification AuthenticateRequest
Handler StaticFile
Error Code 0x80070021
ข้อผิดพลาดในการกำหนดค่าส่วนการกำหนดค่านี้ไม่สามารถใช้ที่พา ธ นี้ สิ่งนี้เกิดขึ้นเมื่อส่วนถูกล็อคในระดับผู้ปกครอง การล็อคเป็นค่าเริ่มต้น (overrideModeDefault = "Deny") หรือตั้งค่าอย่างชัดเจนโดยแท็กตำแหน่งที่มี overrideMode = "Deny" หรือ Legacy 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)

สิ่งประหลาด: ฉันทำไปแล้วและมันก็ยังบ่นอยู่

ฉันค้นหาสถานที่ (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 ที่เทียบเท่าหรือไม่ ฉันต้องการสคริปต์นี้
Pete Stensønes

หากคุณพบหนึ่งอย่าลังเลที่จะโพสต์ :)
tomfanning

ฉันจะฉันหวังว่าคนอื่นรู้วิธี
Pete Stensønes

1
@ PeteStensønesมันมี! >%windir%\system32\inetsrv\appcmd.exe unlock config -section:system.webServer/security/authentication/windowsAuthentication
joacar

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. ไฟล์ Site.config ของไซต์ (MACHINE / WEBROOT / APPHOST / ชื่อเว็บไซต์)

  3. ไฟล์ web.config ของแอปใด ๆ (MACHINE / WEBROOT / APPHOST / ชื่อไซต์ / ชื่อแอป)

การล็อคส่วน (ส่วน: ส่วนการกำหนดค่า IIS เช่น<asp>) ช่วยให้คุณปฏิเสธความสามารถในการกำหนดค่าการตั้งค่าเหล่านั้นให้กับทุกคนในระดับต่ำกว่าในลำดับชั้นมากกว่าที่คุณ

การใช้การมอบหมายคุณสมบัติของ GUI เป็นสิ่งที่ไม่ผิดและทำสิ่งที่คล้ายกับสิ่งที่ AppCMD ทำภายใต้หน้าปก - ตั้งค่า OverrideMode สำหรับส่วนที่กำหนดใน<location>แท็กในระดับใดก็ตามที่คุณกำหนดค่าไว้

สามารถใช้ APPCMD เพื่อปลดล็อกไฟล์ได้ แต่ต้องระวังว่ามันทำอะไรอยู่ - มันไม่ฉลาดเท่า GUI เกี่ยวกับเรื่องนี้

เพิ่ม-commit:apphostไปยังจุดสิ้นสุดของคุณAPPCMD UNLOCKเป้าหมายคำสั่ง Applicationhost.config ซึ่งเป็นไฟล์ที่สำคัญสำหรับการดำเนินงานของ IIS (แทน metabase จากรุ่นก่อนหน้านี้ที่ร้านค้าตั้งค่าส่วนกลางทั้งหมด แต่ช่วยให้การแทนที่ (ถ้าคุณทำ) ในไฟล์ web.config)

หากไม่มี -commit: apphost APPCMD จะกำหนดเป้าหมายเป็นจุดลอจิคัลที่ใกล้เคียงที่สุดสำหรับไฟล์ web.config - ไม่ว่าจะอยู่ที่ระดับไซต์หรือแอปและระบุว่ามีการเปลี่ยนแปลงการตั้งค่าโดยใช้สตริงการกำหนดค่าเช่นชุดด้านบน (นอกเหนือจาก: คุณยังคงสามารถกำหนดเป้าหมายเฉพาะการตั้งค่าในเว็บไซต์ย่อย แต่กระทำการกับโฮสต์ - โดยใช้แท็กตำแหน่งที่ตั้งเพื่อทำสิ่งนั้นให้สำเร็จ)

ดังนั้นหากมีการกล่าวว่า (การถอดความของหน่วยความจำ) "การเปลี่ยนแปลงที่กระทำกับเครื่อง / WEBROOT / APPHOST" นั่นหมายถึงระดับสูงสุดของลำดับชั้น IIS

หากมีข้อความว่า "มุ่งมั่นที่จะสร้างเว็บไซต์ MACHINOT / APPHOST / Dodgy" นั่นหมายความว่ามันค้นหาเส้นทางกายภาพหลังเว็บไซต์ Dodgy และเขียนไฟล์ web.config (หรืออัปเดต) ในตำแหน่งนั้น


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 Pool ของคุณปิดการใช้งานแอพพลิเคชั่น 32 บิตรองรับ IIS Manager -> แอพพลิเคชั่นพูล -> เลือก [AppPool ของคุณ] -> การตั้งค่าขั้นสูง -> เปิดใช้งานแอปพลิเคชัน 32 บิต - เปลี่ยนเป็น 'เท็จ'


-2

ลองดูที่ IIS - ส่วนกำหนดค่านี้ไม่สามารถใช้ได้ที่พา ธ นี้ (การล็อคการกำหนดค่า?)

คำตอบที่ยอมรับนั้นทำงานได้อย่างสมบูรณ์แบบสำหรับฉันบน Windows 10 มันแนะนำให้ทำสิ่งต่อไปนี้:

  • คลิก "ปุ่มเริ่ม"
  • ในช่องค้นหาให้ป้อน "เปิดหรือปิดคุณสมบัติหน้าต่าง"
  • ในหน้าต่างคุณสมบัติคลิก: "Internet Information Services"
  • คลิก: "บริการเวิลด์ไวด์เว็บ"
  • คลิก: "คุณสมบัติการพัฒนาแอปพลิเคชัน"
  • ตรวจสอบ (เปิดใช้งาน) คุณสมบัติ ฉันตรวจสอบทั้งหมดยกเว้น CGI
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.