Computer >> คอมพิวเตอร์ >  >> ระบบ >> Windows Server

จะรันโปรแกรมโดยไม่มีสิทธิ์ของผู้ดูแลระบบและข้าม UAC Prompt ได้อย่างไร

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

เหตุใดแอป Windows บางตัวจึงไม่ทำงานภายใต้ผู้ใช้มาตรฐานและต้องได้รับอนุญาตจากผู้ดูแลระบบ

แอพอาจต้องการสิทธิ์ของผู้ดูแลระบบเพื่อแก้ไขไฟล์บางไฟล์ (บันทึก การกำหนดค่า ฯลฯ) ในโฟลเดอร์ของตัวเองใน C:\Program Files (x86)\SomeApp โดยค่าเริ่มต้น ผู้ใช้ไม่มีสิทธิ์ในการแก้ไข (เขียนและแก้ไข) ในไดเรกทอรีนี้ เพื่อให้โปรแกรมนี้ทำงานได้ตามปกติ จำเป็นต้องได้รับการอนุญาตจากผู้ดูแลระบบ ในการแก้ปัญหานี้ คุณต้องให้สิทธิ์ แก้ไข . ด้วยตนเอง และ/หรือ เขียน การอนุญาตสำหรับผู้ใช้ (หรือกลุ่มผู้ใช้ในตัว) ในโฟลเดอร์แอปที่ระดับระบบไฟล์ NTFS

จะรันโปรแกรมโดยไม่มีสิทธิ์ของผู้ดูแลระบบและข้าม UAC Prompt ได้อย่างไร

หมายเหตุ . อันที่จริง ไม่แนะนำให้เก็บข้อมูลแอปพลิเคชันที่เปลี่ยนแปลงไว้ในโฟลเดอร์ของตัวเองภายใต้ C:\Program Files จะดีกว่าที่จะเก็บข้อมูลแอพในโปรไฟล์ผู้ใช้ แต่เป็นคำถามเกี่ยวกับความเกียจคร้านและความไร้ความสามารถของนักพัฒนาแอป

จะเรียกใช้โปรแกรมที่ต้องใช้สิทธิ์ของผู้ดูแลระบบภายใต้ผู้ใช้มาตรฐานได้อย่างไร

ก่อนหน้านี้ เราได้อธิบายวิธีปิดใช้งานข้อความแจ้ง UAC สำหรับบางแอปโดยใช้ RunAsInvoker พารามิเตอร์. อย่างไรก็ตาม วิธีนี้ไม่ยืดหยุ่นพอ

คุณยังสามารถใช้ RunAs กับรหัสผ่านผู้ดูแลระบบที่บันทึกไว้ (ใน Windows Credentials Manager) โดยใช้ /SAVECRED ตัวเลือก. นอกจากนี้ยังไม่ปลอดภัยเนื่องจากผู้ใช้สามารถใช้รหัสผ่านข้อมูลประจำตัวของผู้ดูแลระบบที่บันทึกไว้เพื่อเรียกใช้โปรแกรมใดๆ บนคอมพิวเตอร์เครื่องนี้

ลองพิจารณาวิธีที่ง่ายกว่าในการบังคับโปรแกรมใดๆ ให้ทำงานโดยไม่มีสิทธิ์ของผู้ดูแลระบบ (โดยไม่ต้องป้อนรหัสผ่านของผู้ดูแลระบบ) และด้วยการเปิดใช้งาน UAC (ระดับ 4, 3 หรือ 2 ของตัวเลื่อน UAC)

ลองใช้ Registry Editor เป็นตัวอย่าง — regedit.exe (อยู่ในโฟลเดอร์ C:\Windows\) สังเกตโล่ UAC ถัดจากไอคอนแอป ไอคอนนี้หมายความว่าจะมีการขอยกระดับสิทธิ์ผ่าน UAC เพื่อเรียกใช้โปรแกรมนี้

จะรันโปรแกรมโดยไม่มีสิทธิ์ของผู้ดูแลระบบและข้าม UAC Prompt ได้อย่างไร

หากคุณเรียกใช้ regedit.exe คุณจะเห็นหน้าต่างการควบคุมบัญชีผู้ใช้เพื่อขอข้อมูลประจำตัวของผู้ดูแลระบบ (Do you want to allow this app to make changes to your device? ). หากคุณไม่ได้ระบุรหัสผ่านและไม่ยืนยันระดับความสูง แอปจะไม่เริ่มทำงาน

จะรันโปรแกรมโดยไม่มีสิทธิ์ของผู้ดูแลระบบและข้าม UAC Prompt ได้อย่างไร

ลองข้ามคำขอ UAC สำหรับโปรแกรมนี้กัน สร้างไฟล์ข้อความ run-as-non-admin.bat มีรหัสต่อไปนี้บนเดสก์ท็อปของคุณ:

cmd /min /C "set __COMPAT_LAYER=RUNASINVOKER && start "" %1"

ในการบังคับให้ regedit.exe ทำงานโดยไม่มีสิทธิ์ของผู้ดูแลระบบและเพื่อระงับข้อความแจ้ง UAC ให้ลากไฟล์ EXE ที่คุณต้องการเริ่มไปยังไฟล์ BAT นี้บนเดสก์ท็อปอย่างง่าย

