นี่เป็นคำถามที่ดีมากและนักพัฒนาจำนวนมากไม่ได้ถามคำถามเกี่ยวกับความปลอดภัยของ IIS / ASP.NET ในบริบทของการเป็นผู้พัฒนาเว็บและตั้งค่า IIS ดังนั้นที่นี่ไป ....
เพื่อให้ครอบคลุมตัวตนที่ระบุไว้:
IIS_IUSRS:
นี่คล้ายคลึงกับIIS_WPG
กลุ่มIIS6 เก่า มันเป็นกลุ่มในตัวที่มีการกำหนดค่าความปลอดภัยซึ่งสมาชิกของกลุ่มนี้สามารถทำหน้าที่เป็นข้อมูลประจำตัวของกลุ่มแอปพลิเคชัน
IUSR:
บัญชีนี้คล้ายคลึงกับIUSR_<MACHINE_NAME>
บัญชีท้องถิ่นเก่าที่เป็นผู้ใช้ที่ไม่ระบุชื่อเริ่มต้นสำหรับเว็บไซต์ IIS5 และ IIS6 (เช่นบัญชีที่กำหนดค่าผ่านแท็บความปลอดภัยของไดเรกทอรีของคุณสมบัติของไซต์)
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับIIS_IUSRS
และIUSR
ดู:
การทำความเข้าใจบัญชีผู้ใช้และกลุ่มภายในใน IIS 7
DefaultAppPool:
หากมีการกำหนดค่ากลุ่มแอปพลิเคชันให้เรียกใช้โดยใช้คุณสมบัติ Application Pool Identity บัญชี "synthesized" ที่เรียกIIS AppPool\<pool name>
จะถูกสร้างขึ้นทันทีเพื่อใช้เป็นข้อมูลประจำตัวของกลุ่ม ในกรณีนี้จะมีบัญชีที่ถูกสังเคราะห์เรียกว่าIIS AppPool\DefaultAppPool
สร้างขึ้นตลอดช่วงเวลาชีวิตของพูล หากคุณลบพูลบัญชีนี้จะไม่มีอยู่อีกต่อไป เมื่อใช้การอนุญาตกับไฟล์และโฟลเดอร์จะต้องเพิ่มการใช้งานIIS AppPool\<pool name>
เหล่านี้ คุณจะไม่เห็นบัญชีกลุ่มเหล่านี้ในคอมพิวเตอร์ของคุณ User Manager ดูต่อไปนี้สำหรับข้อมูลเพิ่มเติม:
Application Pool Identities
ASP.NET v4.0:
-
นี่จะเป็น Application Pool Identity สำหรับกลุ่มแอพลิเคชัน ASP.NET v4.0 ดูDefaultAppPool
ด้านบน
NETWORK SERVICE:
-
NETWORK SERVICE
บัญชีในตัวตัวตนแนะนำบน Windows 2003 NETWORK SERVICE
เป็นบัญชีที่มีสิทธิพิเศษต่ำตามที่คุณสามารถเรียกใช้สระว่ายน้ำใบสมัครของคุณและเว็บไซต์ เว็บไซต์ที่ทำงานในพูล Windows 2003 ยังคงสามารถปลอมตัวเป็นบัญชีที่ไม่ระบุชื่อของเว็บไซต์ (IUSR_ หรือสิ่งที่คุณกำหนดค่าให้เป็นข้อมูลประจำตัวนิรนาม)
ใน ASP.NET ก่อน Windows 2008 คุณสามารถมี ASP.NET ดำเนินการร้องขอภายใต้บัญชีกลุ่มแอพลิเคชัน (โดยปกติNETWORK SERVICE
) อีกทางหนึ่งคุณสามารถกำหนดค่า ASP.NET เพื่อปลอมตัวเป็นบัญชีที่ไม่ระบุชื่อของเว็บไซต์ผ่านการ<identity impersonate="true" />
ตั้งค่าในweb.config
ไฟล์ในเครื่อง (หากการตั้งค่านั้นถูกล็อคคุณจะต้องดำเนินการโดยผู้ดูแลระบบในmachine.config
ไฟล์)
การตั้งค่า<identity impersonate="true">
เป็นเรื่องปกติในสภาพแวดล้อมการโฮสต์ที่ใช้ร่วมกันซึ่งมีการใช้แอพพลิเคชั่นสระว่ายน้ำร่วม (ร่วมกับการตั้งค่าความน่าเชื่อถือบางส่วน
ในการควบคุมการแอบอ้างเป็น IIS7.x / ASP.NET ได้รับการกำหนดค่าผ่านคุณสมบัติการกำหนดค่าการตรวจสอบสิทธิ์ของเว็บไซต์แล้ว ดังนั้นคุณสามารถกำหนดค่าให้ทำงานเป็นข้อมูลเฉพาะตัวของพูลIUSR
หรือบัญชีที่ไม่ระบุชื่อที่กำหนดเองโดยเฉพาะ
LOCAL SERVICE:
LOCAL SERVICE
บัญชีในตัวบัญชีใช้โดยผู้จัดการฝ่ายควบคุมการให้บริการ มีชุดสิทธิ์ขั้นต่ำในคอมพิวเตอร์ท้องถิ่น มีขอบเขตการใช้งานที่ จำกัด :
บัญชี LocalService
LOCAL SYSTEM:
คุณไม่ได้ถามเกี่ยวกับสิ่งนี้ แต่ฉันกำลังเพิ่มความสมบูรณ์ นี่เป็นบัญชีภายในเครื่อง มันมีสิทธิพิเศษและความไว้วางใจที่กว้างขวางพอสมควร คุณไม่ควรกำหนดค่าเว็บไซต์หรือกลุ่มแอปพลิเคชันให้ทำงานภายใต้ข้อมูลประจำตัวนี้
บัญชี LocalSystem
ในทางปฏิบัติ:
ในทางปฏิบัติแนวทางที่ต้องการที่จะรักษาความปลอดภัยของเว็บไซต์ (ถ้ามีเว็บไซต์ที่ได้รับการประยุกต์ใช้สระว่ายน้ำของตัวเอง - ซึ่งเป็นค่าเริ่มต้นสำหรับเว็บไซต์ใหม่ใน MMC IIS7) Application Pool Identity
จะทำงานภายใต้ ซึ่งหมายความว่าการตั้งค่าเอกลักษณ์ของไซต์ในการตั้งค่าขั้นสูงของ Application Pool เป็นApplication Pool Identity
:
ในเว็บไซต์คุณควรกำหนดค่าคุณสมบัติการตรวจสอบสิทธิ์:
คลิกขวาและแก้ไขรายการการพิสูจน์ตัวตนแบบไม่ระบุชื่อ:
ตรวจสอบให้แน่ใจว่าได้เลือก"Application pool identity" :
เมื่อคุณใช้การอนุญาตของไฟล์และโฟลเดอร์คุณจะให้สิทธิ์ Application Pool กับสิทธิที่จำเป็น ตัวอย่างเช่นหากคุณให้สิทธิ์กลุ่มแอพพลิเคชั่นสำหรับASP.NET v4.0
สิทธิ์กลุ่มคุณสามารถทำได้ผ่าน Explorer:
คลิกปุ่ม "ตรวจสอบชื่อ":
หรือคุณสามารถทำได้โดยใช้ICACLS.EXE
ยูทิลิตี้:
icacls c: \ wwwroot \ mysite / Grant "IIS AppPool \ ASP.NET v4.0" :( CI) (OI) (M)
... หรือ ... หากมีการเรียกใช้กลุ่มแอปพลิเคชันของไซต์ของคุณBobsCatPicBlog
:
icacls c: \ wwwroot \ mysite / Grant "IIS AppPool \ BobsCatPicBlog" :( CI) (OI) (M)
ฉันหวังว่าสิ่งนี้จะช่วยให้สิ่งต่าง ๆ ชัดเจนขึ้น
ปรับปรุง:
ฉันเพิ่งชนคำตอบที่ยอดเยี่ยมนี้จาก 2009 ซึ่งมีข้อมูลที่เป็นประโยชน์จำนวนมากคุ้มค่าอ่าน:
ความแตกต่างระหว่างบัญชี 'ระบบภายใน' และบัญชี 'บริการเครือข่าย' หรือไม่