Apakah ada perintah yang dapat meningkatkan Command Prompt di tempatnya?

61

Pada sistem * nix, Anda bisa mendapatkan shell root seperti ini:

$ su # or 'sudo -s'
#

Shell root muncul di dalam terminal yang sama.

Saya mencoba untuk menemukan sesuatu yang melakukan elevasi di tempat yang sama pada Windows Command Prompt. Dengan kata lain, seharusnya tidak memunculkan jendela baru atau menampilkan permintaan UAC. Sejauh ini saya sudah dapat membuat tugas terjadwal yang melewati UAC, tetapi jendela Command Prompt yang ditinggikan tidak muncul di tempatnya.

Apakah ada perintah serupa untuk Windows yang melakukan elevasi di tempat tanpa menelurkan jendela baru?

pengguna2064000
sumber
31
perhatikan bahwa su / sudo -s sebenarnya juga memulai proses shell baru. Hanya saja proses yang ditinggikan terhubung ke terminal yang sama, sehingga mereka tampak seolah-olah ditinggikan di tempat.
Lie Ryan
"Seharusnya tidak memunculkan jendela baru atau menampilkan permintaan UAC" Apakah Anda hanya mengatakan itu tidak memerlukan interaksi grafis? Atau apakah Anda tidak ingin diminta sama sekali ? Sebagai contoh, sudokadang-kadang akan meminta kata sandi, tetapi melakukannya dengan antarmuka teks. Saya agak bertanya-tanya bagaimana server Nano (yang saya tidak percaya bahkan menawarkan GUI untuk Remote Desktop secara default) menanganinya.
jpmc26
2
@ jpmc26 Interaksi pada antarmuka teks tidak masalah.
user2064000
@ jpmc26 Saya ingin tahu apakah server Nano bahkan memiliki UAC. Mengingat bahwa ini dioptimalkan untuk wadah, itu tidak terdengar sangat berguna. Itu dinonaktifkan di versi Server Core juga, IIRC. Jika Anda mengaktifkannya secara tidak sengaja, Anda mendapat banyak masalah :)
Luaan
2
@ user2064000 Prompt UAC adalah (setidaknya secara default untuk binari non-Windows) diluncurkan pada Desktop Aman, bukan pada desktop pengguna saat ini. Selain sedikit mengganggu, ini dirancang untuk mencegah proses lain mengganggu permintaan UAC. Selain itu, jika diperlukan otentikasi, itu harus ada di Secure Desktop, dan beberapa admin juga mungkin memerlukan urutan Ctrl-Alt-Del untuk membuktikan bahwa Windows mengambil kata sandi dan bukan proses lain yang meniru kata sandi. Jadi mengetikkan kata sandi di jendela cmd mungkin tidak akan terbang dari perspektif keamanan Microsoft.
Calchas

Jawaban:

65

TL; DR - Satu-satunya pilihan adalah menelurkan proses lain. (A baru cmd.exe.) Dalam kasus Command Prompt, memulai instance baru dengan token akses yang memiliki izin lebih tinggi akan selalu menghasilkan jendela baru yang dibuat.


Tidak mungkin untuk memberikan izin tambahan ke proses yang sudah berjalan .

Saat pengguna dengan hak administratif mencatat ke mesin Windows dengan Kontrol Akun Pengguna (UAC) diaktifkan, dua token akses terpisah dibuat :

  1. Satu dengan akses administrator penuh, dan
  2. "Token yang difilter" kedua dengan akses pengguna standar

Pada saat suatu proses (misalnya CMD.EXE) dibuat, ia diberikan salah satu dari dua token akses ini . Jika proses dijalankan "ditinggikan" sebagai Administrator, token akses tanpa filter digunakan. Jika proses tidak diberikan hak admin, token pengguna standar yang difilter digunakan.

Setelah proses dibuat, tidak mungkin untuk mengganti token aksesnya . 1 Dalam Keamanan Aplikasi MSDN ini untuk utas Desktop Windows , poster yang mengidentifikasi dirinya sebagai anggota Tim Kernel Windows menyatakan:

