Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Windows Server

ไดรฟ์เครือข่ายที่แมปไว้ไม่แสดงในโปรแกรมที่รันแบบ Elevated

หากคุณใช้ไดรฟ์เครือข่ายที่แมปไว้ คุณอาจสังเกตเห็นว่ามันไม่แสดงในแอปที่รันด้วยสิทธิ์ผู้ดูแลระบบ (รวมถึง cmd และ PowerShell) การตั้งค่า User Account Control (UAC) เริ่มต้นไม่ได้อนุญาตให้เข้าถึงไดรฟ์เครือข่ายที่แมปไว้ (ผ่าน net use) จากแอปพลิเคชันที่รันในโหมด Elevated (Run as administrator) หมายความว่าเมื่อคุณรัน Command Prompt หรือ File Manager (เช่น Total Commander) ด้วยสิทธิ์ที่เพิ่มขึ้น พวกมันจะไม่แสดงตัวอักษรไดรฟ์ของโฟลเดอร์ที่แชร์และแมปไว้

เงื่อนไขที่ทำให้เกิดปัญหานี้

คุณอาจเผชิญปัญหานี้หากเงื่อนไขต่อไปนี้เป็นจริง:

  • ไดรฟ์เครือข่ายถูกแมปในเซสชันของผู้ใช้ (ผ่าน GPO หรือด้วยตนเองผ่าน net use);
  • UAC เปิดใช้งานบนคอมพิวเตอร์ (พารามิเตอร์ GPO User Account Control: Behavior of the elevation prompt for administrators in Admin Approval Mode ตั้งค่าเป็นค่าเริ่มต้น "Prompt for credentials");
  • ผู้ใช้ปัจจุบันมีสิทธิ์ผู้ดูแลระบบท้องถิ่นบนคอมพิวเตอร์และรันแอปในโหมด "Run as administrator"

ในกรณีนี้ ไดรฟ์เครือข่ายจะแสดงใน Windows File Explorer และในแอปทั่วไป แต่จะไม่แสดงในแอปพลิเคชันใดๆ ที่รันในโหมด Elevated

⚠ สำคัญ: ไม่แนะนำให้ปิดใช้งาน UAC โดยสิ้นเชิง แม้สำหรับโปรแกรมเฉพาะเจาะจง

ทำไมจึงเกิดขึ้น?

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

คุณสามารถใช้คำสั่ง whoami /all ในสองเซสชัน cmd.exe (ปกติและ Elevated) ของผู้ใช้คนเดียวกันและเปรียบเทียบสิทธิ์ปัจจุบัน คุณจะเห็นว่ามันแตกต่างกันมาก ตารางต่อไปนี้แสดงความแตกต่างของกลุ่มความปลอดภัยและสิทธิ์ปัจจุบันในแต่ละเซสชัน

วิธีแก้ไข: EnableLinkedConnections

มีวิธีแก้ไขที่ง่ายกว่า โดยการเปลี่ยนแปลงใน Registry:

  1. เปิด Registry Editor (regedit.exe);
  2. ไปที่คีย์รีจิสทรี HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System;
  3. สร้างพารามิเตอร์ใหม่ (ประเภท DWORD) ชื่อ EnableLinkedConnections со значением 1;
  4. รีสตาร์ทคอมพิวเตอร์ (หรือรีสตาร์ทบริการ LanmanWorkstation ด้วยคำสั่ง: get-service LanmanWorkstation | Restart-Service –Force, และล็อกอิน Windows ใหม่)

คุณสามารถทำการเปลี่ยนแปลงเดียวกันด้วยคำสั่งเดียว:

reg add "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System" /v "EnableLinkedConnections" /t REG_DWORD /d 0x00000001 /f

หรือด้วย PowerShell:

New-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System' -Name EnableLinkedConnections -Value 1 -PropertyType 'DWord'

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

วิธีนี้ทำงานบน Windows ทุกเวอร์ชันตั้งแต่ Vista ถึง Windows 10/Windows Server 2019

💡 หมายเหตุ: น่าเสียดายที่ไม่มีการตั้งค่า GPO สำหรับเปิดใช้งานโหมด EnableLinkedConnections เพื่อนำการตั้งค่านี้ไปใช้กับคอมพิวเตอร์ในโดเมน คุณต้องปรับใช้พารามิเตอร์รีจิสที้นี้ผ่าน GPP

วิธีการทำงาน

หลังจากคุณเปิดใช้งานพารามิเตอร์รีจิสทรี EnableLinkedConnections LanmanWorkstation และ LSA (lsass.exe) จะตรวจสอบ Access Token ที่สองที่เชื่อมโยงกับเซสชันของผู้ใช้ปัจจุบัน หากพบ Token นี้ รายการไดรฟ์เครือข่ายที่แมปไว้จะถูกคัดลอกจาก Token หนึ่งไปยังอีก Token หนึ่ง ดังนั้น ไดรฟ์เครือข่ายที่แมปในโหมดพิเศษจะมองเห็นได้ในโหมดปกติ และในทางกลับกัน

วิธีทางเลือก: Symbolic Link

คุณสามารถสร้าง Symbolic Link ไปยังโฟลเดอร์เครือข่ายที่แชร์เป้าหมายได้ เช่น:

mklink /D c:\docs \\dublin-fs1\docs

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

หลังจากเปิดใช้งานพารามิเตอร์ EnableLinkedConnections ไดรฟ์ที่แมปไว้จะพร้อมใช้งานจาก Scheduled Tasks ที่เปิดภายใต้ผู้ใช้ปัจจุบัน หากงานรันเป็น LocalSystem หรือผู้ใช้อื่น ไดรฟ์เครือข่ายที่แมปของผู้ใช้ปัจจุบันจะไม่พร้อมใช้งาน