Gibt es einen Befehl, mit dem die Eingabeaufforderung erhöht werden kann?


61

Auf * nix-Systemen können Sie eine Root-Shell wie folgt erhalten:

$ su # or 'sudo -s'
#

Die Root-Shell wird an Ort und Stelle im selben Terminal erzeugt.

Ich versuche, auf der Windows-Eingabeaufforderung etwas zu finden, das eine ähnliche direkte Erhöhung bewirkt. Mit anderen Worten, es sollte kein neues Fenster geöffnet oder UAC-Eingabeaufforderungen angezeigt werden. Bisher konnte ich eine geplante Aufgabe erstellen, die die Benutzerkontensteuerung umgeht, aber das Fenster mit der Eingabeaufforderung mit erhöhten Rechten ist nicht vorhanden.

Gibt es einen ähnlichen Befehl für Windows, der eine direkte Erhöhung vornimmt, ohne ein neues Fenster zu erzeugen?


31
Beachten Sie, dass su / sudo -s tatsächlich auch einen neuen Shell-Prozess startet. Es ist nur so, dass die Prozesse mit erhöhten Rechten mit demselben Terminal verbunden sind, sodass sie so aussehen, als wären sie an Ort und Stelle erhöht.
Lie Ryan

"es sollte kein neues Fenster erscheinen oder UAC-Eingabeaufforderungen anzeigen" Wollen Sie damit nur sagen, dass es keine grafische Interaktion erfordern sollte? Oder wollen Sie nicht aufgefordert werden , überhaupt ? Beispielsweise sudowerden Sie manchmal zur Eingabe eines Kennworts aufgefordert, dies geschieht jedoch über eine Textschnittstelle. Ich frage mich, wie Nano-Server (von denen ich glaube, dass sie nicht einmal eine grafische Benutzeroberfläche für Remotedesktop bieten ) damit umgehen.
jpmc26

2
@ jpmc26 Die Interaktion auf der Textoberfläche ist in Ordnung.
user2064000

@ jpmc26 Ich frage mich, ob der Nano-Server überhaupt UAC hat. Da es für Container optimiert ist, klingt es nicht sehr nützlich. Es wurde auch in Server Core-Versionen, IIRC, deaktiviert. Wenn Sie es versehentlich aktiviert haben, haben Sie eine ganze
Reihe

2
@ user2064000 Die UAC-Eingabeaufforderung wird (zumindest standardmäßig für Nicht-Windows-Binärdateien) auf dem sicheren Desktop und nicht auf dem aktuellen Desktop des Benutzers gestartet. Dies ist nicht nur ein wenig ärgerlich, sondern soll auch verhindern, dass andere Prozesse die UAC-Eingabeaufforderung stören. Wenn eine Authentifizierung erforderlich ist, muss sich diese auf dem Secure Desktop befinden, und einige Administratoren benötigen möglicherweise auch eine Strg-Alt-Entf-Sequenz, um zu beweisen, dass Windows das Kennwort verwendet und nicht einen anderen Prozess, der die Identität einer Kennwortabfrage vorgibt. Wenn Sie also ein Kennwort in das Cmd-Fenster eingeben, würde dies aus Sicht der Microsoft-Sicherheit wahrscheinlich nicht funktionieren.
Calchas

Antworten:


65

TL; DR - Die einzige Möglichkeit besteht darin, einen anderen Prozess zu erzeugen. (A new cmd.exe.) Wenn Sie bei der Eingabeaufforderung eine neue Instanz mit einem Zugriffstoken mit höheren Berechtigungen starten, wird immer ein neues Fenster erstellt.


Es ist nicht möglich, einem bereits laufenden Prozess zusätzliche Berechtigungen zu erteilen .

Wenn sich ein Benutzer mit Administratorrechten bei einem Windows-Computer anmeldet, auf dem die Benutzerkontensteuerung (User Account Control, UAC) aktiviert ist, werden zwei separate Zugriffstoken erstellt :

  1. Einer mit vollem Administratorzugriff und
  2. Ein zweites "gefiltertes Token" mit Standardbenutzerzugriff

Zum Zeitpunkt der Erstellung eines Prozesses (z. B. CMD.EXE) wird ihm einer dieser beiden Zugriffstoken zugewiesen . Wenn der Prozess als Administrator mit "erhöhten Rechten" ausgeführt wird, wird das ungefilterte Zugriffstoken verwendet. Wenn dem Prozess keine Administratorrechte gewährt werden, wird das gefilterte Standardbenutzertoken verwendet.

Sobald ein Prozess erstellt wurde, kann sein Zugriffstoken nicht mehr ersetzt werden . 1 In diesem Thread von MSDN Application Security für Windows Desktop heißt es auf einem Poster, das sich als Mitglied des Windows-Kernel-Teams ausweist:

