การเข้าถึงการเขียนเพื่อใช้งานได้กับทุกคน IUSR, IIS_IUSRS, DefaultAppPool ไม่ทำงาน ทำไม?


10

ตกลง. ที่นี่เรากำลังพยายามตั้งค่าเว็บไซต์ Classic ASP ที่ IIS 7.5 ใน Windows Server 2008 R2 มีโฟลเดอร์ชื่อ dbc ภายใต้รูทของเว็บไซต์และมีไฟล์ที่ใช้ในการอ่านและเขียนข้อมูลบางอย่างในขณะที่ประมวลผลทุกหน้า

ปัญหาคือถ้าฉันให้สิทธิ์ในการเขียน IUSR และสิทธิ์ในการเขียน IIS_IUSRS หรือสิทธิ์ในการเขียน DefaultAppPool ฉันจะได้รับ "การเข้าถึงพา ธ 'E: .. \ websiteroot \ dbc \ filename.txt'

แต่ถ้าฉันอนุญาตให้ทุกคนเขียนการเข้าถึงในโฟลเดอร์ dbc นั้นฉันจะไม่ได้รับข้อผิดพลาดใด ๆ ทุกอย่างดูเหมือนจะสมบูรณ์แบบ

ข้อมูลเพิ่มเติม: เว็บไซต์ทำงานในโหมด Classic Pipeline, การพิสูจน์ตัวตนแบบไม่ระบุชื่อถูกเปิดใช้งาน (อาจเป็นเพียงการเปิดใช้งานการรับรองความถูกต้องเท่านั้น) .. และฉันลองใช้การพิสูจน์ตัวตนแบบไม่ระบุชื่อโดยใช้บัญชี IUSR เช่นเดียวกับ Application Pool Identity ในกรณีของฉัน ApplicationPoolIdentity เป็นข้อมูลประจำตัวสำหรับการตรวจสอบความถูกต้องของเว็บไซต์ เราใช้ COM + สำหรับไฟล์ I / O และ Classic ASP Server สร้าง ObjectObject เพื่อยกตัวอย่างวัตถุออกจากมัน COM + ทำงานเป็นบริการเครือข่าย

คิด? ฉันไม่ต้องการให้สิทธิ์การเขียนแก่ทุกคน ฉันพลาดอะไรไปรึเปล่า?

แก้ไขแล้ว: นี่คือสิ่งที่ฉันทำ

เว็บไซต์ของฉันชื่อ CipherDemo ทำงานภายใต้ AppPoolIdentity ใน IIS 7.5 ซึ่งสามารถระบุได้โดย Identity IIS AppPool \ CipherDemo ฉันใช้ ICACLS เพื่อให้สิทธิ์ RW ในโฟลเดอร์นั้น

และ COM + ที่กำลังทำไฟล์ I / O กำลังทำงานภายใต้ Network Service Identity เมื่อฉันใช้การตรวจสอบกระบวนการเพื่อติดตามการเข้าถึงถูกปฏิเสธข้อผิดพลาดมันเปิดบริการเครือข่ายที่มีสิทธิ์อ่านในโฟลเดอร์นั้นเท่านั้น

ฉันใช้ ICACLS "foldername" / grant: r "NT AUTHORITY \ NETWORKSERVICE" :( OI) (CI) RXW / T เพื่อให้สิทธิ์การเขียนในโฟลเดอร์นั้น

และแก้ไขมัน

ฉันตั้งใจว่าตั้งแต่เว็บไซต์ทำงานเป็น CipherDemo Identity นี่จะเป็นบัญชีที่จะใช้ในการเข้าถึงไฟล์ผ่าน COM + แต่มันน่าอายที่จะพบว่า COM + ยังคงทำงานบนขอบเขตของตัวตนของตัวเอง

คำตอบ:


5

ภายใต้ IIS 7.5 (และเป็นทางเลือกใน IIS 7) ผู้ทำงานทั้งหมดทำงานด้วย Application Pool Identity: ผู้ใช้ "IIS AppPool * PoolName *"

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

มีหน้าเว็บที่มีประโยชน์มากในiis.netซึ่งครอบคลุมสิ่งต่าง ๆ โดยละเอียดยิ่งขึ้น

หมายเหตุ: ภายใต้ IIS7 (Server 2008):

  • คุณตั้งค่าข้อมูลประจำตัวของแอพพลิเคชั่นตามประเภทของแอพต่อการตั้งค่าขั้นสูง
  • ไม่มีการสนับสนุน GUI ดังนั้นคุณจะต้องมีบรรทัดคำสั่งเพื่อตั้งค่าการอนุญาต ( icacls.exe)

ในที่สุดการเลือกข้อมูลประจำตัวของ SQL Server ไม่ทราบเกี่ยวกับข้อมูลประจำตัวของกลุ่มแอพ: ใช้CREATE LOGINและCREATE USERเริ่มแรกหลังจากนี้สามารถใช้ GUI เพื่อให้บทบาทเป็นต้น


