การใช้ ICACLS เพื่อตั้งค่าการอนุญาตในไดเรกทอรีผู้ใช้


16

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

set /p userDir=Enter the login of the user's directory you're modifying permissions for. (i.e. jDoe)
TAKEOWN /f "E:\Home Directories\%userDir%" /r /d y
ICACLS "E:\Home Directories\%userDir%" /reset /T
ICACLS "E:\Home Directories\%userDir%" /grant:r "MYDOMAIN\%userDir%":(OI)(CI)F /grant:r "SYSTEM":(OI)(CI)F /grant:r "MYDOMAIN\%username%":(OI)(CI)F
ICACLS "E:\Home Directories\%userDir%" /inheritance:r
ICACLS "E:\Home Directories\%userDir%" /setowner "MYDOMAIN\%userDir%" /T
ICACLS "E:\Home Directories\%userDir%" /remove "MYDOMAIN\%username%"

ฉันเล่นกับสคริปต์ XCACLS.vbs ที่ไม่สนับสนุนซึ่งสร้างโดย Microsoft และฉันโชคดีที่ใช้สคริปต์นี้ในบรรทัดสุดท้ายของสคริปต์ แทนที่ ICACLS "E: \ Home Directories \% userDir%" / ลบ "MYDOMAIN \% ชื่อผู้ใช้%" ฉันได้แทนที่มันด้วย cscript.exe xcacls.vbs "e: \ Test" / E / R "MYDOMAIN \% ชื่อผู้ใช้% "ใช้งานได้ แต่ฉันต้องการหลีกเลี่ยงการใช้ XCACLS.vbs จริง ๆ เพราะมีปัญหาประสิทธิภาพการทำงานที่รุนแรง ความคิดอื่น ๆ ?
pk

คำตอบ:


18

การสังเกตครั้งแรก: ทุกครั้งที่คุณบล็อกการสืบทอดคุณกำลังตัดตัวเองออกจากความยืดหยุ่นในอนาคต ฉันหลีกเลี่ยงการบล็อกการรับมรดกที่ค่าใช้จ่ายทั้งหมด

หากคุณต้องการให้ผู้ใช้สามารถแสดงรายการเนื้อหาของโฟลเดอร์ "E: \ Home Directories" ระดับบนสุดให้พิจารณาการอนุญาตดังต่อไปนี้:

  • ระบบ - ควบคุมทั้งหมด - ใช้กับโฟลเดอร์นี้โฟลเดอร์ย่อยและไฟล์
  • BUILTIN \ Administrators - Full Control - ใช้กับโฟลเดอร์นี้โฟลเดอร์ย่อยและไฟล์
  • ผู้ใช้ที่ได้รับการรับรองความถูกต้องของ BUILTIN - อ่านและดำเนินการ - ใช้กับโฟลเดอร์นี้เท่านั้น

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

จากนั้นสคริปต์ของคุณจะกลายเป็น:

set /p userDir=Enter the login of the user's directory you're modifying permissions for. (i.e. jDoe)
TAKEOWN /f "E:\Home Directories\%userDir%" /r /d y
ICACLS "E:\Home Directories\%userDir%" /reset /T
ICACLS "E:\Home Directories\%userDir%" /grant:r "MYDOMAIN\%userDir%":(OI)(CI)F
ICACLS "E:\Home Directories\%userDir%" /setowner "MYDOMAIN\%userDir%" /T

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

นี่คือ SOP ของฉันสำหรับไดเรกทอรีบ้านของผู้ใช้เปลี่ยนเส้นทาง "เอกสารของฉัน", "เดสก์ท็อป", ฯลฯ โฟลเดอร์และสำหรับไดเรกทอรีโปรไฟล์ผู้ใช้ข้ามเขต มันใช้งานได้ดี

แก้ไข

Re: ความคิดเห็นของคุณเกี่ยวกับการเข้าถึง BUILTIN \ Administrators