Der NT-Kernel sollte niemals den Tokenwechsel zulassen, sobald ein Prozess gestartet wurde. Dies liegt daran, dass Handles usw. in einem alten Sicherheitskontext geöffnet wurden, Inflight-Vorgänge inkonsistente Sicherheitskontexte verwenden usw. Daher ist es in der Regel nicht sinnvoll, ein Prozess-Token zu wechseln, sobald die Ausführung begonnen hat. Dies wurde jedoch erst unter Vista durchgesetzt . [Hervorhebung von mir] (Quelle danke an @Ben N )

Hinweis: Die Benutzerkontensteuerung wurde mit der Veröffentlichung von Windows Vista eingeführt .

Diese Super User- Antwort enthält zwei zusätzliche Quellen, die dasselbe bestätigen:

Daher ist es einfach nicht möglich, die Eingabeaufforderung oder einen anderen Prozess direkt zu aktivieren. Die einzige Möglichkeit besteht darin, einen anderen Prozess mit einem neuen Zugriffstoken zu erzeugen (bei Bedarf kann dies eine weitere Instanz des ursprünglichen Prozesses sein). Wenn Sie bei der Eingabeaufforderung eine neue Instanz mit einem Zugriffstoken mit höheren Berechtigungen starten, wird immer ein neues Fenster erstellt. Wenn auf dem System UAC-Eingabeaufforderungen aktiviert sind, werden diese ebenfalls ausgelöst.


1 Sie können die Berechtigungen in einem vorhandenen Zugriffstoken mit der AdjustTokenPrivileges- Funktion anpassen , jedoch gemäß MSDN :

Die AdjustTokenPrivileges-Funktion kann dem Zugriffstoken keine neuen Berechtigungen hinzufügen. Es kann nur die vorhandenen Berechtigungen des Tokens aktivieren oder deaktivieren.


19

Obwohl ich ein begeisterter Benutzer von bin TCC-LE, gibt es eine Lösung, die keine neuen Programme benötigt:

  • Starten Sie cmdals Administrator.
  • Damit sollten Sie beginnen %SystemRoot%\system32\- wenn nicht, dann cddort.
  • copy cmd.exe cmdadmin.exe(oder einen beliebigen Namen, den Sie wählen, z. B. su.exe).
  • Führen Sie nun den Explorer aus und suchen Sie cmdadmin.exe.
  • Klicken Sie mit der rechten Maustaste und wählen Sie Eigenschaften .
  • In der Kompatibilität Registerkarte als Administrator ausgeführt werden (oder es für alle Benutzer festgelegt).

Jetzt cmdadminist Ihr suoder sudo: Sie können es ohne Parameter starten, um eine Shell mit Administratorrechten zu erhalten, oder Sie können es mit /causführen, um einen einzelnen Befehl in diesem Modus auszuführen. Abhängig von Ihren Richtlinien werden Sie möglicherweise nicht zur Bestätigung aufgefordert.

Beachten Sie, dass dies immer ein neues Fenster öffnet (wie auch die TCC-Lösung start /elevated ...): Für eine GUI-Anwendung wird dies erwartet, aber für ein Befehlszeilenprogramm möchten Sie möglicherweise /kstattdessen verwenden /c, um die Ausgabe zu sehen ; oder Sie könnten über eine Batch-Datei ( sudo.cmdvielleicht?) ausgeführt werden, die & pausebis zum Ende Ihrer Ausführungszeichenfolge verkettet ist .

In beiden Fällen ist es nicht ganz das Gleiche wie suoder sudo, aber es ist das Nächste, das Sie bekommen. Durch manuelles Einstellen des Fensterlayouts kann das neue Fenster direkt unter dem Original erstellt werden.


Dies ist wahrscheinlich der Punkt, an dem sich das OP am ehesten verhalten kann sudo, mit der Einschränkung, dass immer noch ein neues Fenster / ein neuer Prozess erstellt werden muss. Vom Standpunkt der Sicherheit aus gesehen ist dies wahrscheinlich nicht die beste Idee. Wenn Sie jedoch alle UAC-Eingabeaufforderungen deaktivieren, müssen Sie beim Starten des erhöhten Prozesses nicht mehr auf die UAC-Eingabeaufforderung reagieren.
Ich sage Reinstate Monica

@ Twisty - Danke für den Kommentar. Ich war mir der Sicherheitsrisiken bewusst, aber diese sind nicht schlechter als die ursprüngliche Voraussetzung, dass das Konto die Ausführung als Administrator zulässt . Es liegt an jedem, der es implementiert, zu entscheiden, ob er oder sie ständig daran erinnert werden soll, wann immer es aufgerufen wird.
AFH

