ภาพรวมการอนุญาต IIS7 - ApplicationPoolIdentity


356

เราเพิ่งอัพเกรดเป็น IIS7 เป็นเว็บเซิร์ฟเวอร์หลักและฉันต้องการภาพรวมในแง่ของการอนุญาต ก่อนหน้านี้เมื่อต้องการเขียนไปยังระบบไฟล์ฉันจะให้ผู้ใช้ AppPool (บริการเครือข่าย) เข้าถึงไดเรกทอรีหรือไฟล์

ใน IIS7 ฉันเห็นเป็นค่าเริ่มต้นผู้ใช้ AppPool ApplicationPoolIdentityมีการตั้งค่า ดังนั้นเมื่อฉันตรวจสอบตัวจัดการงานฉันเห็นว่าบัญชีผู้ใช้ชื่อ 'WebSite.com' กำลังเรียกใช้กระบวนการ IIS ('Website.com' เป็นชื่อของเว็บไซต์ใน IIS)

อย่างไรก็ตามบัญชีผู้ใช้นี้ไม่มีอยู่หากฉันพยายามใช้เพื่อให้สิทธิ์ ดังนั้นฉันจะตรวจสอบว่าผู้ใช้รายใดให้สิทธิ์เช่นกัน

แก้ไข ================================================= =============================

ดูด้านล่างสำหรับปัญหาในภาพหน้าจอ เว็บไซต์ของเรา (www.silverchip.co.uk) ทำงานบนชื่อผู้ใช้ SilverChip.co.uk อย่างไรก็ตามเมื่อฉันเพิ่ม pemissions ผู้ใช้รายนี้มีอยู่จริง!

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

================================= ดูที่ AppPool Image

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


2
ข้อมูล microsoft จริง ๆ ในเรื่องนี้เป็นApplication Pool Identities
DanielV

คำตอบ:


679

ApplicationPoolIdentity เป็นแนวปฏิบัติที่ดีที่สุดในการใช้ใน IIS7 + มันเป็นบัญชีที่สร้างขึ้นแบบไดนามิกและไม่มีสิทธิ์ ในการเพิ่มความปลอดภัยของระบบไฟล์สำหรับกลุ่มแอพพลิเคชั่นโดยเฉพาะโปรดดู"Application Pool Identities" ของ IIS.net"อัตลักษณ์พูลโปรแกรมประยุกต์" รุ่นด่วน:

หากกลุ่มแอปพลิเคชันชื่อ "DefaultAppPool" (เพียงแทนที่ข้อความนี้ด้านล่างหากชื่อนั้นแตกต่างกัน)

  1. เปิด Windows Explorer
  2. เลือกไฟล์หรือไดเรกทอรี
  3. คลิกขวาที่ไฟล์และเลือก "Properties"
  4. เลือกแท็บ "ความปลอดภัย"
  5. คลิกปุ่ม "แก้ไข" จากนั้นคลิกปุ่ม "เพิ่ม"
  6. คลิกปุ่ม "สถานที่" และตรวจสอบให้แน่ใจว่าคุณเลือกเครื่องในท้องถิ่น ( ไม่โดเมน Windows หากเซิร์ฟเวอร์อยู่ในโดเมนเดียว)
  7. ป้อน " IIS AppPool \ DefaultAppPool " ในกล่องข้อความ "ป้อนชื่อวัตถุเพื่อเลือก:" (อย่าลืมเปลี่ยน "DefaultAppPool" ที่นี่เป็นสิ่งที่คุณตั้งชื่อกลุ่มแอปพลิเคชันของคุณ)
  8. คลิกปุ่ม "ตรวจสอบชื่อ" และคลิก "ตกลง"

11
@Pino: ไม่ไม่ใช่ชื่อเว็บไซต์ ใช้ชื่อกลุ่มแอปพลิเคชัน แต่ละเว็บไซต์ถูกกำหนดให้กับกลุ่มแอปพลิเคชัน คุณสามารถบอกได้ว่าอันไหนบนไดอะล็อกการตั้งค่าพื้นฐานของคุณสมบัติเว็บไซต์ (ใน IIS7)
Jon Adams

