เมื่อเริ่มต้น หลายโปรแกรมต้องการการยกระดับสิทธิ์ (ป้องกันบนไอคอนแอป) แต่จริงๆ แล้ว ไม่ต้องการสิทธิ์ผู้ดูแลระบบสำหรับการทำงานปกติ ตัวอย่างเช่น คุณสามารถให้สิทธิ์ผู้ใช้ด้วยตนเองในโฟลเดอร์แอปใน ProgramFiles และ/หรือรีจิสตรีคีย์ที่โปรแกรมใช้ ดังนั้นเมื่อเริ่มต้นโปรแกรมดังกล่าวภายใต้บัญชีผู้ใช้ที่ไม่ใช่ผู้ดูแลระบบ จะมีข้อความแจ้ง UAC ปรากฏขึ้น และผู้ใช้จะต้องป้อนรหัสผ่านผู้ดูแลระบบ (หากเปิดใช้งานการควบคุมบัญชีผู้ใช้บนคอมพิวเตอร์) เพื่อหลีกเลี่ยงกลไกนี้ ผู้ใช้จำนวนมากจะปิดใช้งาน UAC ง่ายๆ หรือให้สิทธิ์ผู้ดูแลระบบแก่ผู้ใช้โดยเพิ่มบัญชีผู้ใช้ในกลุ่ม "ผู้ดูแลระบบ" ในพื้นที่ แน่นอนว่าทั้งสองวิธีไม่ปลอดภัย
เหตุใดแอป Windows บางตัวจึงไม่ทำงานภายใต้ผู้ใช้มาตรฐานและต้องได้รับอนุญาตจากผู้ดูแลระบบ
แอพอาจต้องการสิทธิ์ของผู้ดูแลระบบเพื่อแก้ไขไฟล์บางไฟล์ (บันทึก การกำหนดค่า ฯลฯ) ในโฟลเดอร์ของตัวเองใน C:\Program Files (x86)\SomeApp โดยค่าเริ่มต้น ผู้ใช้ไม่มีสิทธิ์ในการแก้ไข (เขียนและแก้ไข) ในไดเรกทอรีนี้ เพื่อให้โปรแกรมนี้ทำงานได้ตามปกติ จำเป็นต้องได้รับการอนุญาตจากผู้ดูแลระบบ ในการแก้ปัญหานี้ คุณต้องให้สิทธิ์ แก้ไข . ด้วยตนเอง และ/หรือ เขียน การอนุญาตสำหรับผู้ใช้ (หรือกลุ่มผู้ใช้ในตัว) ในโฟลเดอร์แอปที่ระดับระบบไฟล์ NTFS
หมายเหตุ . อันที่จริง ไม่แนะนำให้เก็บข้อมูลแอปพลิเคชันที่เปลี่ยนแปลงไว้ในโฟลเดอร์ของตัวเองภายใต้ C:\Program Files จะดีกว่าที่จะเก็บข้อมูลแอพในโปรไฟล์ผู้ใช้ แต่เป็นคำถามเกี่ยวกับความเกียจคร้านและความไร้ความสามารถของนักพัฒนาแอป
จะเรียกใช้โปรแกรมที่ต้องใช้สิทธิ์ของผู้ดูแลระบบภายใต้ผู้ใช้มาตรฐานได้อย่างไร
ก่อนหน้านี้ เราได้อธิบายวิธีปิดใช้งานข้อความแจ้ง UAC สำหรับบางแอปโดยใช้ RunAsInvoker พารามิเตอร์. อย่างไรก็ตาม วิธีนี้ไม่ยืดหยุ่นพอ
คุณยังสามารถใช้ RunAs กับรหัสผ่านผู้ดูแลระบบที่บันทึกไว้ (ใน Windows Credentials Manager) โดยใช้ /SAVECRED
ตัวเลือก. นอกจากนี้ยังไม่ปลอดภัยเนื่องจากผู้ใช้สามารถใช้รหัสผ่านข้อมูลประจำตัวของผู้ดูแลระบบที่บันทึกไว้เพื่อเรียกใช้โปรแกรมใดๆ บนคอมพิวเตอร์เครื่องนี้
ลองพิจารณาวิธีที่ง่ายกว่าในการบังคับโปรแกรมใดๆ ให้ทำงานโดยไม่มีสิทธิ์ของผู้ดูแลระบบ (โดยไม่ต้องป้อนรหัสผ่านของผู้ดูแลระบบ) และด้วยการเปิดใช้งาน UAC (ระดับ 4, 3 หรือ 2 ของตัวเลื่อน UAC)
ลองใช้ Registry Editor เป็นตัวอย่าง — regedit.exe (อยู่ในโฟลเดอร์ C:\Windows\) สังเกตโล่ UAC ถัดจากไอคอนแอป ไอคอนนี้หมายความว่าจะมีการขอยกระดับสิทธิ์ผ่าน UAC เพื่อเรียกใช้โปรแกรมนี้
หากคุณเรียกใช้ regedit.exe
คุณจะเห็นหน้าต่างการควบคุมบัญชีผู้ใช้เพื่อขอข้อมูลประจำตัวของผู้ดูแลระบบ (Do you want to allow this app to make changes to your device?
). หากคุณไม่ได้ระบุรหัสผ่านและไม่ยืนยันระดับความสูง แอปจะไม่เริ่มทำงาน
ลองข้ามคำขอ UAC สำหรับโปรแกรมนี้กัน สร้างไฟล์ข้อความ run-as-non-admin.bat มีรหัสต่อไปนี้บนเดสก์ท็อปของคุณ:
cmd /min /C "set __COMPAT_LAYER=RUNASINVOKER && start "" %1"
ในการบังคับให้ regedit.exe ทำงานโดยไม่มีสิทธิ์ของผู้ดูแลระบบและเพื่อระงับข้อความแจ้ง UAC ให้ลากไฟล์ EXE ที่คุณต้องการเริ่มไปยังไฟล์ BAT นี้บนเดสก์ท็อปอย่างง่าย
จากนั้น Registry Editor ควรเริ่มทำงานโดยไม่มีข้อความแจ้ง UAC และไม่ต้องป้อนรหัสผ่านผู้ดูแลระบบ หากคุณเปิดตัวจัดการงานและเพิ่ม สูง คุณจะเห็นว่ามีกระบวนการ regedit.exe ที่ไม่มีสถานะยกระดับ (เรียกใช้โดยมีสิทธิ์ผู้ใช้ที่ไม่ใช่ผู้ดูแลระบบ)
ลองแก้ไขพารามิเตอร์ใด ๆ ในกลุ่มรีจิสทรี HKEY_LOCAL_MACHINE อย่างที่คุณเห็น ผู้ใช้ไม่สามารถแก้ไขรายการในรีจิสตรีคีย์นี้ได้ (ผู้ใช้ไม่มีสิทธิ์ในการเขียนไปยังรีจิสตรีคีย์ของระบบ) แต่คุณสามารถเพิ่มหรือแก้ไขรีจิสตรีคีย์และพารามิเตอร์ในกลุ่มผู้ใช้ของคุณได้ — HKEY_CURRENT_USER
ในทำนองเดียวกัน คุณสามารถเรียกใช้แอปใดก็ได้โดยใช้ไฟล์ BAT เพียงระบุเส้นทางไปยังไฟล์ปฏิบัติการ
run-app-as-non-admin.bat Set ApplicationPath="C:\Program Files\SomeApp\testapp.exe"
cmd /min /C "set __COMPAT_LAYER=RUNASINVOKER && start "" %ApplicationPath%"
คุณยังสามารถเพิ่มเมนูบริบทที่อนุญาตให้เรียกใช้แอปทั้งหมดโดยไม่ต้องยกระดับได้ ในการทำเช่นนั้น ให้สร้างไฟล์ RunAsUser.REG คัดลอกโค้ดต่อไปนี้ลงไป บันทึกและนำเข้าสู่รีจิสทรีของ Windows โดยดับเบิลคลิกที่ไฟล์ reg (คุณจะต้องได้รับอนุญาตจากผู้ดูแลระบบเพื่อใช้การเปลี่ยนแปลงนี้)
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\*\shell\forcerunasinvoker] @="Run as user without UAC privilege elevation" [HKEY_CLASSES_ROOT\*\shell\forcerunasinvoker\command] @="cmd /min /C \"set __COMPAT_LAYER=RUNASINVOKER && start \"\" \"%1\"\""
หลังจากนั้น ในการเรียกใช้แอปพลิเคชันใดๆ ที่ไม่มีสิทธิ์ของผู้ดูแลระบบ เพียงเลือก “เรียกใช้ในฐานะผู้ใช้โดยไม่มีการยกระดับสิทธิ์ UAC ” ในเมนูบริบทของ File Explorer
คุณสามารถปรับใช้ตัวเลือกนี้กับคอมพิวเตอร์ทุกเครื่องในโดเมนได้โดยการนำเข้าพารามิเตอร์รีจิสทรีโดยใช้ GPOผมขอเตือนคุณอีกครั้งว่าการใช้โปรแกรมในโหมด RUNASINVOKER จะไม่อนุญาตให้คุณยกระดับโปรแกรม RunAsInvoker ระงับ UAC prompt และบอกโปรแกรมว่าควรรันด้วยสิทธิ์ของผู้ใช้ปัจจุบัน และไม่ขอการยกระดับสิทธิ์ หากโปรแกรมต้องการสิทธิ์ระดับสูงจริงๆ เพื่อแก้ไขการตั้งค่าระบบหรือไฟล์ โปรแกรมจะไม่ทำงานหรือจะขออนุญาตจากผู้ดูแลระบบอีกครั้ง
จะข้าม UAC ด้วย RunAsInvoker ใน __COMPAT_LAYER ได้อย่างไร
ตัวแปรสภาพแวดล้อม __COMPAT_LAYER ช่วยให้คุณสามารถตั้งค่าระดับความเข้ากันได้ที่แตกต่างกันสำหรับแอปพลิเคชัน (ความเข้ากันได้ ในคุณสมบัติของไฟล์ EXE) เมื่อใช้ตัวแปรนี้ คุณสามารถระบุการตั้งค่าความเข้ากันได้ที่จะใช้เมื่อเริ่มต้นโปรแกรม ตัวอย่างเช่น ในการเริ่มแอปในโหมดความเข้ากันได้ของ Windows 8 และความละเอียด 640×480 ให้ตั้งค่าดังต่อไปนี้:
set __COMPAT_LAYER=Win8RTM 640x480
ตัวแปร __COMPAT_LAYER มีตัวเลือกที่เราสนใจ มีพารามิเตอร์ดังต่อไปนี้:
- RunAsInvoker – เรียกใช้แอปที่มีสิทธิ์ของกระบวนการหลักโดยไม่ต้องแจ้ง UAC
- RunAsHighest – เรียกใช้โปรแกรมที่มีสิทธิ์ระดับสูงสุดสำหรับผู้ใช้ (พร้อมท์ UAC จะปรากฏขึ้นหากผู้ใช้มีสิทธิ์ของผู้ดูแลระบบ)
- RunAsAdmin – เรียกใช้แอปในฐานะผู้ดูแลระบบ (พร้อมท์ UAC ปรากฏขึ้นในแต่ละครั้ง)
รหัส CMD ต่อไปนี้เปิดใช้งานโหมด RunAsInvoker สำหรับกระบวนการปัจจุบันและรันโปรแกรมที่ระบุโดยไม่ต้องยกระดับ:
set __COMPAT_LAYER=RUNASINVOKER
start "" "C:\Program Files\MyApp\testapp.exe"
เปิดใช้งานโหมด RunAsInvoker ในรายการไฟล์ EXE
ดังที่เราได้กล่าวไว้ข้างต้น Windows 10 จะแสดงไอคอน UAC shield สำหรับโปรแกรมที่ต้องการการยกระดับเพื่อทำงาน นักพัฒนากำหนดข้อกำหนดนี้เมื่อรวบรวมแอปพลิเคชันในโปรแกรม รายการ .
คุณสามารถแก้ไขรายการของไฟล์ exe ใดๆ และปิดใช้งานข้อกำหนดในการรันโปรแกรมในโหมดยกระดับได้
หากต้องการแก้ไขรายการโปรแกรม คุณสามารถใช้ แฮ็กเกอร์ทรัพยากร . ฟรี เครื่องมือ. เปิดไฟล์ปฏิบัติการของแอปใน Resource Hacker
ในตัวอย่างนี้ ฉันจะแก้ไขรายการของAutologon.exe
เครื่องมือโดย Sysinternals ซึ่งสามารถใช้เพื่อเข้าสู่ระบบ Windows โดยอัตโนมัติโดยไม่ต้องใช้รหัสผ่าน ในแผนผังด้านซ้าย ให้ไปที่ส่วน Manifest และเปิดรายการโปรแกรม ให้ความสนใจกับส่วน xml ต่อไปนี้:
<requestedPrivileges> <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/> </requestedPrivileges>
ต้องขอบคุณ requireAdministrator ตัวเลือกที่ Windows พยายามเรียกใช้โปรแกรมนี้ในฐานะผู้ดูแลระบบเสมอ
เปลี่ยน requireAdministrator เป็น asInvoker และบันทึกการเปลี่ยนแปลงในไฟล์ exe
โปรดทราบว่าตอนนี้ UAC shield หายไปจากไอคอนโปรแกรม และคุณสามารถเรียกใช้ได้โดยไม่ต้องขอรหัสผ่านผู้ดูแลระบบด้วยการอนุญาตของผู้ใช้ปัจจุบัน
หากไฟล์แอปปฏิบัติการถูกเซ็นชื่อด้วย MS Authenticode (ใบรับรองการลงนามโค้ด) หลังจากแก้ไขไฟล์ exe ไฟล์นั้นอาจหยุดทำงานหรือส่งคำเตือน
ในกรณีนี้ คุณสามารถบังคับให้โปรแกรมใช้ไฟล์รายการภายนอกได้ สร้างไฟล์ข้อความธรรมดา appname.exe.manifest (เช่น Autologon.exe.manifest
) ในไดเร็กทอรีที่มีไฟล์ exe และคัดลอกโค้ดรายการจาก Resource Hacker ลงไป เปลี่ยน requireAdministrator เป็น asInvoker . บันทึกไฟล์รายการ
หากต้องการให้ Windows พยายามใช้ไฟล์รายการภายนอกเสมอเมื่อเปิดไฟล์ exe ให้เปิดใช้งานพารามิเตอร์รีจิสทรีพิเศษ:
REG ADD "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide" /v PreferExternalManifest /t REG_DWORD /d 1 /f
รีสตาร์ท Windows และตรวจสอบว่าโปรแกรมกำลังใช้ไฟล์รายการภายนอกที่ระบุว่าจะทำงานโดยไม่มีสิทธิ์ของผู้ดูแลระบบ