AppPoolIdentity IIS และระบบไฟล์สิทธิ์การเข้าถึงการเขียน


395

นี่คือปัญหาของ IIS 7.5 และ ASP.NET ที่ฉันได้ทำการค้นคว้าและทำให้ไม่มีที่ไหนเลย ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชมอย่างมาก.

คำถามของฉันคือ: ใช้ ASP.NET ใน IIS 7.5, IIS และ / หรือระบบปฏิบัติการอนุญาตให้เว็บแอปพลิเคชันเขียนไปยังโฟลเดอร์เช่นอย่างไรC:\dumpเมื่อทำงานภายใต้ความไว้วางใจอย่างเต็มที่? ฉันไม่ต้องเพิ่มการเข้าถึงการเขียนสำหรับผู้ใช้กลุ่มแอปพลิเคชันอย่างชัดเจน (ในกรณีนี้ApplicationPoolIdentity) อย่างไร

ฉันรู้สิ่งนี้มาก:

  • ใน IIS 7.5 ApplicationPoolIdentityรหัสประจำตัวเริ่มต้นสำหรับแอพลิเคชันสระว่ายน้ำเป็น
  • ApplicationPoolIdentity แทนบัญชีผู้ใช้ Windows ที่เรียกว่า "IIS APPPOOL \ AppPoolName" ซึ่งสร้างขึ้นเมื่อ Application Pool ถูกสร้างขึ้นโดยที่ AppPoolName เป็นชื่อของ Application Pool
  • ผู้ใช้ "IIS APPPOOL \ AppPoolName" เป็นค่าเริ่มต้นเป็นสมาชิกของIIS_IUSRSกลุ่ม
  • หากคุณกำลังทำงานภายใต้เชื่อถือแบบเต็มโปรแกรมประยุกต์บนเว็บของคุณสามารถเขียนไปหลายพื้นที่ของระบบไฟล์ (ไม่รวมโฟลเดอร์ชอบC:\Users, C:\Windowsฯลฯ ) C:\dumpยกตัวอย่างเช่นใบสมัครของคุณจะสามารถเข้าถึงการเขียนไปยังโฟลเดอร์บางอย่างเช่น
  • โดยค่าเริ่มต้นIIS_IUSRSกลุ่มจะไม่ได้รับสิทธิ์ในการอ่านหรือเขียนC:\dump(อย่างน้อยก็ไม่สามารถเข้าถึงได้ซึ่งมองเห็นผ่านแท็บ "ความปลอดภัย" ใน Windows Explorer)
  • หากคุณปฏิเสธการเข้าถึงเพื่อเขียนIIS_IUSRSคุณจะได้รับ SecurityException เมื่อพยายามเขียนไปยังโฟลเดอร์ (ตามที่คาดไว้)

ดังนั้นเมื่อคำนึงถึงสิ่งเหล่านี้แล้วการเข้าถึงการเขียนให้กับผู้ใช้ "IIS APPPOOL \ AppPoolName" เป็นอย่างไร กระบวนการ w3wp.exe ทำงานในฐานะผู้ใช้นี้ดังนั้นสิ่งใดที่อนุญาตให้ผู้ใช้รายนี้เขียนลงในโฟลเดอร์ที่ดูเหมือนจะไม่มีสิทธิ์เข้าถึงอย่างชัดเจน?

โปรดทราบว่าฉันเข้าใจว่านี่อาจเป็นไปได้เพื่อความสะดวกของผู้ใช้เนื่องจากมันเป็นความเจ็บปวดที่จะอนุญาตให้ผู้ใช้เข้าถึงทุก ๆ โฟลเดอร์ที่จำเป็นต้องเขียนถึงหากคุณกำลังทำงานภายใต้ Full Trust หากคุณต้องการ จำกัด การเข้าถึงนี้คุณสามารถเรียกใช้แอปพลิเคชันได้ภายใต้ Medium Trust ฉันสนใจที่จะค้นหาวิธีการที่ระบบปฏิบัติการและ / หรือ IIS อนุญาตให้การเขียนเหล่านี้เกิดขึ้นแม้ว่าจะไม่มีการอนุญาตให้เข้าถึงระบบไฟล์อย่างชัดเจนก็ตาม

คำตอบ:


403

ApplicationPoolIdentityถูกกำหนดให้สมาชิกของUsersกลุ่มเช่นเดียวกับIIS_IUSRSกลุ่ม ในแวบแรกนี่อาจดูค่อนข้างกังวลอย่างไรก็ตามUsersกลุ่มมีสิทธิ์ จำกัด NTFS บ้าง

