“ แอพพลิเคชั่นข้อมูลประจำตัว” มีบทบาทอะไรในแอพพลิเคชั่นพูล?


16

เมื่อพูดถึงความปลอดภัย IIS 7.5 AFAIK:

App Pool Identity เป็นผู้ตัดสินใจว่าเว็บแอปพลิเคชันของฉันทำงานเป็นใคร

วิธีการตรวจสอบความถูกต้องตัดสินใจว่าใครเป็นลูกค้าที่ได้รับการตรวจสอบความถูกต้อง

ฉันมีโฟลเดอร์เสมือนที่กำหนดค่าไว้เช่นนี้:

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

แต่ปรากฎว่าฉันไม่สามารถเรียกดูไฟล์ในโฟลเดอร์นั้นได้ เมื่อฉันให้สิทธิ์บัญชี XXX ในการเข้าถึงโฟลเดอร์นั้นสิ่งต่าง ๆ เป็นไปด้วยดี

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

ขอบคุณ

คำตอบ:


18

คำศัพท์มากเกินไปที่นี่และการเปลี่ยนแปลงระหว่าง IIS 7 และ 7.5

App Pool Identity กับบัญชี App Pool

เริ่มด้วยตัวตนกลุ่มแอพพลิเคชั่น (ตัวพิมพ์เล็ก I, บัญชีแอพกลุ่มแอพ ):

อย่างที่ฉันบอกบัญชี Application Poolคือบัญชีที่ใช้ในการบู๊ตพูลแอพและข้อมูลประจำตัวที่ App Pool จะถือว่าเมื่อไม่มีการแอบอ้างเป็นบุคคลอื่น

ดังนั้นข้อมูลประจำตัวใดก็ตามที่คุณให้กับ App Pool มันจะต้องสามารถอ่านไฟล์ในโฟลเดอร์เนื้อหา : โดยเฉพาะ {แต่ไม่ จำกัด เพียง} ไฟล์ web.configใด ๆ(ซึ่งเป็นส่วนหนึ่งของการกำหนดค่า IIS และควบคุมสิ่งที่ แอพพูลกำลังจะทำ)

หากไม่สามารถเข้าถึงโฟลเดอร์ได้จะถือว่ามีไฟล์ web.config (การเปลี่ยนแปลงเกม) ที่สำคัญในนั้นและแสดงข้อผิดพลาด ดังนั้นบัญชี App Pool ต้องการการเข้าถึงเพื่ออ่านไปยังโฟลเดอร์เนื้อหาทั้งหมด

ApplicationPoolIdentity

เหตุใดจึงต้องแยกความแตกต่างของบัญชีกลุ่มแอพ (เอกลักษณ์ของกลุ่มแอพ) จากเอกลักษณ์กลุ่มแอพ เนื่องจากApplicationPoolIdentity ที่ใช้เฉพาะเมืองหลวงเป็นประเภทบัญชีใหม่- บัญชีบริการที่มีการจัดการ - มีการแนะนำและสร้างเป็นค่าเริ่มต้นใน IIS 7.5 / Windows 2008 R2 และพร้อมใช้งานจาก Windows 2008 SP2 เช่นกัน (แต่ไม่ใช่ค่าเริ่มต้น)

ดูApplication Pool Identities บน IIS.Net

เมื่อคุณสร้างเว็บไซต์ภายใต้ R2 โดยใช้ GUI:

  • App Pool จะถูกสร้างขึ้นเพื่อโฮสต์เว็บไซต์นั้นและ
  • ประเภทบัญชีจะเป็น ApplicationPoolIdentity แทน Network Service (ค่าเริ่มต้นของปี 2008), Local Service หรือ Local System

ด้วย 2008 RTM บัญชีกลุ่มแอพเริ่มต้นคือบริการเครือข่ายรวมถึงข้อมูลประจำตัว / กลุ่มแอพเฉพาะของแอพ ใหม่ R2 / SP2 AppPoolIdentity ประเภทบัญชีเป็นเครือข่าย Service- เช่นบัญชี (เช่นคอมพิวเตอร์เมื่อเชื่อมต่อปิดกล่อง) แต่ป้องกันการเลียนแบบของ App สระว่ายน้ำอื่นในช่องเดียวกัน

กลับไปที่คำถามเดิม:

  • บัญชีกลุ่มแอปกำหนดว่าใครเป็นแอพของคุณทำงานเหมือนเมื่อไม่แอบอ้างเป็นบุคคลอื่น

  • วิธีการตรวจสอบความถูกต้องอธิบายว่าคุณจะรับรองความถูกต้องของลูกค้าอย่างไร (เพื่อเลียนแบบ)

  • ไม่ระบุชื่อบัญชีผู้ใช้กำหนดที่คุณกำลังจะไปทำงานเมื่อแอบอ้างผู้ใช้สำหรับการร้องขอที่ไม่ได้รับรองความถูกต้อง - การ IUSR นั้นใช้เช่น