2
@Pino: IIS AppPool\silverchip.co.ukในกรณีที่บทบาทการรักษาความปลอดภัยที่คุณควรใช้คือ ฉันยังไม่ได้ลองจุดในชื่อความปลอดภัย - คุณอาจต้องการเปลี่ยนเป็นสิ่งที่ไม่มีเครื่องหมายวรรคตอน
Jon Adams

7
ฉันทำตามคำแนะนำของคุณตามที่คุณพูด แต่มีแฮ็คหนึ่งอัน คุณต้องตั้งค่าคุณสมบัติenable load user profileเป็นtrueในการตั้งค่ากลุ่มแอพพลิเคชั่น และหลังจากการตั้งค่านี้ฉันก็สามารถเรียกใช้แอปพลิเคชันได้ ดังนั้นโปรดอัปเดตคำแนะนำของคุณและเพิ่มจุดที่ 9
Johnny_D

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

11
ใส่ใจที่นี่! คุณไม่สามารถค้นหาผู้ใช้โดยใช้ Userinterface แต่คุณต้องพิมพ์มันการตรวจสอบชื่อเป็นสิ่งเดียวที่คุณสามารถทำได้
Remco

87

อย่าลืมใช้ชื่อท้องถิ่นของเซิร์ฟเวอร์ไม่ใช่ชื่อโดเมนเมื่อทำการแก้ไขชื่อ

IIS AppPool\DefaultAppPool

(เพียงเตือนความจำเพราะสิ่งนี้ทำให้ฉันสะดุดสักหน่อย):ป้อนคำอธิบายรูปภาพที่นี่


ใช่ฉันลืมสิ่งนี้ทุกครั้งขอบคุณสำหรับการเตือน James Toomey!
tjans

30

ให้เข้าถึงIIS AppPool \ YourAppPoolNameผู้ใช้อาจจะไม่เพียงพอกับการกำหนดค่าเริ่มต้น IIS

ในกรณีของฉันฉันยังคงมีข้อผิดพลาดHTTP Error 401.3 - ไม่ได้รับอนุญาตหลังจากเพิ่มผู้ใช้ AppPool และได้รับการแก้ไขหลังจากเพิ่มสิทธิ์ไปยังIUSR เท่านั้นผู้ใช้เท่านั้น

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

แท็บการพิสูจน์ตัวตน

เข้าสู่คำตอบนี้: ข้อผิดพลาด HTTP 401.3 - ไม่ได้รับอนุญาต


3
นี่เป็นสิ่งสำคัญ !!! ต้องเปลี่ยน "การพิสูจน์ตัวตนแบบไม่ระบุชื่อ" เป็น "ข้อมูลประจำตัวของกลุ่มแอปพลิเคชัน" เพื่อความปลอดภัย! ฉันแน่ใจว่ามีเหตุผลที่ดีที่ตั้งค่าเป็น IUSR แต่ฉันไม่สามารถนึกถึงสิ่งใดสิ่งหนึ่งได้ ขอบคุณ !!!
Dan B

สิ่งนี้ได้แก้ไขปัญหาสำหรับฉันแล้ว อาจเป็นเพราะ IIS เวอร์ชันของฉันคือ 8 บน Windows Server 2012 R2
myroslav

2
นี่เป็นขั้นตอนสำคัญที่ควรเพิ่มเข้าไปในคำตอบที่ยอมรับ วิธีที่ง่ายที่สุดคือเปลี่ยนกล่องตัวเลือกเป็นเอกลักษณ์ของกลุ่มแอปพลิเคชัน
Sourcery

1
นี่เป็นปัญหาของฉัน! ขอบคุณ!!
Sloan Reynolds

28

บน Windows Server 2008 (r2) คุณไม่สามารถกำหนดข้อมูลเฉพาะตัวของพูลโปรแกรมประยุกต์ไปยังโฟลเดอร์ผ่าน Properties-> Security คุณสามารถทำได้ผ่านพรอมต์คำสั่งของผู้ดูแลระบบโดยใช้สิ่งต่อไปนี้

icacls "c:\yourdirectory" /t /grant "IIS AppPool\DefaultAppPool":(R)

1
คุณช่วยอธิบายเรื่องนี้หน่อยได้ไหม? (R) หมายถึงอะไร คุณป้อนวงเล็บเหลี่ยมในคำสั่งนี้จริง ๆ หรือไม่?
Kate Gregory