ฉันมีข้อโต้แย้งต่าง ๆ กับผู้คนเกี่ยวกับเรื่องที่ฉันอนุญาตให้เข้าถึง BUILTIN \ Administrators ในช่วงหลายปีที่ผ่านมาและสิ่งที่ฉันได้รับคือ:

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

  • ตามที่คุณเห็นด้วย ICACLS, BUILTIN \ Administrators สามารถ "กำหนด" ความเป็นเจ้าของ (นอกเหนือจาก "รับ" ได้) ดังนั้นจึงไม่มีการเพิ่ม "ความปลอดภัย" โดยไม่มีการเข้าถึงไฟล์ของ BUILTIN \ Administrators ในตอนแรก

  • เว้นแต่ว่าคุณกำลังใช้การตรวจสอบ (และการกลั่นกรองผ่านรายการเท็จบวกจำนวนมากที่อาจเกิดขึ้น) จะไม่มีหลักฐานการตรวจสอบเมื่อผู้ใช้ BUILTIN \ Administrators ใช้ความเป็นเจ้าของไฟล์ที่ไม่ควรเข้าถึงคัดลอกจากนั้น ส่งคืนไฟล์กลับไปยังเจ้าของ "สิทธิ์" และการอนุญาต

  • ในโลกไมโครซอฟท์ Encrypting filesystem (EFS) มีขึ้นเพื่อแก้ไขปัญหาในการป้องกันการเข้าถึงที่ไม่ได้รับอนุญาตของ BUILTIN \ Administrators NTFS ACL ไม่ได้แก้ปัญหานั้น (เห็นได้ชัดว่า EFS ไม่ใช่รายการเดียวในเมืองการเข้ารหัสคือคำตอบที่แท้จริงในการแก้ปัญหา "จำกัด การเข้าถึงของผู้ดูแลระบบเครือข่าย" ไม่ว่าคุณจะเชือดมันอย่างไร)

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

ฉันเลิกพยายามที่จะชนะการโต้เถียงกับผู้คนด้วยตรรกะ ดูเหมือนว่าจะเป็นปัญหาทางอารมณ์กับบางคน มันเหมือนกับ "ปฏิเสธ / รับเป็น" ACE ที่โง่เขลาที่อยู่ที่รากขององค์กร Exchange เพื่อป้องกันกลุ่มสิทธิ์พิเศษบางอย่างจากการเปิดกล่องจดหมายของผู้ใช้ มันไม่มีการรักษาความปลอดภัยที่แท้จริง (เนื่องจากไม่มีการตรวจสอบใครสามารถลบ / นำ ACE กลับมาใช้ใหม่ได้ตามความจำเป็น) ความปลอดภัยที่ผิดพลาดและเข้าสู่ทางเมื่อแก้ไขปัญหาจริง

แม้ว่าคุณจะไม่ชอบข้อโต้แย้งของฉันเกี่ยวกับ BUILTIN \ Administrators ที่มีการเข้าถึงคุณต้องการรักษาลำดับชั้นการสืบทอดให้เหมือนเดิมโดยใช้การสืบทอด "โฟลเดอร์นี้เท่านั้น" ตามความเหมาะสม การปิดกั้นการสืบทอดในลำดับชั้นการอนุญาตเป็นสัญญาณที่แน่นอนว่าบางสิ่งเกี่ยวกับการออกแบบนั้น "เสีย" (กลับหัว ฯลฯ )


1
คุณแนะนำให้สิทธิ์การเข้าถึงแบบเต็มกับโครงสร้างไดเรกทอรีทั้งหมดของ BUILTIN \ Administrators หรือไม่ ฉันเห็นว่าเรา (ผู้ดูแลระบบ) ไม่ควรเข้าถึงไดเรกทอรีผู้ใช้ / โปรไฟล์ของทุกคนโดยไม่ต้องเป็นเจ้าของ
pk

+1 รักประเด็นเกี่ยวกับการรักษาความปลอดภัยที่ผิดพลาด ...
DCookie

1

ก่อนอื่นขอบคุณสำหรับข้อความที่ตัดตอนมาของคุณ ฉันทำงานในสิ่งเดียวกัน แต่ติดอยู่ในที่ที่แตกต่าง ในช่อง SBS 2008 ของฉันโค้ดด้านล่างใช้ได้สำหรับฉัน (สมมติว่ามันทำงานได้สูงขึ้นแน่นอน) ฉันทำ icacls% userdir% / t ของโฟลเดอร์ผู้ใช้ใหม่ (ค่าเริ่มต้น) ที่สร้างขึ้นโดยระบบปฏิบัติการและเปรียบเทียบกับ icacls% userdir% / t ของโฟลเดอร์หลังจากเรียกใช้สคริปต์นี้และดูเหมือนว่า "O's และ ฉันถูกต้อง หวังว่ามันจะทำงานให้คุณเช่นกัน

