IIS - 401.3 - ไม่ได้รับอนุญาต


96

ฉันกำลังพยายามเริ่มต้นใช้งาน IIS ฉันสร้างไซต์ใหม่บนตัวจัดการ IIS แมปไปยังโฟลเดอร์บนระบบไฟล์ของฉันและเพิ่ม index.html ลงในโฟลเดอร์ ฉันได้ตั้งค่าพอร์ตเป็น 85 สำหรับไซต์นี้ เมื่อฉันพยายามเข้าถึงhttp://localhost:85/index.htmlฉันได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้:

401.3 - unathorized - คุณไม่มีสิทธิ์ดูไดเร็กทอรีหรือเพจนี้เนื่องจากการกำหนดค่ารายการควบคุมการเข้าถึง (ACL) หรือการตั้งค่าการเข้ารหัสสำหรับทรัพยากรนี้บนเว็บเซิร์ฟเวอร์

ฉันให้สิทธิ์การเข้าถึงแบบอ่านแก่ทุกคนในโฟลเดอร์และลองอีกครั้ง จากนั้นฉันสามารถเข้าถึงหน้านี้ได้

จากนั้นฉันเปรียบเทียบคุณสมบัติของโฟลเดอร์ของฉันกับ wwwroot ฉันพบว่า wwwroot มีสิทธิ์อ่านบน IIS_IUSRS ... เมื่อฉันทำเช่นเดียวกันในโฟลเดอร์ของฉันและลองอีกครั้งฉันได้รับข้อผิดพลาดข้างต้นอีกครั้ง ฉันตรวจสอบว่าการเข้าถึงแบบไม่ระบุชื่อถูกเปิดใช้งานโดยค่าเริ่มต้น แต่ฉันยังคงได้รับข้อผิดพลาดนี้

ทำไมสิ่งนี้ถึงเกิดขึ้น? วิธีที่ถูกต้องในการแก้ไขปัญหาคืออะไร?

คำตอบ:


176

ฉันต่อสู้กับปัญหาเดียวกันนี้มาหลายวันแล้ว สามารถแก้ไขได้โดยการแก้ไขคุณสมบัติการเข้าถึงของผู้ใช้ด้านความปลอดภัยของโฟลเดอร์ระบบไฟล์ที่ไซต์ของคุณถูกแมป แต่ IIS_IUSRS ไม่ใช่บัญชีเดียวที่คุณต้องอนุญาต

  • ในคอนโซลการจัดการ IIS ในส่วนการตรวจสอบสิทธิ์ของการกำหนดค่าไซต์ของคุณให้แก้ไขบรรทัด "การตรวจสอบความถูกต้องแบบไม่ระบุตัวตน" และตรวจสอบบัญชีที่ตั้งค่าเป็น "ผู้ใช้เฉพาะ" (ของฉันคือ IUSR)
  • ให้สิทธิ์ในการอ่านและดำเนินการในโฟลเดอร์ของไซต์ของคุณแก่บัญชีที่ระบุว่าเป็นผู้ใช้ที่ระบุ

หรือ

  • ในคอนโซลการจัดการ IIS ในส่วนการตรวจสอบสิทธิ์ของการกำหนดค่าไซต์ของคุณให้แก้ไขบรรทัด "การพิสูจน์ตัวตนแบบไม่ระบุตัวตน" โดยเลือก "ข้อมูลประจำตัวของกลุ่มแอปพลิเคชัน" แทน "ผู้ใช้เฉพาะ"

6
ฉันพบว่า anon authent ที่มี "Application Pool Identity" ใช้งานได้ แต่ไม่สามารถใช้งานได้กับ IUSR ด้วยเหตุผลบางประการ ขอบคุณ.
fortboise

5
ตรรกะเบื้องหลังคือโดยค่าเริ่มต้นไซต์ใช้การรับรองความถูกต้องแบบไม่ระบุตัวตนและ IUSR คือบัญชีที่ไม่ระบุชื่อ ดังนั้น IIS จึงใช้บัญชี IUSR เพื่อเข้าถึงระบบไฟล์ (ทางกายภาพของเว็บไซต์) ซึ่งอาจไม่ได้ผลเสมอไป (เนื่องจากระบบไฟล์จำนวนมากของคุณไม่ยอมรับ IUSR) นั่นคือสาเหตุของ 401.3 โดยการเปลี่ยนการเข้าถึงระบบไฟล์ (อนุญาตให้บัญชีนั้นเข้าถึงไฟล์) หรือเปลี่ยนบัญชีที่ไม่ระบุชื่อให้เป็นข้อมูลประจำตัวพูล (ข้อมูลประจำตัวพูลอยู่ใน IIS_IUSRS ซึ่งโดยปกติจะมีสิทธิ์เข้าถึงไฟล์) IIS ควรมีสิทธิ์เพียงพอในการเข้าถึงไฟล์
Lex Li