ตัวอย่างเช่นหากคุณลองสร้างโฟลเดอร์ในC:\Windowsโฟลเดอร์คุณจะพบว่าคุณไม่สามารถทำได้ ApplicationPoolIdentityยังคงต้องการที่จะสามารถอ่านไฟล์จากโฟลเดอร์ระบบ Windows (มิฉะนั้นวิธีการอื่นที่ขั้นตอนการปฏิบัติงานที่จะสามารถที่จะโหลดแบบไดนามิกที่จำเป็น DLL ของ)

เกี่ยวกับข้อสังเกตของคุณเกี่ยวกับความสามารถในการเขียนลงในc:\dumpโฟลเดอร์ของคุณ หากคุณดูสิทธิ์ในการตั้งค่าความปลอดภัยขั้นสูงคุณจะเห็นสิ่งต่อไปนี้:

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

ดูว่าสิทธิ์พิเศษได้รับการสืบทอดมาจากc:\:

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

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

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

จากนั้นคุณจะกำหนดสิทธิ์ที่จำเป็นแต่ละรายการIIS AppPool\[name]ในโฟลเดอร์รูทของไซต์

คุณควรตรวจสอบให้แน่ใจว่าโฟลเดอร์ใด ๆ ที่คุณสร้างขึ้นในที่ที่คุณจัดเก็บไฟล์หรือข้อมูลที่อ่อนไหวอาจUsersถูกลบออกจากกลุ่ม คุณควรตรวจสอบให้แน่ใจว่าแอปพลิเคชันใด ๆ ที่คุณติดตั้งไม่ได้เก็บข้อมูลที่ละเอียดอ่อนไว้ในc:\program files\[app name]โฟลเดอร์ของพวกเขาและพวกเขาใช้โฟลเดอร์โปรไฟล์ผู้ใช้แทน

ดังนั้นใช่ในครั้งแรกดูเหมือนว่าApplicationPoolIdentityมีสิทธิ์มากกว่าที่ควร แต่จริง ๆ แล้วไม่มีสิทธิมากกว่าที่เป็นสมาชิกกลุ่มกำหนด