set /p userDir=Enter the login of the user's directory you're modifying permissions for. (i.e. jDoe)
TAKEOWN /f "E:\Home Directories\%userDir%" /r /d y
ICACLS "E:\Home Directories\%userDir%" /reset /T
ICACLS "E:\Home Directories\%userDir%" /grant:r "MYDOMAIN\%userDir%":(oi)(ci)f
ICACLS "E:\Home Directories\%userDir%\*.*" /grant:r "SYSTEM":(OI)(CI)F /grant:r "MYDOMAIN\%userDir%":(OI)(CI)F /grant:r "MYDOMAIN\%username%":(OI)(CI)F
ICACLS "E:\Home Directories\%userDir%\*.*" /inheritance:r
ICACLS "E:\Home Directories\%userDir%\*.*" /setowner "MYDOMAIN\%userDir%" /T
ICACLS "E:\Home Directories\%userDir%" /remove "MYDOMAIN\%username%" /t

ขอแสดงความนับถืออย่างสูง,

 -d

ตรวจสอบให้แน่ใจว่าคุณยืนยันบรรทัดสุดท้ายของสคริปต์ของคุณ เป็นประสบการณ์ของฉันที่ ICACLS จะไม่ประสบความสำเร็จในการลบสิทธิ์ที่สืบทอดมา จะลบรายการในโฟลเดอร์ "MYDOMAIN \% ชื่อผู้ใช้%" แต่การอนุญาตของโฟลเดอร์ย่อยจะไม่ถูกแตะต้อง ดังนั้น "MYDOMAIN \% ชื่อผู้ใช้%" จะยังคงสามารถเข้าถึงโฟลเดอร์ย่อยได้หากเข้าถึงโดยตรงคุณจะไม่สามารถเรียกดูโฟลเดอร์เหล่านั้นได้ XCACLS.vbs แก้ไขสิ่งนี้ให้ฉัน cscript.exe xcacls.vbs "e: \ Test" / E / R "MYDOMAIN \% ชื่อผู้ใช้%"
pk

นั่นคือสิ่งที่ ส่วนหนึ่งเข้ามาในการแก้ไขของฉัน ทำ / การสืบทอด: r ในโฟลเดอร์หลักฉันมีปัญหาเดียวกัน แต่ทำมัน ในโฟลเดอร์หลักดูเหมือนจะทำเคล็ดลับ หลังจากเรียกใช้งานข้างต้นแล้ว% userdir% มี% username%, ระบบและผู้ดูแลระบบ แต่ทุกอย่างภายใต้นั้นเป็นเพียง% username% และระบบซึ่งเป็นวิธีที่เซิร์ฟเวอร์ตั้งค่าเริ่มต้น - สิ่งที่ฉันต้องการ

-1

ฉันต้องการให้คุณช่วยแก้ไขคำสั่งนี้ตามความต้องการของฉันถ้าเป็นไปได้ในทางเทคนิค

นี่คือโครงสร้าง

\ Server \ ปกครอง \ UserA \ ยูนิกซ์

\ Server \ ปกครอง \ UserB \ ยูนิกซ์

\ Server \ Parent \ UserC \ unix .... และอื่น ๆ ..

ภายใต้โฟลเดอร์ User $ แต่ละโฟลเดอร์จะมีโฟลเดอร์ชื่อ "unix"

ฉันต้องการเพิ่มผู้ใช้หรือกลุ่มที่มีสิทธิ์แบบเต็มในโฟลเดอร์ User $ ทั้งหมดที่แสดงรายการภายใต้โฟลเดอร์ "Parent" (ชื่อที่ใช้เป็นโครงสร้างด้านบน) แต่ต้องการแยกสิทธิ์เฉพาะในโฟลเดอร์ "unix"

ฉันมีคำสั่งนี้ใช้งานได้ดีสำหรับฉันในมุมมองของการบังคับใช้สิทธิ์ที่จำเป็น แต่ฉันไม่สามารถเพิ่มฟังก์ชั่นยกเว้นในนี้

icacls "\\ Server \ Parent \ UserA" / ให้สิทธิ์ Domain \ Group: (OI) (CI) F / T

คุณจะสามารถให้คำแนะนำในสถานการณ์นี้ได้หรือไม่?


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