61

นี่คือสิ่งที่ใช้ได้ผลสำหรับฉัน

  1. ตั้งค่าข้อมูลประจำตัวพูลแอพเป็นบัญชีที่สามารถกำหนดสิทธิ์ให้กับโฟลเดอร์
  2. ตรวจสอบให้แน่ใจว่าไดเร็กทอรีต้นทางและไฟล์ที่เกี่ยวข้องทั้งหมดได้รับสิทธิ์ในการอ่านไฟล์ไปยังแอคเคาต์ที่กำหนดให้กับคุณสมบัติเอกลักษณ์ของพูลแอพ
  3. ใน IIS ที่โหนดรูทของเซิร์ฟเวอร์ตั้งค่าผู้ใช้ที่ไม่ระบุชื่อเพื่อสืบทอดจากเอกลักษณ์ของพูลแอป (นี่คือส่วนที่ฉันต่อสู้)

ในการตั้งค่าไม่ระบุชื่อเซิร์ฟเวอร์ที่จะสืบทอดจากเอกลักษณ์พูลของแอปให้ทำดังต่อไปนี้ ..

  • เปิดตัวจัดการ IIS (inetmgr)
  • ในบานหน้าต่างด้านซ้ายเลือกโหนดรูท (ชื่อโฮสต์เซิร์ฟเวอร์)
  • ในบานหน้าต่างตรงกลางเปิดแอพเพล็ต 'Authentication'
  • ไฮไลต์ 'การรับรองความถูกต้องโดยไม่ระบุชื่อ'
  • ในบานหน้าต่างด้านขวาให้เลือก 'แก้ไข ... ' (ควรเปิดกล่องโต้ตอบ)
  • เลือก 'Application pool identity'

9
# 3) แก้ไขปัญหาของฉัน: ใน IIS ที่โหนดรากของเซิร์ฟเวอร์ตั้งค่าผู้ใช้ที่ไม่ระบุชื่อเพื่อสืบทอดจากเอกลักษณ์ของพูลแอป (นี่คือส่วนที่ฉันต่อสู้)
ราวีราม

ฉันรู้ว่าคุณไม่ควรเขียนความคิดเห็น "ขอบคุณ" แต่ฉันรู้สึกว่าต้องแสดงความขอบคุณ ไม่มีทางที่ฉันจะคิดออก
Jonny Cook

@RaviRam: โปรดอธิบายขั้นตอนที่คุณทำตาม ทีละขั้นตอนในฐานะผู้เริ่มต้น คุณหมายถึงอะไรโดย "n IIS ที่โหนดรูทของเซิร์ฟเวอร์ตั้งค่าผู้ใช้ที่ไม่ระบุชื่อเพื่อสืบทอดจากข้อมูลประจำตัวแอปพูล" โปรดช่วยด้วย
Unbreakable

@RaviRam - รันคำสั่ง "inetmgr.exe" และหน้าจอการดูแลระบบ IIS จะปรากฏขึ้น จากนี้ให้ทำตามขั้นตอนที่ระบุไว้ในคำตอบของฉัน คุณอาจต้องเรียกใช้คำสั่งในฐานะผู้ดูแลระบบ msdn.microsoft.com/en-us/library/bb763170.aspx
barrypicker

ดังที่ได้กล่าวไว้ในคำตอบอื่นฉันพบว่าคุณไม่จำเป็นต้องเปลี่ยนการตั้งค่า anon auth ที่ระดับรูท - คุณสามารถเปลี่ยนการตั้งค่านั้นที่ไซต์หรือระดับไดเรกทอรีเสมือนได้เช่นกัน
jaycer

17

TL; DR;

ในกรณีส่วนใหญ่การอนุญาตให้เข้าถึงบัญชีต่อไปนี้ (หนึ่ง | ทั้งสอง) จะเพียงพอ:

  1. IIS AppPool \ DefaultAppPool
  2. IUSR

ด้วยสิทธิ์การเข้าถึง :

  1. อ่านและดำเนินการ
  2. แสดงรายการเนื้อหาของโฟลเดอร์
  3. อ่าน

แค่นั้นแหละ!

อ่านคำอธิบายโดยละเอียดเพิ่มเติม ...


  1. เปิด IIS และเลือกโปรแกรมของคุณ
  2. ที่ด้านขวาคลิกที่รับรองความถูกต้อง
  3. เลือก "การรับรองความถูกต้องแบบไม่ระบุตัวตน " ที่นี่
  4. กล่องโต้ตอบต่อไปนี้จะปรากฏขึ้น