ApplicationPoolIdentityของสมาชิกกลุ่มสามารถตรวจสอบได้โดยใช้ SysInternals กระบวนการเครื่องมือสำรวจ ค้นหากระบวนการของผู้ปฏิบัติงานที่รันด้วย Application Pool Identity ที่คุณสนใจ (คุณจะต้องเพิ่มUser Nameคอลัมน์ในรายการคอลัมน์ที่จะแสดง:

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

ตัวอย่างเช่นผมมีสระว่ายน้ำที่นี่ชื่อซึ่งมีเอกลักษณ์ของแอพลิเคชันของ900300 IIS APPPOOL\900300คลิกขวาที่คุณสมบัติของกระบวนการและเลือกแท็บความปลอดภัยที่เราเห็น:

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

อย่างที่เราเห็นIIS APPPOOL\900300เป็นสมาชิกของUsersกลุ่ม


@Kev [+1] ฉันโพสต์คำถามที่คล้ายกันเกี่ยวกับการอนุญาต NTFS สำหรับข้อมูลประจำตัวกลุ่มแอพที่นี่: stackoverflow.com/questions/11232675/… - ฉันจะขอบคุณถ้าคุณได้ดู
one.beat.consumer

@ one.beat.consumer - ขอโทษฉันไม่เคยเห็นความคิดเห็นของคุณ คุณยังคงติดอยู่กับคำถามนั้น?
Kev

@ เคฟ - ใช่มันกลายเป็นปัญหาน้อยลงเพราะฉันถูกดึงไปอึคนอื่น แต่ก็ยังไม่แก้ ความคิดใด ๆ
one.beat.consumer

7
มาโหวตให้ส่วนนี้รวมอยู่ใน MSDN ไม่เคยใช้เวลาในการคิดออกดังนั้นนี่คือความช่วยเหลือที่ดี (และฉันละอายใจที่ฉันไม่เคยรู้)
หน้าตาบูดบึ้งของ Despair

67
ไม่ชัดเจนว่าทำไมเอกสารหลักของ Microsoft IIS นี้อยู่บน SO แทนที่จะเป็น MSDN
Amit Naidu

40
  1. คลิกขวาที่โฟลเดอร์

  2. คลิกคุณสมบัติ

  3. คลิกที่แท็บความปลอดภัย คุณจะเห็นสิ่งนี้:

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

  1. คลิกปุ่ม "แก้ไข ... " ในหน้าจอด้านบน คุณจะเห็นสิ่งนี้:

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

  1. คลิกปุ่ม "เพิ่ม ... " ในหน้าจอด้านบน คุณจะเห็นสิ่งนี้:

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

  1. คลิกปุ่ม "สถานที่ ... " ในหน้าจอด้านบน คุณจะเห็นอะไรเช่นนี้ ตอนนี้ไปที่ด้านบนสุดของโครงสร้างต้นไม้นี้แล้วเลือกชื่อคอมพิวเตอร์ของคุณแล้วคลิกตกลง

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

  1. ตอนนี้พิมพ์ "iis apppool \ your_apppool_name" แล้วคลิกปุ่ม "ตรวจสอบชื่อ" หากมีแอพอยู่คุณจะเห็นชื่อแอพของคุณในกล่องข้อความโดยขีดเส้นใต้ คลิกปุ่มตกลง

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

  1. ทำเครื่องหมาย / ยกเลิกการเลือกการเข้าถึงใด ๆ ที่คุณต้องการให้กับบัญชี

  2. คลิกปุ่มใช้แล้วตกลง


0

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

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


สิ่งนี้จะเกิดขึ้นหาก "โหลดโปรไฟล์ผู้ใช้" เป็น True
JamesQMurphy

ถูกต้องซึ่งหมายความว่าโฟลเดอร์ของผู้ใช้ AppPool จะไม่ถูกสร้างขึ้นหากมันไม่ถูกต้อง นี่คือเหตุผลที่พวกเขาสร้างมันขึ้นมาด้วยวิธีนี้ ..... เพื่อป้องกันไม่ให้ IIs เข้าถึงและจัดเก็บขยะใน windows / temp และทั่วฮาร์ดไดรฟ์แทนที่จะเป็นโฟลเดอร์ความปลอดภัยที่มีการจัดการสำหรับบัญชีนั้น
Stokely

0

ฉันพยายามทำสิ่งนี้เพื่อแก้ไขปัญหาการเข้าถึงเว็บไซต์ IIS ซึ่งแสดงให้เห็นว่าเป็นสิ่งต่อไปนี้ใน Event Logs → Windows →แอปพลิเคชัน:

ชื่อบันทึก: แอปพลิเคชัน
ที่มา: ASP.NET 4.0.30319.0
วันที่: 1/5/2012 4:12:33 PM
รหัสเหตุการณ์: 1314
ประเภทงาน: กิจกรรมบนเว็บ
ระดับ: สารสนเทศ
คำสำคัญ: คลาสสิค
ผู้ใช้: N / A
คอมพิวเตอร์: SALTIIS01

รายละเอียด:
รหัสเหตุการณ์: 4008 
ข้อความเหตุการณ์: การให้สิทธิ์ไฟล์ล้มเหลวสำหรับคำขอ 
เวลากิจกรรม: 1/5/2012 4:12:33 PM 
เวลาเหตุการณ์ (UTC): 1/6/2012 12:12:33 AM 
รหัสเหตุการณ์: 349fcb2ec3c24b16a862f6eb9b23dd6c 
ลำดับเหตุการณ์: 7 
เหตุการณ์ที่เกิดขึ้น: 3 
รหัสรายละเอียดกิจกรรม: 0 

ข้อมูลการสมัคร: 
    โดเมนแอปพลิเคชัน: / LM / W3SVC / 2 / ROOT / แอปพลิเคชัน / SNCDW-19-129702818025409890 
    ระดับความน่าเชื่อถือ: เต็ม 
    Application Virtual Path: / Application / SNCDW 
    เส้นทางของแอปพลิเคชัน: D: \ Sites \ WCF \ Application \ SNCDW \ 
    ชื่อเครื่อง: SALTIIS01 

ข้อมูลกระบวนการ: 
    ID กระบวนการ: 1896 
    ชื่อกระบวนการ: w3wp.exe 
    ชื่อบัญชี: iisservice 

ขอข้อมูล: 
    URL คำขอ: http: //webservicestest/Application/SNCDW/PC.svc 
    เส้นทางการร้องขอ: /Application/SNCDW/PC.svc 
    ที่อยู่โฮสต์ของผู้ใช้: 10.60.16.79 
    ผู้ใช้: js3228 
    รับรองความถูกต้อง: True 
    ประเภทการตรวจสอบความถูกต้อง: เจรจาต่อรอง 
    ชื่อบัญชีเธรด: iisservice 

ในท้ายที่สุดฉันต้องให้สิทธิ์การอ่านโฟลเดอร์Everyoneกลุ่มWindows เพื่อให้มันทำงานได้อย่างถูกต้อง

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