Kernel NT tidak pernah dimaksudkan untuk mengizinkan token switching begitu suatu proses mulai berjalan. Ini karena gagang, dll. Mungkin telah dibuka dalam konteks keamanan lama, operasi dalam penerbangan mungkin menggunakan konteks keamanan yang tidak konsisten, dll. Karena itu, biasanya tidak masuk akal untuk mengganti token proses 'begitu telah mulai dieksekusi. Namun, ini tidak diberlakukan sampai Vista . [penekanan milikku] (Sumber terima kasih kepada @Ben N )

Catatan: Kontrol Akun Pengguna diperkenalkan dengan peluncuran Windows Vista .

Jawaban Pengguna Super ini mengutip dua sumber tambahan yang mengkonfirmasi hal yang sama:

Oleh karena itu tidak mungkin untuk meningkatkan Command Prompt atau proses lainnya di tempat. Satu-satunya pilihan adalah menelurkan proses lain dengan token akses baru (yang dapat menjadi contoh lain dari proses asli jika diinginkan). Dalam kasus Command Prompt, memulai instance baru dengan token akses yang memiliki izin lebih tinggi akan selalu menghasilkan jendela baru yang dibuat, dan jika UAC prompt diaktifkan pada sistem, mereka akan dipicu juga.


1 Anda dapat menyesuaikan hak istimewa dalam token akses yang ada dengan fungsi AdjustTokenPrivileges , tetapi menurut MSDN :

Fungsi AdjustTokenPrivileges tidak dapat menambahkan hak istimewa baru ke token akses. Itu hanya dapat mengaktifkan atau menonaktifkan hak istimewa token yang ada.

Saya katakan Reinstate Monica
sumber
19

Meskipun saya adalah pengguna yang antusias TCC-LE, ada solusi yang tidak memerlukan program baru: -

  • Mulai cmdsebagai administrator.
  • Ini akan membuat Anda masuk %SystemRoot%\system32\- jika tidak, di cdsana.
  • copy cmd.exe cmdadmin.exe(atau nama apa pun yang Anda pilih, seperti su.exe).
  • Sekarang jalankan Explorer dan temukan cmdadmin.exe.
  • Klik kanan dan pilih Properties .
  • Di tab Kompatibilitas pilih run as admin (atau atur untuk semua pengguna).

Sekarang cmdadminadalah milik Anda suatau sudo: Anda dapat memulainya tanpa parameter untuk memberi Anda shell dengan hak administratif, atau Anda dapat menjalankannya dengan /cmenjalankan satu perintah dalam mode ini. Tergantung pada kebijakan Anda, Anda mungkin atau mungkin tidak diminta untuk konfirmasi.

Perhatikan bahwa ini akan selalu membuka jendela baru (seperti halnya solusi TCC start /elevated ...): untuk aplikasi GUI ini diharapkan, tetapi untuk program baris perintah, Anda mungkin ingin menggunakan /kalih-alih /c, untuk memberi Anda kesempatan untuk melihat output ; atau Anda dapat menjalankan melalui file batch ( sudo.cmdmungkin?) yang menyatukan & pausehingga akhir string Anda berjalan.

Dalam kedua kasus itu tidak persis sama dengan suatau sudo, tapi itu yang paling dekat Anda akan dapatkan. Dengan mengatur tata letak windows secara manual, jendela baru dapat dibuat langsung di bawah dan berbatasan dengan aslinya.

AFH
sumber
Ini mungkin yang paling dekat dengan perilaku OP sudo, dengan peringatan masih harus berurusan dengan jendela baru / proses yang melahirkan. Meskipun mungkin bukan ide terbaik dari sudut pandang keamanan, menonaktifkan semua permintaan UAC akan menghilangkan keharusan untuk menanggapi permintaan UAC ketika proses yang ditinggikan dimulai.
Saya katakan Reinstate Monica
@ Twisty - Terima kasih atas komentarnya. Saya menyadari implikasi keamanan, tetapi tidak lebih buruk dari premis asli bahwa akun memungkinkan Jalankan sebagai administrator . Terserah siapa pun yang mengimplementasikannya untuk memutuskan apakah ia menginginkan pengingat konstan setiap kali diminta.
AFH
2
Saya tidak menyebutkan implikasi keamanan untuk keuntungan Anda, tetapi untuk pembaca lain. Namun saya akan tidak setuju bahwa menonaktifkan permintaan UAC tidak lebih buruk daripada menjalankan sebagai admin. Permintaan UAC dapat mencegah pengguna yang masuk sebagai Admin dari memberikan hak administratif yang tidak diinginkan ke suatu proses. Tanpa diminta, pengguna kehilangan kesempatan ini.
Saya katakan Reinstate Monica
@ Twisty - Begitulah. Respons saya datang dari motif yang sama. Terima kasih lagi.
AFH
1
alih-alih menyalin cmd.exe, buat symlink untuk itu. Dengan cara ini, jika windows memperbaruinya dan memperbaiki bug keamanan, Anda tidak menjalankan versi lamamklink cmdadmin.exe cmd.exe
Josef
11

