Esiste un comando che può elevare il prompt dei comandi in atto?


61

Sui sistemi * nix, puoi ottenere una shell di root in questo modo:

$ su # or 'sudo -s'
#

La shell di root viene generata in posizione all'interno dello stesso terminale.

Sto cercando di trovare qualcosa che faccia un'elevazione simile, sul posto sul prompt dei comandi di Windows. In altre parole, non dovrebbe generare una nuova finestra o visualizzare i prompt UAC. Finora sono stato in grado di eseguire un'attività pianificata che bypassa UAC, ma la finestra del prompt dei comandi con privilegi elevati non è stata generata.

Esiste un comando simile per Windows che esegue un'elevazione sul posto senza generare una nuova finestra?


31
si noti che su / sudo -s in realtà avvia anche un nuovo processo di shell. È solo che i processi elevati sono collegati allo stesso terminale, quindi appaiono come se fossero elevati sul posto.
Lie Ryan,

"non dovrebbe generare una nuova finestra o visualizzare i prompt UAC" Stai solo dicendo che non dovrebbe richiedere l'interazione grafica? O non vuoi essere richiesto affatto ? Ad esempio, sudoa volte richiederà una password, ma lo fa con un'interfaccia di testo. Mi chiedo in che modo i server Nano (che non credo offrano nemmeno una GUI per Desktop remoto per impostazione predefinita) lo gestiscono.
jpmc26,

2
@ jpmc26 L'interazione sull'interfaccia di testo è ok.
user2064000,

@ jpmc26 Mi chiedo se il server Nano abbia anche UAC. Dato che è ottimizzato per i contenitori, non sembra molto utile. Era disabilitato anche nelle versioni Server Core, IIRC. Se l'hai abilitato per sbaglio, hai avuto un
sacco

2
@ user2064000 Il prompt UAC viene (almeno per impostazione predefinita per i file binari non Windows) avviato su Secure Desktop, non sul desktop corrente dell'utente. Oltre ad essere leggermente fastidioso, questo è progettato per evitare che altri processi interferiscano con il prompt UAC. Inoltre, se è richiesta l'autenticazione, questo dovrà essere sul desktop sicuro e alcuni amministratori potrebbero anche richiedere una sequenza Ctrl-Alt-Canc per dimostrare che Windows sta prendendo la password e non altri processi che impersonano una richiesta di password. Quindi digitare una password nella finestra cmd probabilmente non volerebbe dal punto di vista della sicurezza di Microsoft.
Calchas,

Risposte:


65

TL; DR : l'unica opzione è generare un altro processo. (Un nuovo cmd.exe.) Nel caso del Prompt dei comandi, l' avvio di una nuova istanza con un token di accesso con autorizzazioni più elevate comporterà sempre la creazione di una nuova finestra .


Non è possibile concedere autorizzazioni aggiuntive a un processo già in esecuzione .

Quando un utente con diritti amministrativi accede a una macchina Windows con User Account Control (UAC) abilitato, vengono creati due token di accesso separati :

  1. Uno con accesso completo da amministratore e
  2. Un secondo "token filtrato" con accesso utente standard

Al momento della CMD.EXEcreazione di un processo (ad es. ), Viene assegnato uno di questi due token di accesso . Se il processo viene eseguito "elevato" come amministratore, viene utilizzato il token di accesso non filtrato. Se al processo non vengono concessi i diritti di amministratore, viene utilizzato il token utente standard filtrato.

Una volta creato un processo, non è possibile sostituire il suo token di accesso . 1 In questo thread MSDN Application Security per Windows Desktop , un poster che si identifica come membro del Team del kernel di Windows indica:

Il kernel NT non è mai stato progettato per consentire il passaggio di token dopo l'avvio di un processo. Questo perché gli handle, ecc. Potrebbero essere stati aperti in un vecchio contesto di sicurezza, le operazioni in volo potrebbero utilizzare contesti di sicurezza incoerenti, ecc. Pertanto, in genere non ha senso cambiare il token di processo una volta avviata l'esecuzione. Tuttavia, questo non è stato applicato fino a Vista . [enfasi mia] (fonte grazie a @Ben N )

Nota: il controllo dell'account utente è stato introdotto con il rilascio di Windows Vista .

Questa risposta da superutente cita due fonti aggiuntive che confermano lo stesso:

Pertanto non è semplicemente possibile elevare il prompt dei comandi o qualsiasi altro processo sul posto. L'unica opzione è generare un altro processo con un nuovo token di accesso (che può essere un'altra istanza del processo originale se lo si desidera). Nel caso del Prompt dei comandi, l'avvio di una nuova istanza con un token di accesso con autorizzazioni superiori comporterà sempre la creazione di una nuova finestra e se i prompt UAC sono abilitati sul sistema, verranno attivati ​​anche.


1 È possibile regolare i privilegi in un token di accesso esistente con la funzione AdjustTokenPrivileges , ma secondo MSDN :

La funzione AdjustTokenPrivileges non può aggiungere nuovi privilegi al token di accesso. Può solo abilitare o disabilitare i privilegi esistenti del token.