3
สวัสดี Kate ฉันใช้ <> เพื่อแสดง "ชื่อแอพพูลของคุณที่นี่" แต่ใช้ชื่อแอพพูลที่ถูกต้อง ใน IIS Manager -> กลุ่มแอปพลิเคชันคุณจะต้องตรงกับชื่อรวมถึงช่องว่าง อันสุดท้ายที่ฉันทำคือ "IIS AppPool \ ClientName_CompanyName - Intranet" : (R) ในกรณีนี้กำลังให้สิทธิ์การอ่าน คุณยังสามารถใช้ F (เต็ม), M (แก้ไข), RX (อ่าน + ดำเนินการ) และ W (เขียนเท่านั้น)
Chris

9
คุณสามารถกำหนดผ่านแท็บหลักทรัพย์ใน Properties ใน Windows Server 2008 R2 ดังนั้นคุณไม่จำเป็นต้องแก้ไขปัญหานี้ ตรวจสอบให้แน่ใจว่าคุณได้เลือกหลักการรักษาความปลอดภัยในตัวกับชนิดและตำแหน่งของวัตถุ
rism

คำตอบนี้ใช้ได้สำหรับฉันคำตอบที่เลือกไม่เหมาะสำหรับฉัน
Tuyen Nguyen

3
ดูคำตอบดั้งเดิมของคำตอบที่เลือกของ [link] serverfault.com/questions/81165/… สำหรับ Windows Server 2008 ธรรมดา (หรือ Datacenter edition) คุณต้องใช้บรรทัดคำสั่งเพื่อให้บัญชีพูลแอพเข้าสู่ระบบรักษาความปลอดภัย โต้ตอบ คุณสามารถจัดการเปลี่ยนระดับสิทธิ์สำหรับไดเรกทอรีย่อย ฯลฯ ได้เช่นกัน: "icacls" c: \ yourdirectory "/ t / ให้สิทธิ์" IIS AppPool \ DefaultAppPool ":( OI) (CI) (R)" OI -object inheritance, CI-container inheritance
secretwep

7

ส่วนที่ A: การกำหนดค่ากลุ่มแอปพลิเคชันของคุณ

สมมติว่า Application Pool มีชื่อว่า 'MyPool' ไปที่ 'การตั้งค่าขั้นสูง' ของ Application Pool จาก IIS Manager

  1. เลื่อนลงไปที่ 'ตัวตน' การพยายามแก้ไขค่าจะทำให้กล่องโต้ตอบปรากฏขึ้น เลือก 'บัญชีในตัว' และเลือกบัญชี 'ApplicationPoolIdentity'

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

ตอนที่ B: กำหนดค่าเว็บไซต์ของคุณ

  1. ชื่อเว็บไซต์: ชื่อไซต์ (เพียงตัวอย่าง)
  2. เส้นทางกายภาพ: C: \ อะไรก็ตาม (เป็นเพียงตัวอย่าง)
  3. เชื่อมต่อเป็น ... : ผู้ใช้แอปพลิเคชัน (การตรวจสอบสิทธิ์แบบพาส - ทรู) (สามารถดูการตั้งค่าข้างต้นได้ใน 'การตั้งค่าพื้นฐาน' ของไซต์ในตัวจัดการ IIS)
  4. หลังจากกำหนดการตั้งค่าพื้นฐานให้ค้นหาการกำหนดค่า 'รับรองความถูกต้อง' ภายใต้ 'IIS' ในคอนโซลหลักของไซต์ เปิด. คุณควรเห็นตัวเลือกสำหรับ 'การพิสูจน์ตัวตนที่ไม่ระบุตัวตน' ตรวจสอบให้แน่ใจว่าเปิดใช้งานแล้ว จากนั้นคลิกขวาและ 'แก้ไข ... ' เลือก 'Application Pool Identity'

ส่วน C: การกำหนดค่าโฟลเดอร์ของคุณ