Apakah ada perintah yang dapat meningkatkan Command Prompt di tempatnya?

Ada cara yang agak tidak nyaman:

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

Ada cara yang lebih baik tetapi Microsoft menutupnya. Tentu saja, Anda selalu dapat menyingsingkan lengan baju dan menulis skrip Anda sendiri yang setara sudodengan kode sumber yang baru saja saya berikan kepada Anda.

Dengan kata lain, seharusnya tidak memunculkan jendela baru atau menampilkan permintaan UAC.

Penghujatan! Bakar dia di tiang! ;) Lelucon, tidak. Tidak ada. Itu akan menjadi bug dan kerentanan keamanan. Microsoft membuat upaya eksplisit untuk memastikan bahwa proses peningkatan dan standar memiliki sedikit kesamaan.

Anak-anak cerdas yang memikirkan dua ujung belakang (satu standar dan satu tinggi) dan satu ujung depan grafis untuk keduanya, harus membaca tentang Sesi 0 Isolasi .


sumber
2

Apakah ada perintah serupa untuk Windows yang melakukan elevasi di tempat tanpa menelurkan jendela baru?

Tidak ada perintah seperti itu. Meskipun saya belum membuktikannya, saya percaya itu karena saya telah melihat banyak cara untuk menggunakan perangkat lunak / kode tambahan untuk mengatasi masalah ini.

Dengan kata lain, seharusnya tidak memunculkan jendela baru atau menampilkan permintaan UAC.

Lupakan. Benar-benar melupakannya. Itu bertentangan dengan desain UAC. Jika Anda bisa mengelolanya, Anda melanggar proses keamanan mendasar. Harapkan solusi Anda rusak oleh tambalan setelah Microsoft mengetahui, dan memperbaiki, proses apa pun yang mungkin Anda lakukan untuk mengatasi hal ini.

Solusi untuk menghindari permintaan UAC adalah memiliki elevasi tinggi untuk memulai. UAC seharusnya tidak mengganggu Anda jika Anda cukup berwenang. Jika Anda mulai dengan ketinggian yang lebih rendah (yang sering direkomendasikan untuk manfaat keamanan) dan kemudian mencoba melakukan sesuatu yang membutuhkan ketinggian yang lebih tinggi, maka harapkan interaksi UAC.

TOOGAM
sumber
UAC bisikan sudah bisa dilewati dengan tugas yang dijadwalkan; Saya mencari sesuatu yang melakukan elevasi di tempat alih-alih menelurkan jendela command prompt baru.
user2064000
Jika Anda melakukannya, dapatkah Anda benar-benar mengatur Tugas Terjadwal tanpa memenuhi persyaratan UAC? Sedangkan untuk pemijahan, saya mengatakan bahwa saya tidak berharap begitu karena saya telah memperhatikan semua solusi peningkatan yang saya lihat sejauh ini telah melibatkan memulai proses baru. Saya pikir secara teknis meningkatkan tanpa memulai proses baru dapat dilakukan, karena program instalasi mungkin meminta UAC setelah mereka mulai, tetapi saya tidak ingat pernah melihat solusi yang tersedia, mudah diimpor ke dalam file batch, belum.
TOOGAM
Memang; Tugas Terjadwal sepenuhnya mengalahkan UAC. Setelah dinaikkan, Anda dapat naik ke SISTEM melalui layanan, dan kemudian gunakan token ganti pada proses cmd.exe asli.
Joshua
Ada skrip PowerToy yang agak resmi yang melakukan pekerjaan dasar; Anda dapat mengetik elevate cmduntuk membuka jendela command prompt baru dengan prompt UAC (situs ini juga memiliki perintah menu konteks!). Atau, tentu saja, Anda cukup Ctrl + Shift + Klik ikon taskbar dari jendela prompt perintah yang ada untuk melakukan hal yang sama - itulah yang paling sering saya lakukan. (Yang saya tahu bukan apa yang diminta OP, tapi apa yang diminta OP diblokir oleh desain.)
Miral
2