อนึ่งด้วย IIS 7.5 คุณสามารถตั้งค่าบัญชีผู้ใช้แบบไม่ระบุชื่อให้เป็น Application Pool Identity (คุณสมบัติของวิธีการพิสูจน์ตัวตนแบบไม่ระบุชื่อ) ซึ่งอาจทำให้ตรงไปตรงมามากขึ้นในการแยกและรักษาความปลอดภัยเนื้อหาสำหรับเว็บไซต์ที่กำหนด

ตั้งค่าการอนุญาตโดยใช้ IIS AppPool \ YourSiteName สำหรับรูปแบบชื่อ (ดูโพสต์นี้ด้วย )


4

คุณเห็นสองสิ่งที่มักสับสนใน ASP.NET:

  1. "user identity" - การพิสูจน์ตัวตนของบัญชีผู้ใช้ไม่มีส่วนเกี่ยวข้องกับบัญชีหรือ identity ที่ใช้งานได้จริงภายใต้ IIs และ ASP.NET การพิสูจน์ตัวตนแบบไม่ระบุชื่อช่วยให้ผู้ใช้สามารถเข้าถึงเนื้อหาสาธารณะใด ๆ โดยไม่ต้องระบุชื่อผู้ใช้และรหัสผ่านที่ท้าทายให้กับเบราว์เซอร์ไคลเอ็นต์ บัญชี IUSR ที่ไม่ระบุชื่อที่ได้รับการรับรองความถูกต้องโดยค่าเริ่มต้นใน IIS เพียงใช้การเข้าถึงเนื้อหาเว็บไซต์สาธารณะ ไม่ส่งผลกระทบต่อกระบวนการหรือทรัพยากรที่ใช้โดยบริการ IIs หรือ ASP.NET พื้นฐาน
  2. "เอกลักษณ์ของแอปพลิเคชัน" - นี่คือบัญชี "WindowsIdentity" จริง ๆ บนเซิร์ฟเวอร์ที่ทำงานอยู่หลัง IIS และ ASP.NET ซึ่งเป็นบัญชี Application Pool Identity ที่กำหนดให้กับพูลโดย II และกำหนดให้กับ ASP.NET กระบวนการ ASP.NET ของคุณทำงานภายใต้บัญชี Application Pool Identity (เรียกว่าบัญชีเสมือนใน IIs เวอร์ชัน 7.5+) โดยค่าเริ่มต้น

คำอธิบาย: ขั้นแรก "การรับรองความถูกต้อง" ใน ASP.NET เป็นเพียงเหตุการณ์ที่มักจะตั้งค่าใน web.config ที่บันทึกในบัญชีผู้ใช้ที่กำหนดซึ่งได้รับการส่งผ่านเป็นโทเค็นผู้ใช้โดย IIs ถึง ASP.NET เป็นวัตถุ HttpContext ธรรมดา ... เช่นเซสชันปัจจุบันหรือบริบทของผู้ใช้ปัจจุบัน มันไม่ได้เปลี่ยน WindowsIdentity ที่กำลังเรียกใช้กระบวนการ ASP.NET เพียงแค่ส่งโทเค็น ID ผู้ใช้ไป ใช้ HttpContext รหัสของคุณสามารถใช้รหัสหรือชื่อนั้นเพื่อจัดเก็บสิทธิ์ของฐานข้อมูลในส่วนต่าง ๆ ของเว็บไซต์ของคุณ แต่จะไม่ส่งผลกระทบต่อการเข้าถึงไฟล์โดย ASP.NET เพราะจะไม่ส่งผลกระทบหรือเปลี่ยนข้อมูลประจำตัวของบัญชี "กระบวนการ" ของแอปพลิเคชันจริงที่รัน ASP.NET ภายใต้ IIs

สิ่งนี้จะไม่เกิดขึ้นจนกว่าคุณจะ "เลียนแบบ" ซึ่งบอกให้ ASP.NET เลียนแบบสิ่งใดก็ตามที่โทเค็นถูกส่งผ่านไปโดย IIs จากนั้นเรียกใช้ภายใต้รหัสบัญชีนั้น คุณสามารถตั้งค่าการเลียนแบบใน web.config ของคุณ เมื่อคุณเปิดใช้งานการแอบอ้างบุคคลอื่นใน ASP.NET ดังนั้น WindowsIdentity จะเปลี่ยนกระบวนการของผู้ปฏิบัติงานเป็นสิ่งที่บัญชีรับรองความถูกต้องจะได้รับการส่งผ่านไปยัง ASP.NET จาก IIS จากนั้นคุณสามารถเข้าถึงไฟล์ได้โดยขึ้นอยู่กับสิทธิ์ที่คุณกำหนดบัญชีผู้ใช้นั้น สิ่งสำคัญที่ควรทราบเมื่อเกิดขึ้นชั่วคราวและ ASP.NET สามารถเปลี่ยนกลับไปเป็นเอกลักษณ์กระบวนการเริ่มต้นซึ่งอยู่ในรุ่น IIs ปัจจุบันอีกครั้งบัญชี Application Pool Identity ที่กำหนดให้กับกลุ่มแอพที่กำหนด