โฟลเดอร์ที่เป็นปัญหาคือ C: \ อะไรก็ตาม

  1. ไปที่คุณสมบัติ - การแชร์ - การแชร์ขั้นสูง - สิทธิ์และทำเครื่องหมาย 'แชร์โฟลเดอร์นี้'
  2. ในกล่องโต้ตอบเดียวกันคุณจะพบปุ่ม 'สิทธิ์' คลิกมัน
  3. กล่องโต้ตอบใหม่จะเปิดขึ้น คลิก 'เพิ่ม'
  4. กล่องโต้ตอบใหม่ 'เลือกผู้ใช้หรือกลุ่ม' จะเปิดขึ้น ใต้ 'จากตำแหน่งนี้' ตรวจสอบให้แน่ใจว่าชื่อนั้นเหมือนกับชื่อโฮสต์คอมพิวเตอร์ในพื้นที่ของคุณ จากนั้นภายใต้ 'ป้อนชื่อวัตถุ' ให้พิมพ์ 'IIS AppPool \ MyPool' แล้วคลิก 'ตรวจสอบชื่อ' แล้วคลิก 'ตกลง'
  5. ให้สิทธิ์การแชร์แบบเต็มสำหรับผู้ใช้ 'MyPool' ใช้มันและปิดคุณสมบัติโฟลเดอร์
  6. เปิดคุณสมบัติโฟลเดอร์อีกครั้ง คราวนี้ไปที่การรักษาความปลอดภัย - ขั้นสูง - การอนุญาตแล้วคลิกเพิ่ม จะมีตัวเลือก 'เลือกเงินต้น' ที่ด้านบนหรือตัวเลือกอื่น ๆ เพื่อเลือกผู้ใช้ คลิกมัน
  7. กล่องโต้ตอบ 'เลือกผู้ใช้หรือกลุ่ม' จะเปิดขึ้นอีกครั้ง ทำซ้ำขั้นตอนที่ 4
  8. ให้สิทธิ์ทั้งหมดหรือหลายสิทธิ์ที่คุณต้องการให้กับผู้ใช้ 'MyPool'
  9. ทำเครื่องหมาย 'แทนที่สิทธิ์ของวัตถุลูกทั้งหมด ... "และใช้และปิด

ตอนนี้คุณควรจะสามารถใช้งานเว็บไซต์ได้แล้ว


คุณคือราชาแห่งป่า! ขอบคุณ
tno2007

5

คำตอบยอดนิยมจาก Jon Adams

นี่คือวิธีการใช้สิ่งนี้สำหรับผู้ใช้ PowerShell

$IncommingPath = "F:\WebContent"
$Acl = Get-Acl $IncommingPath
$Ar = New-Object  system.security.accesscontrol.filesystemaccessrule("IIS AppPool\DefaultAppPool","FullControl","ContainerInherit, ObjectInherit", "None", "Allow")
$Acl.SetAccessRule($Ar)
Set-Acl $IncommingPath $Acl

1

เพียงเพิ่มความสับสนกล่องโต้ตอบการอนุญาตที่มีประสิทธิภาพ (Windows Explorer) จะไม่ทำงานสำหรับการเข้าสู่ระบบเหล่านี้ ฉันมีไซต์ "Umbo4" โดยใช้การตรวจสอบสิทธิ์แบบพาส - ทรูและดูที่การอนุญาตที่มีผลบังคับใช้ของผู้ใช้ในโฟลเดอร์รูทไซต์ การทดสอบตรวจสอบชื่อแก้ไขชื่อ "IIS AppPool \ Umbo4" แต่การอนุญาตที่มีประสิทธิภาพแสดงให้เห็นว่าผู้ใช้ไม่มีสิทธิ์ใด ๆ เลยในโฟลเดอร์ (ไม่ได้เลือกช่องทำเครื่องหมายทั้งหมด)

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


1

ฉันแก้ไขปัญหา asp.net ทั้งหมดของฉันเพียงแค่สร้างผู้ใช้ใหม่ที่เรียกว่า IUSER ด้วยรหัสผ่านและเพิ่มลงในบริการเครือข่ายและกลุ่มผู้ใช้ จากนั้นสร้างไซต์เสมือนจริงและแอปพลิเคชันทั้งหมดของคุณตั้งค่าการรับรองความถูกต้องเป็น IUSER ด้วยรหัสผ่าน .. ตั้งค่าการเข้าถึงไฟล์ระดับสูงเพื่อรวม IUSER และ BAM มันแก้ไขปัญหาอย่างน้อย 3-4 เรื่องรวมถึงอันนี้ ..

เดฟ

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