มีคำสั่งที่สามารถยกระดับพรอมต์คำสั่งให้เข้าที่ได้หรือไม่?


61

บนระบบ * nix คุณสามารถรับรูทเชลล์ได้ดังนี้:

$ su # or 'sudo -s'
#

รูตเชลล์จะเกิดในตำแหน่งภายในเทอร์มินัลเดียวกัน

ฉันพยายามค้นหาบางอย่างที่คล้ายกันในระดับสูงในพรอมต์คำสั่งของ Windows กล่าวอีกนัยหนึ่งไม่ควรวางไข่หน้าต่างใหม่หรือแสดงพร้อมท์ UAC จนถึงตอนนี้ฉันสามารถทำงานตามกำหนดเวลาที่ข้าม UAC ได้ แต่หน้าต่างพร้อมรับคำสั่งที่ยกระดับไม่ได้เกิดขึ้นแล้ว

มีคำสั่งที่คล้ายกันสำหรับ Windows ที่ใช้การยกระดับแบบแทนที่โดยไม่มีการพล่านหน้าต่างใหม่หรือไม่?


31
โปรดทราบว่า su / sudo -s จริงๆแล้วก็เริ่มกระบวนการเชลล์ใหม่ เป็นเพียงกระบวนการที่ยกระดับเท่านั้นที่เชื่อมต่อกับเทอร์มินัลเดียวกันดังนั้นจึงปรากฏราวกับว่ามีการยกระดับในสถานที่
โกหกไรอัน

"ไม่ควรวางไข่หน้าต่างใหม่หรือแสดงข้อความแจ้ง UAC" คุณแค่บอกว่าไม่ควรมีการโต้ตอบแบบกราฟิกหรือไม่? หรือคุณไม่ต้องการรับการแจ้งเตือนเลย ? ตัวอย่างเช่นsudoจะถามรหัสผ่านในบางครั้ง แต่จะทำเช่นนั้นด้วยส่วนต่อประสานข้อความ ฉันสงสัยว่าเซิร์ฟเวอร์นาโน (ซึ่งฉันไม่เชื่อว่าจะมี GUI สำหรับเดสก์ท็อประยะไกลเป็นค่าเริ่มต้น) จัดการได้อย่างไร
jpmc26

2
@ jpmc26 การโต้ตอบกับอินเตอร์เฟสข้อความไม่เป็นไร
user2064000

@ jpmc26 ฉันสงสัยว่าเซิร์ฟเวอร์ Nano ยังมี UAC อยู่หรือเปล่า ระบุว่ามันเหมาะสำหรับตู้คอนเทนเนอร์มันไม่มีประโยชน์มากนัก มันถูกปิดการใช้งานในรุ่นเซิร์ฟเวอร์หลักเช่นกัน IIRC หากคุณเปิดใช้งานมันบังเอิญคุณมีทั้งกองของปัญหา :)
Luaan

2
@ user2064000 การแจ้งเตือน UAC คือ (อย่างน้อยโดยค่าเริ่มต้นสำหรับไบนารีที่ไม่ใช่ของ Windows) เปิดตัวใน Secure Desktop ไม่ใช่บนเดสก์ท็อปปัจจุบันของผู้ใช้ นอกเหนือจากความรำคาญเล็กน้อยแล้วยังได้รับการออกแบบมาเพื่อป้องกันไม่ให้กระบวนการอื่นรบกวนการแจ้งเตือน UAC นอกจากนี้หากจำเป็นต้องมีการรับรองความถูกต้องจะต้องอยู่ใน Secure Desktop และผู้ดูแลระบบบางรายอาจต้องใช้ลำดับ Ctrl-Alt-Del เพื่อพิสูจน์ว่า Windows กำลังใช้รหัสผ่านและไม่ใช่กระบวนการอื่นที่ปลอมแปลงพรอมต์รหัสผ่าน ดังนั้นการพิมพ์รหัสผ่านในหน้าต่าง cmd อาจไม่ได้มาจากมุมมองความปลอดภัยของ Microsoft
Calchas

คำตอบ:


65