เมื่อ IIs ใช้บัญชีผู้ใช้แบบไม่ระบุชื่อธรรมดาโดยไม่มีการรับรองความถูกต้องที่ชัดเจนใน ASP.NET ค่าเริ่มต้น IIs จะเริ่มต้นโดยค่าเริ่มต้นบัญชี Application Pool Identity Identity ของ Application Pool ของเว็บไซต์และส่งต่อไปยัง ASP.NET และกระบวนการของผู้ปฏิบัติงาน บัญชีกลุ่มแอพลิเคชันนั้นประมวลผลคำขอทั้งหมดสำหรับ IIS และเรียกใช้ ASP.NET สำหรับไซต์นั้น

เมื่อ IIs เริ่มต้นภายใต้การตั้งค่านี้และเข้าถึงได้โดยผู้ใช้จริงจะรับรองความถูกต้องเบื้องหลังโดยค่าเริ่มต้นบัญชี IUSR ที่ไม่ระบุชื่อซึ่งกำหนดการเข้าถึงเว็บเพจและทรัพยากรพื้นฐานอื่น ๆ แต่บัญชีนั้นจะไม่ถูกส่งไปยัง ASP.NET และมันไม่ส่งผลกระทบต่อ Application Pool Identity IIS ที่ทำงานและ ASP.NET ใดที่ทำงานภายใต้

หากคุณตั้งค่าการเลียนแบบเป็น "จริง" ในการพูด web.config ของคุณและคุณกำลังใช้บัญชี IUSR ที่ไม่ระบุชื่อเริ่มต้นใน IIs สำหรับการเข้าถึงสาธารณะและคุณตั้งค่าเป็นจริงคุณสมบัติ anonymousAuthentication ใน web.config (แทนการใช้ Windows หรือบัญชีการเข้าสู่ระบบอื่น ๆ ), IIs จะโยน Application Pool Identity และ IIs และ ASP.NET ทั้งสองจะเรียกใช้กระบวนการแอปพลิเคชันของพวกเขาในขณะที่บัญชี IUSR รับรองความถูกต้องและการปลอมตัว

เมื่อคุณทำเช่นนั้น ASP.NET และกระบวนการของมันจะทำงานภายใต้บัญชี IUSR .... นั่นคือกระบวนการแอปพลิเคชันของ ASP.NET จะเรียกใช้บัญชี WindowsIdentity ของบัญชีเป็นบัญชี IUSR ตอนนี้คุณสามารถใช้การเข้าถึงแบบอ่าน / เขียนกับบัญชี IUSR ที่ไม่ระบุชื่อและโฟลเดอร์ที่คุณต้องการให้บัญชีนั้นเข้าถึง (หมายเหตุ: ต้องแน่ใจว่าได้เพิ่มบัญชีกระบวนการเริ่มต้นบัญชีกลุ่มแอปพลิเคชันสำหรับกลุ่มสิทธิรวมถึงโฟลเดอร์เหล่านั้นตามที่ Microsoft แนะนำไว้)

โชคดี!


2

มีสองบริบทการตรวจสอบที่เล่นอยู่ กระบวนการเซิร์ฟเวอร์เว็บ (ที่จัดการคำขอเว็บของคุณ) ทำงานในฐานะผู้ใช้ App Pool Identity เมื่อมีคำขอเข้ามาสำหรับโฮสต์เสมือนของคุณกลุ่มแอปพลิเคชันจะปลอมตัวเป็นผู้ใช้ที่ระบุไว้ใน "ข้อมูลรับรองตัวตนแบบไม่ระบุตัวตน" ของเว็บไซต์เฉพาะ - โดยค่าเริ่มต้น IUSR

สคริปต์ใด ๆ ที่ทำงานจากภายในเว็บไซต์ของคุณจะทำงานเป็น IUSR แต่การบันทึกและฟังก์ชั่นอื่น ๆ จะทำงานในฐานะผู้ใช้กลุ่มแอพ (ตามค่าเริ่มต้นบริการเครือข่าย - แม้ว่าสิ่งนี้จะเปลี่ยนไปเมื่อเร็ว ๆ นี้ App Pool Identity (บริการเครือข่าย) จะต้องสามารถแสดงรายการไฟล์ในไดเรกทอรีของคุณเนื่องจากมีการตรวจสอบบางอย่างในคำร้องขอสแต็กก่อนที่การควบคุมจะถูกส่งไปยังสคริปต์ของคุณ

เป็นการดีที่จะเรียกใช้หนึ่งไซต์ต่อหนึ่งพูลและตั้งค่า App Pool Identity ให้ทำงานเหมือนกับผู้ใช้เดียวกับผู้ใช้ Anonymous ในเว็บไซต์ของคุณ เป็นไปได้ที่จะแยกออกจากบริบทผู้ใช้แบบไม่ระบุชื่อ (IUSR) และยกระดับสิทธิ์ให้กับ App Pool Identity

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