Apa yang Anda inginkan tidak mungkin di Windows, karena tidak mendukung konsep ini. Anda harus memulai proses baru dengan izin yang lebih tinggi .

Saya menggunakan nircmd untuk meningkatkan proses dari commandline. Perintah Anda adalahnircmdc elevate cmd

magicandre1981
sumber
2

Saya melihat pertanyaan ini dan memberikan solusi sederhana. Ini adalah utilitas kecil yang disebut rsudo, yang menjalankan perintah yang ditingkatkan dari jendela CMD biasa.

Catatan: Prompt UAC akan muncul. Menyembunyikan ini tidak mungkin, itulah cara UAC dirancang.

Usage:
  rsudo.exe "[command]"

Unduh [Unduh tidak berfungsi, akan segera diperbarui]

Catatan: Perintah dijalankan di jendela baru. Jika Anda ingin melihat output, jalankanrsudo.exe "pause && [command]"

rahuldottech
sumber
Bukankah seharusnya begitu rsudo.exe "[command] && pause"?
@fleet Tidak, bug menyebabkan pausedijalankan terlebih dahulu
rahuldottech
Rahul, terima kasih! Adakah kemungkinan kode sumber? ;) (Atau mungkin saya hanya mencari di tempat yang salah di situs Anda.)
cxw
@ cwz tentu! Saya akan mengeditnya ketika saya sampai di rumah dan menambahkan posting blog: D
rahuldottech
0

Yang ini aneh.

Anda dapat mencoba melakukan ssh ke komputer Anda sendiri yang akan menggunakan terminal yang sama, tetapi sebenarnya akan menjadi yang sama sekali berbeda.

Ini akan berhasil, tetapi mungkin itu bukan yang Anda inginkan.

Orang lain mungkin merasa berguna.

Pradyoth Shandilya
sumber
-1

Coba JPSOFT Take Command command prompt TCC / LE. Muncul dalam versi 32 dan 64-bit dan gratis kecuali Anda menginginkan lebih banyak fungsi.

Buka https://jpsoft.com/ dan klik pada Unduhan dan pilih yang Anda inginkan.

TCC / LE memiliki START / ELEVATED, yang memulai program dengan hak admin penuh. (Hanya Windows Vista atau yang lebih baru.)

David Grainger
sumber
1
Bagaimana ini terkait dengan pertanyaan?
user2064000
@ DavidVrainger ternyata bahwa / switch yang ditinggikan masih tidak memungkinkan saya untuk memotong UAC dan melakukan elevasi di tempat (lihat pertanyaan untuk detail). Apakah saya melewatkan sesuatu?
user2064000
Ini adalah pengganti untuk Prompt Perintah Windows. Ditambah lagi, menyalakannya tidak ada bedanya dengan memulai Command Prompt bawaan yang ditingkatkan.
Saya katakan Reinstate Monica
Satu-satunya cara mungkin untuk mengubah pengaturan UAC menjadi "Never notify" Ketika notifikasi UAC muncul, klik tautan "Show more details", lalu pilih tautan, "Show when this not seharusnya muncul". Pilih pengaturan yang berfungsi. Anda mungkin ingin mengubahnya kembali ketika Anda selesai, sehingga tindakan yang tidak diinginkan tertangkap olehnya. ini dapat dilakukan di pengaturan Windows.
David Grainger
TCC / LE melakukan banyak hal lain juga. Saya mencobanya dengan set UAC untuk tidak pernah dan kemudian digunakan, "Start / Elevated / PGM" C: \ Program Files \ IrfanView \ i_view64.exe "/ thumbs" untuk membuka program Elevated.
David Grainger