TL; DR - ตัวเลือกเดียวคือวางไข่กระบวนการอื่น (ใหม่cmd.exe) ในกรณีของ Command Prompt การเริ่มต้นอินสแตนซ์ใหม่ด้วยโทเค็นการเข้าถึงที่มีการอนุญาตที่สูงกว่าจะส่งผลให้หน้าต่างใหม่ถูกสร้างขึ้นเสมอ


ไม่สามารถให้สิทธิ์เพิ่มเติมแก่กระบวนการที่กำลังทำงานอยู่ได้

เมื่อผู้ใช้ที่มีสิทธิ์ระดับผู้ดูแลระบบล็อกอินเข้าสู่เครื่อง Windows ที่เปิดใช้งานการควบคุมบัญชีผู้ใช้ (UAC) จะมีการสร้างโทเค็นการเข้าถึงแยกกันสองรายการ :

  1. หนึ่งในนั้นที่มีสิทธิ์การเข้าถึงระดับผู้ดูแลระบบและ
  2. โทเค็นที่สองที่กรองด้วยการเข้าถึงของผู้ใช้มาตรฐาน

ในขณะที่กระบวนการ (เช่นCMD.EXE) ถูกสร้างขึ้นก็จะได้รับมอบหมายหนึ่งของทั้งสองราชสกุลเข้าถึง หากกระบวนการเรียกใช้ "การยกระดับ" เป็นผู้ดูแลระบบจะใช้โทเค็นการเข้าถึงที่ไม่มีการกรอง หากกระบวนการไม่ได้รับสิทธิ์ผู้ดูแลระบบจะใช้โทเค็นผู้ใช้มาตรฐานที่ถูกกรอง

เมื่อสร้างกระบวนการแล้วจะไม่สามารถแทนที่โทเค็นการเข้าถึงได้ 1ในเธรดการรักษาความปลอดภัยของแอปพลิเคชัน MSDN นี้สำหรับ Windows Desktopโปสเตอร์ที่ระบุว่าตนเองเป็นสมาชิกของทีมเคอร์เนลของ Windows:

เคอร์เนล NT ไม่เคยตั้งใจจะอนุญาตให้สลับโทเค็นเมื่อกระบวนการเริ่มทำงาน นี่เป็นเพราะการจัดการ ฯลฯ อาจถูกเปิดในบริบทความปลอดภัยเก่าการดำเนินการบนเครื่องบินอาจใช้บริบทความปลอดภัยที่ไม่สอดคล้องกัน ฯลฯ ดังนั้นโดยทั่วไปแล้วจึงไม่เหมาะสมที่จะสลับโทเค็นของกระบวนการเมื่อเริ่มดำเนินการแล้ว แต่นี้ไม่ได้มีการบังคับใช้จนกว่า Vista [เหมืองเน้น] (ที่มาขอบคุณไป@ Ben N )

หมายเหตุ:การควบคุมบัญชีผู้ได้รับการแนะนำให้รู้จักกับการเปิดตัวของ Windows Vista

คำตอบผู้ใช้ขั้นสูงนี้อ้างอิงแหล่งที่มาเพิ่มเติมอีกสองแหล่งที่ยืนยันเช่นเดียวกัน:

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


1คุณสามารถปรับสิทธิพิเศษในโทเค็นการเข้าถึงที่มีอยู่ด้วยฟังก์ชั่นAdjustTokenPrivilegesแต่ตาม MSDN :

ฟังก์ชัน AdjustTokenPrivileges ไม่สามารถเพิ่มสิทธิ์ใหม่ให้กับโทเค็นการเข้าถึง สามารถเปิดใช้งานหรือปิดใช้งานสิทธิ์ที่มีอยู่ของโทเค็นเท่านั้น


19