ป้อนคำอธิบายภาพที่นี่

ให้สิทธิ์เข้าถึง ACL ของโฟลเดอร์เว็บแอปพลิเคชันขึ้นอยู่กับสิ่งที่เลือกในรูปด้านบน:

  • ผู้ใช้เฉพาะ : ให้สิทธิ์การเข้าถึงสำหรับทั้งสองIUSR(ในกรณีของฉัน) +IIS AppPool\DefaultAppPool
  • เอกลักษณ์ของพูลแอปพลิเคชัน : ให้สิทธิ์การเข้าถึงสำหรับIIS AppPool\DefaultAppPoolเท่านั้น

IIS AppPool\DefaultAppPool บัญชีเป็นบัญชี AppPool เริ่มต้นสำหรับเว็บแอปพลิเคชัน IIS ใหม่หากคุณตั้งค่าบัญชีแบบกำหนดเองให้ใช้บัญชีที่กำหนดเอง


ให้สิทธิ์ต่อไปนี้แก่บัญชี:

  1. Read & Execute
  2. List folder contents
  3. Read

ป้อนคำอธิบายภาพที่นี่


13

เนื่องจากคุณกำลังจัดการกับเนื้อหาคงที่ ...

ในโฟลเดอร์ที่ทำหน้าที่เป็นรากของเว็บไซต์ของคุณหากคุณคลิกขวา> คุณสมบัติ> ความปลอดภัย "ผู้ใช้" จะปรากฏในรายการหรือไม่ หากไม่คลิก "เพิ่ม ... " และพิมพ์ลงไปอย่าลืมคลิก "นำไปใช้" เมื่อดำเนินการเสร็จ


3

ลองใช้วิธีนี้:

/server/38222/iis-7-5-windows-7-http-error-401-3- ไม่ได้รับอนุญาต

ตรวจสอบด้วยว่าผู้ใช้ที่เรียกใช้ IIS AppPool มีสิทธิ์อ่านโฟลเดอร์ / ไฟล์นั้นหรือไม่

ดูสิ่งนี้:

http://www.iis.net/learn/manage/configuring-security/application-pool-identities

ดูสิ่งนี้ด้วย:

http://www.iis.net/learn/get-started/planning-for-security/understand-built-in-user-and-group-accounts-in-iis


1

ในกรณีที่มีใครพบปัญหานี้ ฉันแก้ไขปัญหาในทุกขั้นตอนเหล่านี้และปรากฎว่าเป็นเพราะฉันคลายซิปไฟล์บางไฟล์จาก MAC โดย Microsoft โดยอัตโนมัติโดยไม่มีการแจ้งเตือนใด ๆ เข้ารหัสไฟล์ หลังจากพยายามตั้งค่าสิทธิ์โฟลเดอร์หลายชั่วโมงฉันเข้าไปและเห็นชื่อไฟล์เป็นสีเขียวซึ่งหมายความว่าไฟล์ถูกเข้ารหัสและ IIS จะแสดงข้อผิดพลาดเดียวกันแม้ว่าสิทธิ์ของโฟลเดอร์จะถูกต้องก็ตาม


ใช้เวลากับปัญหาเดียวกันนี้มากเกินไป เพียงแค่ที่นี่เพื่อยอมรับ ฉันลงเอยด้วยการค้นหา IIS และการเข้าถึง EFS ที่นี่ แต่คำตอบของคุณทำให้ฉันเข้าใจถึงสาเหตุของปัญหาของฉันนั่นคือไฟล์ zip ที่ขยายจากเครื่อง Mac สถานการณ์เฉพาะของฉันเป็นปัญหาที่ ASP.NET Core ที่โฮสต์ในกระบวนการบน IIS ไม่เปิดขึ้น - ไม่มีข้อความบันทึกเหตุการณ์ไม่มีบันทึก stdout ฯลฯ การเข้าถึงผ่าน localhost ทำให้เกิดข้อความแสดงข้อผิดพลาดว่า web.config ไม่ถูกต้อง แต่ไม่แสดงแหล่งที่มา เห็นได้ชัดว่าไฟล์สามารถเข้าถึงได้ แต่ไม่สามารถอ่านเนื้อหาได้
แอรอน