19

Mentre sono un utente entusiasta di TCC-LE, c'è una soluzione che non ha bisogno di nuovi programmi: -

  • Inizia cmdcome amministratore.
  • Questo dovrebbe farti iniziare %SystemRoot%\system32\- se no, cdlì.
  • copy cmd.exe cmdadmin.exe(o qualsiasi nome tu scelga, come su.exe).
  • Ora esegui Explorer e trova cmdadmin.exe.
  • Fare clic con il tasto destro e selezionare Proprietà .
  • Nella scheda Compatibilità selezionare Esegui come amministratore (o impostarlo per tutti gli utenti).

Ora cmdadminè tuo suo sudo: puoi avviarlo senza parametri per darti una shell con privilegi di amministratore, oppure puoi eseguirlo /cper eseguire un singolo comando in questa modalità. A seconda delle politiche, è possibile che venga richiesta o meno la conferma.

Si noti che questo aprirà sempre una nuova finestra (come fa la soluzione TCC start /elevated ...): per un'applicazione GUI questo è previsto, ma per un programma da riga di comando, potresti voler usare /kinvece di /c, per darti la possibilità di vedere l'output ; oppure potresti eseguire un file batch ( sudo.cmdforse?) che si concatena & pausealla fine della stringa di esecuzione.

In entrambi i casi non è esattamente lo stesso di suo sudo, ma è il più vicino che otterrai. Impostando manualmente il layout di Windows, la nuova finestra può essere creata direttamente sotto e appoggiando l'originale.


Questo è probabilmente il più vicino a cui l'OP può arrivare al comportamento sudo, con l'avvertenza di dover ancora affrontare una nuova finestra / processo che viene generato. Sebbene probabilmente non sia la migliore idea dal punto di vista della sicurezza, la disabilitazione di tutti i prompt UAC eliminerebbe la necessità di rispondere al prompt UAC all'avvio del processo elevato.
Dico Reinstate Monica il

@Twisty - Grazie per il commento. Ero a conoscenza delle implicazioni sulla sicurezza, ma non sono peggio della premessa originale che l'account consente Esegui come amministratore . Spetta a chiunque lo implementi decidere se desidera promemoria costanti ogni volta che viene invocato.
AFH,

2
Non stavo menzionando le implicazioni di sicurezza a vostro vantaggio, ma piuttosto per altri lettori. Tuttavia non sarò d'accordo sul fatto che disabilitare i prompt di Controllo dell'account utente non sia peggio che eseguirlo come amministratore. I prompt di Controllo dell'account utente possono impedire a un utente connesso come amministratore di concedere diritti amministrativi indesiderati a un processo. Senza le istruzioni l'utente perde questa opportunità.
Dico Reinstate Monica il

@Twisty - Proprio così. La mia risposta venne da motivi simili. Grazie ancora.
AFH,

1
invece di copiare cmd.exe, creare un collegamento simbolico ad esso. In questo modo, se Windows lo aggiorna e corregge i bug di sicurezza, non esegui una versione precedentemklink cmdadmin.exe cmd.exe
Josef

11

Esiste un comando che può elevare il prompt dei comandi in atto?

C'è un modo piuttosto scomodo:

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

C'erano modi migliori ma Microsoft li ha chiusi. Certo, puoi sempre rimboccarti le maniche e scrivere il tuo script equivalente sudocon il codice sorgente che ti ho appena dato.

In altre parole, non dovrebbe generare una nuova finestra o visualizzare i prompt UAC.

Bestemmia! Brucilo sul rogo! ;) Scherzo a parte, no. Non c'è. Sarebbe un bug e una vulnerabilità di sicurezza. Microsoft ha fatto uno sforzo esplicito per garantire che il processo elevato e quello standard abbiano il minimo in comune possibile.

I bambini intelligenti che stanno pensando a due back-end (uno standard e uno elevato) e un front-end grafico per entrambi, dovrebbero leggere Session 0 Isolation .


2

Esiste un comando simile per Windows che esegue un'elevazione sul posto senza generare una nuova finestra?

Non esiste un comando di questo tipo. Anche se non l'ho dimostrato, lo credo perché ho visto diversi modi per utilizzare software / codice extra per aggirare questo problema.

In altre parole, non dovrebbe generare una nuova finestra o visualizzare i prompt UAC.

Dimenticalo. Dimenticalo assolutamente. Ciò va contro il design di UAC. Se riesci a gestirlo, stai rompendo un processo di sicurezza fondamentale. Aspettati che la tua soluzione venga interrotta da una patch dopo che Microsoft ha appreso e risolto qualsiasi processo tu possa fare per aggirare questo problema.

La soluzione per evitare le richieste di controllo dell'account utente è iniziare con l'elevazione elevata. Controllo dell'account utente non dovrebbe disturbarti se sei sufficientemente autorizzato. Se inizi con un'elevazione più bassa (che è spesso consigliata per i vantaggi di sicurezza) e poi provi a fare qualcosa che richiede un'elevazione più elevata, allora ti aspetti l'interazione UAC.