แม้ว่าฉันจะเป็นผู้ใช้ที่กระตือรือร้นTCC-LEแต่ก็มีวิธีแก้ปัญหาที่ไม่ต้องการโปรแกรมใหม่: -

  • เริ่มcmdเป็นผู้ดูแลระบบ
  • นี้ควรเริ่มต้นคุณใน%SystemRoot%\system32\- ถ้าไม่cdมี
  • copy cmd.exe cmdadmin.exe(หรือชื่อใด ๆ ที่คุณเลือกเช่นsu.exe)
  • ตอนนี้ใช้ Explorer cmdadmin.exeและพบว่า
  • คลิกขวาและเลือกProperties
  • ในแท็บความเข้ากันได้เลือกเรียกใช้ในฐานะผู้ดูแลระบบ (หรือตั้งค่าสำหรับผู้ใช้ทั้งหมด)

ตอนนี้cmdadminเป็นของคุณsuหรือsudo: คุณสามารถเริ่มต้นได้โดยไม่มีพารามิเตอร์เพื่อให้เชลล์มีสิทธิ์ระดับผู้ดูแลระบบหรือคุณสามารถเรียกใช้ด้วย/cเพื่อรันคำสั่งเดียวในโหมดนี้ คุณอาจได้รับแจ้งให้ยืนยันหรือไม่ก็ได้ทั้งนี้ขึ้นอยู่กับนโยบายของคุณ

โปรดทราบว่านี่จะเปิดหน้าต่างใหม่เสมอ (เช่นเดียวกับโซลูชัน TCC start /elevated ...): สำหรับแอปพลิเคชัน GUI ที่คาดไว้ แต่สำหรับโปรแกรมบรรทัดคำสั่งคุณอาจต้องการใช้/kแทน/cเพื่อให้คุณมีโอกาสเห็นผลลัพธ์ ; หรือคุณสามารถเรียกใช้ผ่านไฟล์แบตช์ ( sudo.cmdอาจ?) ซึ่งเชื่อมต่อ& pauseกับจุดสิ้นสุดของสตริงการทำงานของคุณ

ไม่ว่าในกรณีใดมันจะไม่เหมือนกับsuหรือsudoแต่ก็ใกล้เคียงที่สุดที่คุณจะได้รับ ด้วยการตั้งค่าเลย์เอาต์ windows ด้วยตนเองคุณสามารถสร้างหน้าต่างใหม่ด้านล่างได้โดยตรงและติดกับต้นฉบับ


นี่อาจเป็นสิ่งที่ใกล้เคียงที่สุดที่ OP สามารถเข้าถึงได้sudoโดยมีข้อแม้ว่ายังคงต้องจัดการกับหน้าต่าง / กระบวนการใหม่ที่กำลังเกิดขึ้น แม้ว่าอาจไม่ใช่แนวคิดที่ดีที่สุดจากมุมมองด้านความปลอดภัยการปิดใช้งานพรอมต์ UAC ทั้งหมดจะช่วยลดความจำเป็นในการตอบสนองต่อพรอมต์ UAC เมื่อกระบวนการยกระดับเริ่มขึ้น
ตัวปลอมตัว Twisty

@Twisty - ขอบคุณสำหรับความคิดเห็น ฉันได้ตระหนักถึงผลกระทบต่อการรักษาความปลอดภัย แต่พวกเขาจะไม่ได้เลวร้ายยิ่งกว่าสถานที่ตั้งเดิมว่าบัญชีที่ช่วยให้การเรียกใช้ในฐานะผู้ดูแลระบบ มันขึ้นอยู่กับใครก็ตามที่ติดตั้งมันเพื่อตัดสินใจว่าเขาหรือเธอต้องการเตือนความจำตลอดเวลาเมื่อใดก็ตามที่มีการเรียกใช้
AFH

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

@ Twisty - แค่นั้น คำตอบของฉันมาจากแรงจูงใจที่คล้ายกัน ขอบคุณอีกครั้ง.
AFH

1
แทนที่จะคัดลอก cmd.exe ให้สร้าง symlink วิธีนี้ถ้าหน้าต่างปรับปรุงและแพทช์ข้อบกพร่องด้านความปลอดภัยคุณไม่ได้เรียกใช้รุ่นเก่าmklink cmdadmin.exe cmd.exe
โจเซฟ

11

มีคำสั่งที่สามารถยกระดับพรอมต์คำสั่งให้เข้าที่ได้หรือไม่?

