บทนำ
Access-based Enumeration (ABE) ช่วยซ่อน Objects (Files และ Folders) จาก User ที่ไม่มี NTFS Permissions (Read หรือ List) บน Network Shared Folder เพื่อเข้าถึงได้ ดังนั้นสามารถให้ความเป็นส่วนตัวของข้อมูลใน Shared Folder เพิ่มขึ้น (จากการซ่อนโครงสร้างและชื่อโฟลเดอร์/ไฟล์) เพิ่ม Usability เนื่องจาก User ไม่เห็นข้อมูลที่ไม่เกี่ยวข้อง (ไม่มีสิทธิ์เข้าถึง) และสำคัญที่สุด ช่วยประหยัด System Admin จากคำถามซ้ำๆ ของ User ว่า "ทำไมผมเข้าถึงโฟลเดอร์นี้ไม่ได้!!!" ลองศึกษาเทคโนโลยีนี้ รายละเอียดการตั้งค่า และการใช้ ABE ใน Windows Versions ต่างๆ
การทำงานของการเข้าถึง Shared Folder ใน Windows
ข้อจำกัดของ Network Shared Folders ใน Windows คือ โดย Default ทุก User สามารถเห็นโครงสร้างและรายการ Files/Directories ทั้งหมดใน Shared Folder รวมถึงที่ไม่มี NTFS Permissions เข้าถึง (พยายามเปิดจะได้ Error "Access Denied") ทำไมไม่ซ่อน Files/Folders นั้นจาก User ที่ไม่มีสิทธิ์? ABE ช่วยทำได้ โดย Enable ABE บน Shared Folder User แต่ละคนจะเห็นรายการ Files/Folders ต่างกันใน Network Share เดียวกัน ตาม Individual Access Permissions (ACL) ของแต่ละ User
กระบวนการ Interaction ระหว่าง Client และ Server (SMB)
- Client Request Server เข้าถึง Directory ใน Network Shared Folder
- LanmanServer Service บน Server ตรวจสอบ User Permissions เข้าถึง Folder นั้น
- หาก Allow (NTFS Permissions: List Content, Read, Write) User เห็น Directory Contents
- User Request เข้าถึง File/Subfolder ทางเดียวกัน (ดูว่าใครเปิด File ใน Network Folder ได้ที่นี่)
- หาก Denied User จะได้รับ Notification ตามลำดับ
จาก Scheme นี้เห็นว่า Server แสดง Contents ทั้งหมดของ Folder ให้ User ก่อน แล้วค่อยเช็ค NTFS Permissions ตอน User พยายามเปิด File/Folder เฉพาะเจาะจง
ABE ทำให้ตรวจสอบ Access Permissions บน File System Objects ก่อน ที่ User จะได้รับรายการ Folder Contents ดังนั้นรายการสุดท้ายจะมีเฉพาะ Objects ที่ User มี NTFS Permissions เข้าถึง (อย่างน้อย Read-only) ทั้งหมดที่เข้าถึงไม่ได้จะถูกซ่อน (Hidden)
หมายความว่า User จากแผนกหนึ่ง (เช่น Warehouse) จะเห็นรายการ Files/Folders ใน Shared Folder (\\filesrv1\docs) แตกต่างจาก User อีกแผนก (เช่น IT) ที่เห็นโฟลเดอร์มากกว่า
ข้อเสียของ ABE
ข้อเสียหลักคือ Extra Load บน Server โชว์ชัดเจนบน High-load File Servers ยิ่ง Objects ใน Directory เยอะ และ Users เปิด Files เยอะ ยิ่ง Delay นานขึ้น ตาม Microsoft หากมี 15,000 Objects ใน Folder ที่แสดง จะช้าลง 1-3 วินาที แนะนำให้ออกแบบ Shared Folder Structure ให้ชัดเจนและเป็นลำดับชั้น เพื่อลด Delay ตอนเปิดโฟลเดอร์
หมายเหตุ: ABE ไม่ซ่อนรายการ Network Shared บน File Server ซ่อนแค่ Contents เท่านั้น หากต้องการซ่อน Shared Folder จาก User ให้เพิ่มสัญลักษณ์ $ ท้ายชื่อ Share
จัดการ ABE ได้จาก Command Prompt (abecmd.exe), GUI, PowerShell หรือ Special API
ข้อจำกัดของ Access-Based Enumeration
ABE บน Windows ไม่ทำงานในกรณี:
- ใช้ Windows XP หรือ Windows Server 2003 โดยไม่มี Service Pack 1 เป็น File Server
- ดู Directories แบบ Local (โดยตรงจาก Server)
- สำหรับ Members ของ Local File Server Administrators Group (เห็นรายการ Files ทั้งหมดเสมอ)
การใช้ ABE บน Windows Server 2008/2008 R2
ใน Windows Server 2008/R2 ใช้ ABE ได้เลย ไม่ต้อง Install Components เพิ่ม เพราะ ABE Management Feature Built-in อยู่ใน Windows GUI แล้ว Enable ABE สำหรับ Folder ใด Folder หนึ่ง: เปิด MMC Share and Storage Management (Start → Programs → Administrative Tools → Share and Storage Management) ไป Properties ของ Share ที่ต้องการ → Advanced Settings → Check Enable access-based enumeration
การตั้งค่า ABE บน Windows Server 2012 R2/2016
ABE Configuration ใน Windows Server 2012 R2 / 2016 ก็ง่ายเหมือนกัน ต้อง Install File and Storage Services Role ก่อน แล้วไป Share Properties ใน Server Manager → Section Settings → Check Enable access-based enumeration
การ Implement ABE บน Windows Server 2003
Windows Server 2003 (ไม่รองรับแล้ว) รองรับ ABE ตั้งแต่ Service Pack 1 ต้อง Download และ Install Package จาก https://www.microsoft.com/en-us/download/details.aspx?id=17510 ระหว่าง Install ระบุว่า ABE จะ Enable สำหรับ All Shared Folders หรือ Configure Manual หากเลือก Manual Tab ใหม่ Access-based Enumeration จะปรากฏใน Network Share Properties หลัง Install Check Enable access-based enumeration on this shared folder ใน Properties
หมายเหตุ: Windows 2003 รองรับ DFS-based Access Based Enumeration แต่ตั้งค่าได้เฉพาะ Command Prompt ด้วย cacls
จัดการ ABE จาก Command Prompt
ใช้ Utility Abecmd.exe (ส่วนของ ABE Package สำหรับ Windows Server 2003 SP1)
Enable ABE สำหรับ All Shares: abecmd /enable /all
Enable ABE สำหรับ Folder เฉพาะ (เช่น Docs): abecmd /enable Docs
จัดการ Access Based Enumeration ด้วย PowerShell
ใช้ SMBShare PowerShell Module (Installed by Default ใน Windows 10/8.1 และ Windows Server 2016/2012 R2) จัดการ ABE Settings สำหรับ Folder เฉพาะ
List Properties ของ Shared Folder:
Get-SmbShare Install|fl *
ดูค่า Attribute FolderEnumerationMode ในตัวอย่างคือ Unrestricted หมายถึง ABE Disabled สำหรับ Folder นี้
ตรวจสอบสถานะ ABE ทุก Shared Folders:
Get-SmbShare | Select-Object Name,FolderEnumerationMode
Enable ABE สำหรับ Folder เฉพาะ:
Get-SmbShare Install | Set-SmbShare -FolderEnumerationMode AccessBased
Enable ABE สำหรับ All Published Network Folders (รวม Administrative Shares ADMIN$, C$, E$, IPC$...):
Get-SmbShare | Set-SmbShare -FolderEnumerationMode AccessBased
Disable ABE:
Get-SmbShare Install | Set-SmbShare -FolderEnumerationMode Unrestricted
Access-Based Enumeration ใน Windows 10 / 8.1 / 7
User หลายคน (โดยเฉพาะ Home/SOHO Networks) ต้องการใช้ ABE Features แต่ Microsoft Client OSs ไม่มี GUI หรือ Command Interface จัดการ ABE
ใน Windows 10 (Server 2016) และ Windows 8.1 (Server 2012R2) ใช้ PowerShell จัดการ ABE ได้ (ดู Section ข้างต้น) รุ่นเก่ากว่า ต้อง Install PowerShell ล่าสุด (>= 5.0) หรือใช้ abecmd.exe จาก Windows Server 2003 Package (ทำงานได้ดีบน Client OSs) เนื่องจาก Windows Server 2003 ABE Package ไม่ได้ติดตั้งบน Windows 10, 8.1, 7 ต้อง Install บน Windows Server 2003 ก่อน แล้ว Copy จาก C:\windows\system32 ไป Folder เดียวกันบน Client แล้ว Enable ABE ตามคำสั่งข้างต้น
หมายเหตุ: ใน Corporate Environment ABE ร่วมกับ DFS Folders ได้ดีมาก โดยซ่อน Folders จาก User และให้ Public Folders Tree Structure สะดวกขึ้น Enable ABE ใน DFS ได้ผ่าน DFS Management หรือ dfsutil.exe: dfsutil property abde enable \\namespace_root
เพิ่มเติม สามารถ Enable ABE บน Computers ใน AD Domain ด้วย GPO ผ่าน GPP ใน Section: Computer Configuration → Preferences → Windows Settings → Network Shares ใน Properties ของ Network Folder มี Option Access-Based Enumeration เปลี่ยนค่าเป็น Enable ABE Mode จะ Enable สำหรับ Shared Folders ทั้งหมดที่สร้างด้วย GPO นี้