I prompt UAC possono essere già ignorati con un'attività pianificata; Sto cercando qualcosa che faccia l'elevazione sul posto invece di generare una nuova finestra del prompt dei comandi.
user2064000

Se lo fai, puoi davvero impostare l'attività pianificata senza soddisfare i requisiti di Controllo dell'account utente? Per quanto riguarda la deposizione delle uova, sto dicendo che non me lo aspetto perché ho notato che tutte le soluzioni elevate che ho visto finora hanno comportato l'avvio di un nuovo processo. Penso che tecnicamente sia possibile elevare senza avviare un nuovo processo, poiché i programmi di installazione potrebbero richiedere il controllo dell'account utente dopo l'avvio, ma non ricordo di aver visto ancora soluzioni prontamente disponibili, facilmente impacchettabili in un file batch.
TOOGAM

Infatti; Le attività pianificate annullano completamente il controllo dell'account utente. Una volta elevato, è possibile passare a SISTEMA tramite i servizi e quindi utilizzare il token di sostituzione sul processo cmd.exe originale.
Giosuè,

C'è uno script PowerToy in qualche modo ufficiale che fa il lavoro di base; puoi digitare elevate cmdper aprire una nuova finestra del prompt dei comandi con un prompt UAC (il sito ha anche comandi del menu contestuale!). Oppure, naturalmente, puoi semplicemente Ctrl + Maiusc + Fare clic sull'icona della barra delle applicazioni di qualsiasi finestra del prompt dei comandi esistente per fare lo stesso: è quello che tendo a fare più spesso. (Il che so non è ciò che l'OP ha richiesto, ma ciò che l'OP ha richiesto è bloccato dalla progettazione.)
Miral

2

Quello che vuoi è impossibile in Windows, perché non supporta questo concetto. È necessario avviare un nuovo processo con autorizzazioni più elevate .

Uso nircmd per elevare i processi dalla riga di comando. Il tuo comando sarebbenircmdc elevate cmd


2

Ho visto questa domanda e ho trovato una soluzione semplice. Questa è una piccola utility chiamata rsudo, che esegue comandi intensificati da una normale finestra CMD.

Nota: verrà visualizzato un prompt UAC . Nasconderlo non è possibile, è solo il modo in cui UAC è stato progettato.

Usage:
  rsudo.exe "[command]"

Download [Download non funzionante, verrà aggiornato presto]

Nota: i comandi vengono eseguiti in una nuova finestra. Se si desidera visualizzare l'output, eseguirersudo.exe "pause && [command]"


Non deve essere rsudo.exe "[command] && pause"?

@fleet No, un bug provoca pauseprima l'esecuzione
rahuldottech,

Rahul, grazie! Qualche possibilità di codice sorgente? ;) (O forse stavo solo cercando nel posto sbagliato sul tuo sito.)
cxw

@cwz sicuro! Lo modificherò quando raggiungerò casa e aggiungerò un post sul blog: D
rahuldottech,

0

Questo è strano.

Potresti provare a fare un ssh sul tuo computer che userebbe lo stesso terminale esistente, ma in realtà sarebbe completamente diverso.

Funzionerà, ma probabilmente non è quello che vuoi.

Altri potrebbero trovare utile però.


-1

Prova il prompt dei comandi JPSOFT Take Command TCC / LE. È disponibile nelle versioni a 32 e 64 bit ed è gratuito a meno che tu non voglia più funzionalità.

Vai su https://jpsoft.com/ e fai clic su Download e seleziona ciò che desideri.

TCC / LE ha un START / ELEVATED, che avvia il programma elevato con privilegi di amministratore completi. (Solo Windows Vista o successivo.)


1
In che modo ciò è legato alla domanda?
user2064000

@DavidGrainger si scopre che l'opzione / elevata non mi consente ancora di bypassare UAC e di eseguire l'elevazione sul posto (vedere la domanda per i dettagli). Mi sto perdendo qualcosa?
user2064000

Questa è una sostituzione per il prompt dei comandi di Windows. Inoltre, avviarlo elevato non è diverso dall'avvio del Prompt dei comandi incorporato elevato.
Dico Reinstate Monica il

L'unico modo forse per modificare le impostazioni di Controllo dell'account utente in "Non avvisare mai" Quando viene visualizzata la notifica Controllo dell'account utente, fare clic sul collegamento "Mostra più dettagli", quindi selezionare il collegamento "Mostra quando deve apparire questa notifica". Seleziona l'impostazione che funziona. Potresti volerlo cambiare quando hai finito, quindi le azioni indesiderate vengono catturate da esso. questo può essere realizzato nelle impostazioni di Windows.
David Grainger,

TCC / LE fa anche molte altre cose. L'ho provato con l'UAC impostato su mai e poi ho usato "Start / Elevated / PGM" C: \ Programmi \ IrfanView \ i_view64.exe "/ thumbs" per aprire un programma Elevated.
David Grainger,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.