2
Ich habe die Auswirkungen auf die Sicherheit nicht zu Ihrem Vorteil erwähnt, sondern für andere Leser. Ich bin jedoch anderer Meinung, dass das Deaktivieren von UAC-Eingabeaufforderungen nicht schlimmer ist als das Ausführen als Administrator. UAC-Eingabeaufforderungen können verhindern, dass ein als Administrator angemeldeter Benutzer unerwünschte Administratorrechte für einen Prozess erteilt. Ohne die Aufforderungen verliert der Benutzer diese Möglichkeit.
Ich sage Reinstate Monica

@ Twisty - einfach so. Meine Antwort kam aus ähnlichen Motiven. Danke noch einmal.
AFH

1
Erstellen Sie einen Symlink, anstatt die Datei cmd.exe zu kopieren. Auf diese Weise führen Sie, wenn Windows es aktualisiert und Sicherheitslücken behebt, keine alte Version ausmklink cmdadmin.exe cmd.exe
Josef,

11

Gibt es einen Befehl, mit dem die Eingabeaufforderung erhöht werden kann?

Es gibt einen ziemlich unbequemen Weg:

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

Es gab bessere Möglichkeiten, aber Microsoft hat sie geschlossen. Natürlich können Sie jederzeit die Ärmel hochkrempeln und Ihr eigenes Skript schreiben, das sudodem Quellcode entspricht, den ich Ihnen gerade gegeben habe.

Mit anderen Worten, es sollte kein neues Fenster geöffnet oder UAC-Eingabeaufforderungen angezeigt werden.

Blasphemie! Verbrenne ihn auf dem Scheiterhaufen! ;) Scherz beiseite, nein. Gibt es nicht Das wäre ein Bug und eine Sicherheitslücke. Microsoft hat sich ausdrücklich darum bemüht, dass der gehobene Prozess und der Standardprozess so wenig wie möglich gemeinsam haben.

Kluge Kids, die über zwei Back-Ends (ein Standard- und ein erweitertes) und ein grafisches Front-End für beide nachdenken, sollten sich mit Session 0 Isolation befassen .


2

Gibt es einen ähnlichen Befehl für Windows, der eine direkte Erhöhung vornimmt, ohne ein neues Fenster zu erzeugen?

Es ist kein solcher Befehl eingebaut. Obwohl ich das nicht bewiesen habe, glaube ich das, weil ich mehrere Möglichkeiten gesehen habe, zusätzliche Software / Code zu verwenden, um dieses Problem zu umgehen.

Mit anderen Worten, es sollte kein neues Fenster geöffnet oder UAC-Eingabeaufforderungen angezeigt werden.

Vergiss es. Vergiss es auf jeden Fall. Das widerspricht dem Design von UAC. Wenn Sie das schaffen, brechen Sie einen grundlegenden Sicherheitsprozess. Sie können davon ausgehen, dass Ihre Lösung durch einen Patch beschädigt wird, nachdem Microsoft von dem Prozess erfahren und ihn korrigiert hat, den Sie möglicherweise ausführen, um dies zu umgehen.

Die Lösung, um UAC-Eingabeaufforderungen zu vermeiden, besteht darin, zunächst eine hohe Höhe festzulegen. UAC sollte Sie nicht stören, wenn Sie ausreichend autorisiert sind. Wenn Sie mit einer niedrigeren Höhe beginnen (was häufig aus Sicherheitsgründen empfohlen wird) und dann versuchen, etwas zu tun, das eine höhere Höhe erfordert, müssen Sie mit einer Interaktion mit der Benutzerkontensteuerung rechnen.


UAC-Eingabeaufforderungen können bereits mit einer geplanten Aufgabe umgangen werden. Ich suche nach etwas, das die In-Place-Erhöhung ausführt, anstatt ein neues Eingabeaufforderungsfenster zu erzeugen.
user2064000

Wenn Sie dies tun, können Sie die geplante Aufgabe wirklich einrichten, ohne die Anforderungen der Benutzerkontensteuerung zu erfüllen? Zum Laichen sage ich, dass ich das nicht erwarte, weil ich bemerkt habe, dass alle erhebenden Lösungen, die ich bisher gesehen habe, das Starten eines neuen Prozesses beinhalteten. Ich denke, dass ein technisches Aufrüsten ohne Starten eines neuen Prozesses durchgeführt werden könnte, da Installationsprogramme nach dem Start möglicherweise nach der Benutzerkontensteuerung fragen, aber ich kann mich nicht erinnern, bereits verfügbare Lösungen gesehen zu haben, die einfach in eine Batch-Datei importiert werden können.
TOOGAM

Tatsächlich; Geplante Aufgaben besiegen die Benutzerkontensteuerung vollständig. Nach dem Hochstufen können Sie über Dienste zu SYSTEM hochstufen und dann das Ersetzungstoken für den ursprünglichen Prozess cmd.exe verwenden.
Joshua

