บัญชีผู้ใช้ทั้งหมดสำหรับ IIS / ASP.NET คืออะไรและแตกต่างกันอย่างไร


283

ภายใต้ Windows Server 2008 ที่ติดตั้ง ASP.NET 4.0 มีบัญชีผู้ใช้ที่เกี่ยวข้องทั้งหมดถูกฆ่าและฉันไม่สามารถเข้าใจได้ว่าบัญชีใดที่พวกเขาแตกต่างกันอย่างไรและบัญชีใดที่แอพนั้นทำงานอยู่ นี่คือรายการ:

  • IIS_IUSRS
  • IUSR
  • DefaultAppPool
  • ASP.NET v4.0
  • NETWORK_SERVICE
  • บริการท้องถิ่น

อะไรคืออะไร?


และใช้ Windows Server 2012 ด้วย ASP.NET 4.0 ขึ้นไป?
Kiquenet

คำตอบ:


433

นี่เป็นคำถามที่ดีมากและนักพัฒนาจำนวนมากไม่ได้ถามคำถามเกี่ยวกับความปลอดภัยของ 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 ซึ่งมีข้อมูลที่เป็นประโยชน์จำนวนมากคุ้มค่าอ่าน:

ความแตกต่างระหว่างบัญชี 'ระบบภายใน' และบัญชี 'บริการเครือข่าย' หรือไม่


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

1
@giammin - ทำไมล่ะ หากคุณไม่มีกรณีพิเศษการใช้ข้อมูลเฉพาะตัวกลุ่มแอพพลิเคชั่นเป็นแนวทางที่ปลอดภัยที่สุดที่แต่ละเว็บไซต์อยู่ในกลุ่มแอพพลิเคชั่นของตัวเอง เกลียดที่จะทำ "การอุทธรณ์ต่อผู้มีอำนาจ" แต่เป็นวิศวกรเว็บโฮสต์ที่ใช้ร่วมกันและคนที่รักษาความปลอดภัยเป็นเวลา 15 ปีวิธีนี้เป็นวิธีที่ไม่ต้องคิดมากใน IIS7 +
Kev

@Kev ฉันไม่ชอบที่จะให้สิทธิ์เขียนบนเว็บไซต์แก่ผู้ใช้ที่ไม่ระบุชื่อ
giammin

1
กลุ่มแอปพลิเคชันของคุณอาจเฉพาะเจาะจงมากขึ้นโดยใช้ IIS AppPool \ <name_of_apppool> ในบันทึกย่อที่เกี่ยวข้อง IIS Express จะทำงานกับ IIS AppPool \ ASP.NET v4.0 ได้เนื่องจากบัญชีเสมือนของแอพไม่ได้ถูกสร้างขึ้น
kevindaub

@ daub815 - IIS Express ทำงานแตกต่างกันเพราะมันตั้งใจจะทำงานภายใต้การเข้าสู่ระบบ Windows และการเริ่มต้นของคุณและปิดลงตามความจำเป็นเมื่อมีการพัฒนาและการแก้จุดบกพร่อง อันที่จริงแล้วมันไม่ได้ใช้หรือมีการพึ่งพาพูลแอพพลิเคชั่นหรือโครงสร้างพื้นฐาน Full Fat IIS เจตนาของ IIS ด่วนคือการให้นักพัฒนาเท่าของพฤติกรรมเดียวกันกลิ่นรสและการตั้งค่าเป็นสิ่งที่จริงเพราะเว็บเซิร์ฟเวอร์ของเล่น VS ถูก จำกัด อย่างรุนแรง ...
Kev
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.