1
  1. สร้างไซต์ใหม่คลิกขวาที่โฟลเดอร์ Sites จากนั้นคลิกเพิ่มไซต์
  2. ป้อนชื่อไซต์
  3. เลือกเส้นทางทางกายภาพ
  4. เลือกที่อยู่ Ip
  5. เปลี่ยนพอร์ต
  6. คลิกตกลง
  7. ไปที่ Application Pools
  8. เลือกไซต์พูล
  9. คลิกขวาที่คลิก Advance Settings
  10. เปลี่ยน. Net CLR Version เป็น "No Manage Code"
  11. เปลี่ยน Identity เป็น "ApplicationPoolIdentity"
  12. ไปที่หน้าแรกของไซต์จากนั้นคลิก "การรับรองความถูกต้อง"
  13. คลิกขวาไปที่ AnonymousAuthentication จากนั้นคลิก "แก้ไข"
  14. เลือก Application Pool Identity
  15. คลิกตกลง
  16. ตูม!

สำหรับเส้นทางให้เพิ่ม web.config

<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="React Routes" stopProcessing="true">
                    <match url=".*" />
                    <conditions logicalGrouping="MatchAll">
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                        <add input="{REQUEST_URI}" pattern="^/(api)" negate="true" />
                    </conditions>
                    <action type="Rewrite" url="/" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

0

ปัญหาอีกประการหนึ่งที่อาจเกิดขึ้นเกี่ยวกับการรับที่ไม่ได้รับอนุญาตนั้นเกี่ยวข้องกับผู้ให้บริการที่ใช้ในการตั้งค่าการตรวจสอบสิทธิ์จาก IIS ในกรณีของฉันฉันประสบปัญหานั้นหากฉันตั้งค่าผู้ให้บริการการรับรองความถูกต้องของ Windows เป็น "เจรจา" หลังจากที่ฉันเลือกตัวเลือก "NTLM" การเข้าถึงได้รับอนุญาต

ข้อมูลเพิ่มเติมเกี่ยวกับผู้ให้บริการรับรองความถูกต้อง

https://docs.microsoft.com/en-us/iis/configuration/system.webserver/security/authentication/windowsauthentication/providers/



0

หากคุณกำลังทำงานกับการรับรองความถูกต้องของ Application Pool (แทนที่จะเป็น IUSR) ซึ่งคุณควรทำรายการตรวจสอบโดย Jean Sunนี้เป็นสิ่งที่ดีที่สุดที่ฉันสามารถหาได้เพื่อจัดการกับข้อผิดพลาด 401 ใน IIS:


เปิดตัวจัดการ IIS ไปที่เว็บไซต์หรือโฟลเดอร์แอปพลิเคชันของคุณที่ไซต์ถูกปรับใช้

  1. เปิดการตั้งค่าขั้นสูง (อยู่ในบานหน้าต่างการดำเนินการด้านขวามือ)
  2. จดชื่อ Application Pool จากนั้นปิดหน้าต่างนี้
  3. ดับเบิลคลิกที่ไอคอนการรับรองความถูกต้องเพื่อเปิดการตั้งค่าการรับรองความถูกต้อง
  4. ปิดการใช้งาน Windows Authentication
  5. คลิกขวาที่ Anonymous Authentication แล้วคลิก Edit
  6. เลือกปุ่มตัวเลือกข้อมูลประจำตัวพูลแอปพลิเคชันคลิกตกลง
  7. เลือกโหนด Application Pools จากแผนผังตัวจัดการ IIS ทางด้านซ้ายและเลือกชื่อ Application Pool ที่คุณจดไว้ในขั้นตอนที่ 3
  8. คลิกขวาและเลือกการตั้งค่าขั้นสูง
  9. ขยายการตั้งค่า Process Model และเลือก ApplicationPoolIdentity จากรายการแบบเลื่อนลง "บัญชีในตัว" จากนั้นคลิกตกลง
  10. คลิกตกลงอีกครั้งเพื่อบันทึกและปิดหน้าการตั้งค่าขั้นสูงของพูลแอปพลิเคชัน
  11. เปิดบรรทัดคำสั่งของผู้ดูแลระบบ (คลิกขวาที่ไอคอน CMD และเลือก "Run As Administrator" ซึ่งจะอยู่ที่ใดที่หนึ่งในเมนูเริ่ม
  12. รันคำสั่งต่อไปนี้:

    icacls <path_to_site> /grant "IIS APPPOOL\<app_pool_name>"(CI)(OI)(M)
    

    ตัวอย่างเช่น:

    icacls C:\inetpub\wwwroot\mysite\ /grant "IIS APPPOOL\DEFAULTAPPPOOL":(CI)(OI)(M)
    

โดยเฉพาะขั้นตอน 5. & 6. มักจะถูกมองข้ามและไม่ค่อยมีการพูดถึงบนเว็บ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.