มีวิธีที่ค่อนข้างไม่สะดวกคือ:

powershell -Command "Start-Process 'cmd.exe' -Verb runAs"

มีวิธีที่ดีกว่า แต่ Microsoft ปิดพวกเขา แน่นอนคุณสามารถพับแขนเสื้อของคุณและเขียนสคริปต์ของคุณเองsudoด้วยรหัสที่ฉันเพิ่งให้คุณ

กล่าวอีกนัยหนึ่งไม่ควรวางไข่หน้าต่างใหม่หรือแสดงพร้อมท์ UAC

ดูหมิ่น! เผาเขาในเสา! ;)ตลกกันไม่ ไม่มี นั่นจะเป็นข้อบกพร่องและความเสี่ยงด้านความปลอดภัย Microsoft ได้ใช้ความพยายามอย่างชัดเจนเพื่อให้แน่ใจว่ากระบวนการยกระดับและมาตรฐานมีความเหมือนกันน้อยที่สุด

เด็กสมาร์ทที่มีความคิดเกี่ยวกับสองกลับปลาย (มาตรฐานเดียวและเป็นหนึ่งในการยกระดับ) และกราฟิก front-end สำหรับทั้งควรอ่านเกี่ยวกับเซสชัน 0 แยก


2

มีคำสั่งที่คล้ายกันสำหรับ Windows ที่ใช้การยกระดับแบบแทนที่โดยไม่มีการพล่านหน้าต่างใหม่หรือไม่?

ไม่มีคำสั่งในตัวแม้ว่าฉันจะไม่ได้พิสูจน์ว่าฉันเชื่อว่าเพราะฉันได้เห็นหลายวิธีในการใช้ซอฟต์แวร์ / รหัสพิเศษเพื่อแก้ไขปัญหานี้

กล่าวอีกนัยหนึ่งไม่ควรวางไข่หน้าต่างใหม่หรือแสดงพร้อมท์ UAC

ลืมมันไปเถอะ ลืมมันอย่างแน่นอน ที่ขัดกับการออกแบบของ UAC หากคุณสามารถจัดการสิ่งนั้นได้คุณกำลังทำลายกระบวนการรักษาความปลอดภัยขั้นพื้นฐาน คาดหวังว่าโซลูชันของคุณจะได้รับการปะแก้หลังจาก Microsoft เรียนรู้และแก้ไขไม่ว่าคุณจะทำอะไรเพื่อแก้ไขปัญหานี้

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


การแจ้งเตือน UAC สามารถข้ามได้ด้วยภารกิจที่กำหนดเวลาไว้แล้ว ฉันกำลังมองหาบางอย่างที่ทำหน้าที่ยกระดับแทนการวางไข่หน้าต่างพร้อมรับคำสั่งใหม่
user2064000

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

แท้จริง; ภารกิจที่กำหนดเวลาไว้พ่ายแพ้ UAC อย่างสมบูรณ์ เมื่อยกระดับแล้วคุณสามารถยกระดับเป็นระบบผ่านบริการต่างๆจากนั้นใช้แทนที่โทเค็นในกระบวนการ cmd.exe ดั้งเดิม
โจชัว

มีสคริปต์PowerToy ค่อนข้างเป็นทางการที่ทำหน้าที่พื้นฐาน คุณสามารถพิมพ์elevate cmdเพื่อเปิดหน้าต่างพรอมต์คำสั่งใหม่ด้วยพรอมต์ UAC (ไซต์ยังมีคำสั่งเมนูตามบริบท!) หรือแน่นอนคุณสามารถกด Ctrl + Shift + คลิกที่ไอคอนแถบงานของหน้าต่างพรอมต์คำสั่งที่มีอยู่เพื่อทำสิ่งเดียวกัน - นั่นคือสิ่งที่ฉันมักจะทำบ่อยที่สุด (ซึ่งผมรู้ว่าไม่ว่าสิ่งที่ OP ขอ แต่สิ่งที่เป็น OP ถามถูกบล็อกโดยการออกแบบ.)
Miral

2