@Richard - ใช่ ขอบคุณสำหรับการตอบสนองที่รวดเร็ว วันนี้ฟอรั่ม msdn ไม่ได้ประโยชน์มากวันนี้ กลับมาอีกครั้ง ... ฉันไปที่เว็บไซต์ IIS.net และเกิดข้อผิดพลาดกับเซิร์ฟเวอร์สองสามวัน ฉันใช้รหัสประจำตัวแอพลิเคชันเริ่มต้นในเซิร์ฟเวอร์ IIS 7.5 / Win 2008 R2 ของฉัน ดังนั้นฉันได้รับอนุญาต IIS APPPOOL \ DefaultAppPool Wite ในโฟลเดอร์ 'dbc' ของฉัน นอกจากนี้ฉันได้รับสิทธิ์ IUSR และ IIS_IUSRS เขียนในโฟลเดอร์นั้น มันจะไม่ทำงานจนฉันให้สิทธิ์การเขียนทุกคน ฉันรู้ว่ามีบางอย่างที่ฉันขาดหายไป .. คุณช่วยได้ไหม?
gmaran23

@ gmaran23: หากขั้นตอนที่ชัดเจนยังใช้งานไม่ได้ฉันใช้Process Monitorเพื่อดูว่าอะไรที่ล้มเหลว (และบ่อยครั้งที่มันเป็นไฟล์เปิดที่กำลังขอการเข้าถึงมากเกินไปฉันไม่ได้ตั้ง ACL อย่างถูกต้องหรืออะไรบางอย่าง มีไฟล์เปิดอยู่)
Richard

@Richard - ฉันจะอ่าน / เขียนด้วยตัวอ่านไฟล์ใน c # ด้วย FileMode.Open, FileAccess.ReadWrite - ฉันเดาว่าส่วนนั้นดี มีบางอย่างที่เปิดไฟล์ - ฉันเดาว่านี่อาจถูกตัดออกเพราะไม่มีความเป็นไปได้เลย .. มีบางอย่างผิดปกติกับ ACL ฉันจะตรวจสอบและโพสต์ไว้ที่นี่ จะลองตรวจสอบกระบวนการ ขอบคุณสำหรับความช่วยเหลือ :)
gmaran23

@ gmaran23: ถ้ามันไม่ทำงานอย่าคิดว่าคุณรู้ว่ามีอะไรทดสอบอยู่เสมอ ฉันเสียเวลามากเกินไปในช่วงหลายปีที่ผ่านมาเพราะฉันรู้ว่ามีอะไรบางอย่างที่เป็นจริงหรือไม่จริง - ทั้งหมดนี้บ่อยครั้งที่ฉันผิด
Richard

1
@ gmaran23: ใช้เครื่องมือเพื่อดูว่าเกิดอะไรขึ้น: คุณคาดเดาและไม่แก้ปัญหาอย่างเป็นระบบ (1) ใช้ Process Explorer เพื่อยืนยันว่าไฟล์ไม่ได้เปิดอยู่ (2) ใช้การตรวจสอบกระบวนการเพื่อดูว่ามีการร้องขอการเข้าถึงใดบ้างและระบุตัวตน (และคุณมีไฟล์ที่ถูกต้อง) (3) ตรวจสอบผลลัพธ์อีกครั้งที่ # 2 กับ ACL ในไฟล์ (และเปิดคุณสมบัติความปลอดภัยขั้นสูงสำหรับรายละเอียดทั้งหมด) (4) ปรับสิ่งหนึ่งและไปที่ # 1 จนกว่าจะได้รับการแก้ไข หากคุณยังคงติดขัดหลังจากทำซ้ำสองสามครั้งให้ขยาย Q ด้วยรายละเอียดแบบเต็ม (และเฉพาะเจาะจง)
Richard

5

คุณสามารถเพิ่มบัญชีผ่านทาง NTFS GUI ได้โดยพิมพ์โดยตรง ชื่อที่อยู่ในรูปแบบของการเช่นIIS APPPOOL\<<app pool name>> IIS APPPOOL\DefaultAppPool(ดูบทความการสนับสนุนของ Microsoft นี้ )

ทางเลือกอื่น: ฉันใช้บัญชี "บริการเครือข่าย" ในฐานะผู้ใช้กลุ่มแอปพลิเคชันที่ให้สิทธิ์การเขียน


ถูกต้องคำแนะนำนั้นดี แต่ฉันก็ทำไปแล้ว ฉันใช้ "ApplicationPoolIdentity" เริ่มต้นสำหรับกลุ่มแอปพลิเคชัน และสำหรับโฟลเดอร์ 'dbc' ฉันได้รับอนุญาตให้เขียน IIS AppPool \ DefaultAppPool แล้ว แต่มันจะไม่ทำงานจนกว่าฉันจะให้สิทธิ์การเขียนทุกคน
gmaran23

1

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

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