Es gibt ein etwas offizielles PowerToy- Skript, das die grundlegenden Aufgaben erledigt. Sie können eingeben elevate cmd, um ein neues Eingabeaufforderungsfenster mit einer UAC-Eingabeaufforderung zu öffnen (die Site verfügt auch über Kontextmenübefehle!). Oder Sie können natürlich auch einfach Strg + Umschalt + Klicken auf das Taskleistensymbol eines vorhandenen Eingabeaufforderungsfensters, um dasselbe zu tun - das mache ich normalerweise am häufigsten. (Was ich weiß, ist nicht das, wonach das OP gefragt hat, sondern das, wonach das OP gefragt hat.)
Miral

2

Was Sie wollen, ist unter Windows nicht möglich, da dieses Konzept nicht unterstützt wird. Sie müssen einen neuen Prozess mit höheren Berechtigungen starten .

Ich benutze nircmd , um Prozesse von der Kommandozeile aus zu erhöhen. Ihr Befehl wärenircmdc elevate cmd


2

Ich habe diese Frage gesehen und eine einfache Lösung gefunden. Dies ist ein kleines Hilfsprogramm rsudo, das eskalierte Befehle in einem normalen CMD-Fenster ausführt.

Hinweis: Eine UAC-Eingabeaufforderung wird angezeigt . Das zu verbergen ist nicht möglich, das ist nur die Art und Weise, wie die Benutzerkontensteuerung entworfen wurde.

Usage:
  rsudo.exe "[command]"

Download [Download funktioniert nicht, wird bald aktualisiert]

Hinweis: Die Befehle werden in einem neuen Fenster ausgeführt. Wenn Sie die Ausgabe anzeigen möchten, führen Sie ausrsudo.exe "pause && [command]"


Muss es nicht sein rsudo.exe "[command] && pause"?

@fleet Nein, ein Fehler führt pausedazu, dass er zuerst ausgeführt wird
rahuldottech

Rahul, danke! Irgendeine Chance auf Quellcode? ;) (Oder ich habe nur an der falschen Stelle auf Ihrer Website
gesucht

@cwz sicher! Ich bearbeite es, wenn ich zu Hause bin und füge einen Blogeintrag hinzu: D
rahuldottech

0

Dieser ist komisch.

Sie könnten versuchen, einen SSH-Vorgang auf Ihrem eigenen Computer durchzuführen, der dasselbe vorhandene Terminal verwendet, aber tatsächlich ein völlig anderes Terminal ist.

Es wird funktionieren, aber es ist wahrscheinlich nicht das, was Sie wollen.

Andere mögen es jedoch nützlich finden.


-1

Probieren Sie die JPSOFT Take Command- Eingabeaufforderung TCC / LE aus. Es ist in 32- und 64-Bit-Versionen erhältlich und kostenlos, sofern Sie nicht mehr Funktionen wünschen.

Gehen Sie zu https://jpsoft.com/, klicken Sie auf Downloads und wählen Sie aus, was Sie möchten.

TCC / LE hat einen START / ELEVATED, der das Programm mit vollen Administratorrechten startet. (Nur Windows Vista oder höher.)


1
Wie hängt das mit der Frage zusammen?
user2064000

@DavidGrainger Es stellt sich heraus, dass ich mit der Option / raised die Benutzerkontensteuerung immer noch nicht umgehen und die In-Place-Erhöhung durchführen kann (Details finden Sie in der Frage). Vermisse ich etwas?
user2064000

Dies ist ein Ersatz für die Windows-Eingabeaufforderung. Das Starten mit erhöhten Rechten unterscheidet sich nicht vom Starten der integrierten Eingabeaufforderung mit erhöhten Rechten.
Ich sage Reinstate Monica

Die einzige Möglichkeit, die UAC-Einstellungen in "Niemals benachrichtigen" zu ändern. Wenn die UAC-Benachrichtigung angezeigt wird, klicken Sie auf den Link "Weitere Details anzeigen" und wählen Sie dann den Link "Anzeigen, wann diese Benachrichtigung angezeigt werden soll". Wählen Sie die Einstellung, die funktioniert. Möglicherweise möchten Sie es zurücksetzen, wenn Sie fertig sind, damit unerwünschte Aktionen abgefangen werden. Dies kann in den Windows-Einstellungen durchgeführt werden.
David Grainger

TCC / LE macht auch viele andere Sachen. Ich habe es mit der UAC-Einstellung "never" versucht und dann "Start / Elevated / PGM" C: \ Programme \ IrfanView \ i_view64.exe "/ thumbs" verwendet, um ein Programm Elevated zu öffnen.
David Grainger
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.