สิ่งที่คุณต้องการเป็นไปไม่ได้ใน Windows เพราะไม่รองรับแนวคิดนี้ คุณจะต้องเริ่มกระบวนการใหม่ที่มีสิทธิ์ที่สูงขึ้น

ฉันใช้nircmdเพื่อยกระดับกระบวนการจาก commandline คำสั่งของคุณจะเป็นnircmdc elevate cmd


2

ฉันเห็นคำถามนี้และคิดวิธีแก้ปัญหาง่ายๆ นี่คือเครื่องมือเล็ก ๆ ที่เรียกว่าrsudoซึ่งเรียกใช้คำสั่งที่เพิ่มขึ้นจากหน้าต่าง CMD ปกติ

หมายเหตุ: พรอมต์ UAC จะเกิดขึ้น การซ่อนสิ่งนี้เป็นไปไม่ได้นั่นเป็นเพียงวิธีที่ UAC ได้รับการออกแบบ

Usage:
  rsudo.exe "[command]"

ดาวน์โหลด [ดาวน์โหลดไม่ทำงานจะอัปเดตในไม่ช้า]

หมายเหตุ: คำสั่งจะทำงานในหน้าต่างใหม่ หากคุณต้องการดูผลลัพธ์ให้เรียกใช้rsudo.exe "pause && [command]"


มันจะrsudo.exe "[command] && pause"ไม่เป็นอย่างนั้นเหรอ?

@fleet ไม่ข้อผิดพลาดที่ทำให้pauseต้องเรียกใช้ก่อนจากนั้น
rahuldottech

ราหุลขอบคุณ! โอกาสใดของรหัสที่มา? ;) (หรือบางทีฉันอาจกำลังมองหาสถานที่ที่ไม่ถูกต้องบนไซต์ของคุณ)
cxw

@cwz แน่นอน! ฉันจะแก้ไขมันเมื่อฉันกลับถึงบ้านและเพิ่มโพสต์บล็อก: D
rahuldottech

0

อันนี้แปลก

คุณสามารถลองทำ ssh ในคอมพิวเตอร์ของคุณเองซึ่งจะใช้เทอร์มินัลที่มีอยู่เดิม แต่จริงๆแล้วจะแตกต่างอย่างสิ้นเชิง

มันจะใช้งานได้ แต่อาจไม่ใช่สิ่งที่คุณต้องการ

คนอื่นอาจพบว่ามีประโยชน์


-1

ลองใช้พรอมต์คำสั่งJPSOFT Take Command TCC / LE มันมาในรุ่น 32 และ 64 บิตและฟรีถ้าคุณไม่ต้องการฟังก์ชั่นเพิ่มเติม

ไปที่https://jpsoft.com/แล้วคลิกดาวน์โหลดและเลือกสิ่งที่คุณต้องการ

TCC / LE มี START / ELEVATED ซึ่งเริ่มโปรแกรมยกระดับด้วยสิทธิ์ผู้ดูแลระบบเต็มรูปแบบ (Windows Vista หรือใหม่กว่าเท่านั้น)


1
สิ่งนี้เกี่ยวข้องกับคำถามอย่างไร
user2064000

@DavidGrainger ปรากฎว่าสวิตช์ / ยกระดับยังคงไม่อนุญาตให้ฉันข้าม UAC และทำการยกระดับแบบแทนที่ (ดูคำถามเพื่อดูรายละเอียด) ฉันพลาดอะไรไปรึเปล่า?
user2064000

นี่คือการแทนที่สำหรับ Windows Command Prompt นอกจากนี้การเริ่มต้นการยกระดับจะไม่แตกต่างจากการเริ่มพร้อมท์คำสั่งภายใน
ตัวปลอมตัว Twisty

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

TCC / LE ก็ทำสิ่งอื่น ๆ มากมายเช่นกัน ฉันลองกับ UAC ที่ตั้งค่าเป็นไม่เคยใช้แล้ว "เริ่ม / สูง / PGM" C: \ Program Files \ IrfanView \ i_view64.exe "/ thumbs" เพื่อเปิดโปรแกรมยกระดับ
David Grainger
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.