จะรันโปรแกรมโดยไม่มีสิทธิ์ของผู้ดูแลระบบและข้าม UAC Prompt ได้อย่างไร

จากนั้น Registry Editor ควรเริ่มทำงานโดยไม่มีข้อความแจ้ง UAC และไม่ต้องป้อนรหัสผ่านผู้ดูแลระบบ หากคุณเปิดตัวจัดการงานและเพิ่ม สูง คุณจะเห็นว่ามีกระบวนการ regedit.exe ที่ไม่มีสถานะยกระดับ (เรียกใช้โดยมีสิทธิ์ผู้ใช้ที่ไม่ใช่ผู้ดูแลระบบ)

จะรันโปรแกรมโดยไม่มีสิทธิ์ของผู้ดูแลระบบและข้าม UAC Prompt ได้อย่างไร

ลองแก้ไขพารามิเตอร์ใด ๆ ในกลุ่มรีจิสทรี HKEY_LOCAL_MACHINE อย่างที่คุณเห็น ผู้ใช้ไม่สามารถแก้ไขรายการในรีจิสตรีคีย์นี้ได้ (ผู้ใช้ไม่มีสิทธิ์ในการเขียนไปยังรีจิสตรีคีย์ของระบบ) แต่คุณสามารถเพิ่มหรือแก้ไขรีจิสตรีคีย์และพารามิเตอร์ในกลุ่มผู้ใช้ของคุณได้ — HKEY_CURRENT_USER

จะรันโปรแกรมโดยไม่มีสิทธิ์ของผู้ดูแลระบบและข้าม UAC Prompt ได้อย่างไร

ในทำนองเดียวกัน คุณสามารถเรียกใช้แอปใดก็ได้โดยใช้ไฟล์ 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 Prompt ได้อย่างไร

หลังจากนั้น ในการเรียกใช้แอปพลิเคชันใดๆ ที่ไม่มีสิทธิ์ของผู้ดูแลระบบ เพียงเลือก “เรียกใช้ในฐานะผู้ใช้โดยไม่มีการยกระดับสิทธิ์ UAC ” ในเมนูบริบทของ File Explorer

คุณสามารถปรับใช้ตัวเลือกนี้กับคอมพิวเตอร์ทุกเครื่องในโดเมนได้โดยการนำเข้าพารามิเตอร์รีจิสทรีโดยใช้ GPO

จะรันโปรแกรมโดยไม่มีสิทธิ์ของผู้ดูแลระบบและข้าม UAC Prompt ได้อย่างไร

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

จะข้าม UAC ด้วย RunAsInvoker ใน __COMPAT_LAYER ได้อย่างไร

ตัวแปรสภาพแวดล้อม __COMPAT_LAYER ช่วยให้คุณสามารถตั้งค่าระดับความเข้ากันได้ที่แตกต่างกันสำหรับแอปพลิเคชัน (ความเข้ากันได้ ในคุณสมบัติของไฟล์ EXE) เมื่อใช้ตัวแปรนี้ คุณสามารถระบุการตั้งค่าความเข้ากันได้ที่จะใช้เมื่อเริ่มต้นโปรแกรม ตัวอย่างเช่น ในการเริ่มแอปในโหมดความเข้ากันได้ของ Windows 8 และความละเอียด 640×480 ให้ตั้งค่าดังต่อไปนี้:

set __COMPAT_LAYER=Win8RTM 640x480

จะรันโปรแกรมโดยไม่มีสิทธิ์ของผู้ดูแลระบบและข้าม UAC Prompt ได้อย่างไร

ตัวแปร __COMPAT_LAYER มีตัวเลือกที่เราสนใจ มีพารามิเตอร์ดังต่อไปนี้:

  • RunAsInvoker – เรียกใช้แอปที่มีสิทธิ์ของกระบวนการหลักโดยไม่ต้องแจ้ง UAC
  • RunAsHighest – เรียกใช้โปรแกรมที่มีสิทธิ์ระดับสูงสุดสำหรับผู้ใช้ (พร้อมท์ UAC จะปรากฏขึ้นหากผู้ใช้มีสิทธิ์ของผู้ดูแลระบบ)
  • RunAsAdmin – เรียกใช้แอปในฐานะผู้ดูแลระบบ (พร้อมท์ UAC ปรากฏขึ้นในแต่ละครั้ง)
หมายความว่าพารามิเตอร์ RunAsInvoker ไม่ได้ให้สิทธิ์ผู้ดูแลระบบ แต่จะระงับเฉพาะข้อความแจ้ง 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 Prompt ได้อย่างไร

โปรดทราบว่าตอนนี้ UAC shield หายไปจากไอคอนโปรแกรม และคุณสามารถเรียกใช้ได้โดยไม่ต้องขอรหัสผ่านผู้ดูแลระบบด้วยการอนุญาตของผู้ใช้ปัจจุบัน

จะรันโปรแกรมโดยไม่มีสิทธิ์ของผู้ดูแลระบบและข้าม UAC Prompt ได้อย่างไร

หากไฟล์แอปปฏิบัติการถูกเซ็นชื่อด้วย 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 และตรวจสอบว่าโปรแกรมกำลังใช้ไฟล์รายการภายนอกที่ระบุว่าจะทำงานโดยไม่มีสิทธิ์ของผู้ดูแลระบบ