2009-09-17 09:24:35 +0000 2009-09-17 09:24:35 +0000
463
463

Gibt es einen 'sudo'-Befehl für Windows?

Ich arbeite immer mit einem Nicht-Administrator-Konto auf meinem Windows-Computer. Manchmal muss ich Programme installieren, die Administrator-Zugriff erfordern. Da ich meistens die Windows-Eingabeaufforderung verwende, gibt es einen Windows-Befehl zur Eskalation von Privilegien, ähnlich dem Linux-Terminalbefehl sudo?

Antworten (15)

272
272
272
2009-09-17 09:29:46 +0000

Der Befehl runas .

runas [{/profile|/noprofile}] [/env] [/netonly] [/smartcard] [/showtrustlevels] [/trustlevel] /user:UserAccountName program

Führen Sie einfach aus:

runas /noprofile /user:Administrator cmd

, um eine Befehlsshell als Administrator zu starten

128
128
128
2011-04-12 06:42:00 +0000
  • Elevate ** - “führt einen Befehl mit UAC-Privilegienerhöhung aus. Dies ist nützlich, um innerhalb von Eingabeaufforderungen oder mit Batch-Dateien zu arbeiten.” Es ist nicht dasselbe wie sudo, es ändert den ausführenden Benutzer in Administrator, aber seine Syntax ist viel einfacher zu verwenden als runas, und es kann das aktuelle Verzeichnis beibehalten, wodurch die Verwendung relativer Pfade ermöglicht wird.
Synopsis:
  elevate [(-c | -k) [-n] [-u]] [-w] command

Options:
  -c Launches a terminating command processor; equivalent to "cmd /c command".
  -k Launches a persistent command processor; equivalent to "cmd /k command".
  -n When using -c or -k, do not pushd the current directory before execution.
  -u When using -c or -k, use Unicode; equivalent to "cmd /u".
  -w Waits for termination; equivalent to "start /wait command".

Elevate dient nicht dazu, UAC (Benutzerkontensteuerung) zu umgehen oder zu umgehen, sondern um damit zu arbeiten. Solange UAC aktiviert ist, muß an einem Punkt des Prozesses eine Art Eingabeaufforderung erscheinen. Wenn Sie die Eingabeaufforderung ganz loswerden wollen, müssen Sie UAC .

Der Schmerzpunkt, den Elevate lindert, ist die Eskalation eines bestimmten Prozesses von einer nicht privilegierten Shell aus und dann die Fortsetzung des Prozesses wie gewohnt. Ohne dies müssen Sie eine Eingabeaufforderung für einen privilegierten Befehl mit Rechtsklick > “Als Administrator ausführen” starten, bevor Sie den privilegierten Befehl ausführen, der sich nicht so einfach skripten lässt.

Dies funktioniert gut mit “Elevate ohne Eingabeaufforderung” in secpol.msc. Zusammen tun sie dasselbe wie %wheel ALL=(ALL) NOPASSWD: ALL in sudo

Eine bekannte Einschränkung ist, dass es nicht den Fehlercode des Programms zurückgibt, das es erhöht.

Wenn Ihr Muskelspeicher auf sudo feststeckt, erstellen Sie einen Alias mit Doskey : doskey sudo=elevate -w

oder eine Batch-Datei in PATH: @elevate -w %*

Elevate ist ein Drittanbieter-Tool, das von Johannes Passing geschrieben wurde. Es ist ein 11kb Download und portabel (keine Installation erforderlich): http://code.kliu.org/misc/elevate/

67
67
67
2009-09-17 09:28:30 +0000

Sie können den Befehl runas verwenden, der ähnlich ist, oder Sie können sich das Projekt sudo for Windows unter SourceForge ansehen, das einen sudo-Befehl hinzufügt.

Der Unterschied ist subtil:

Nehmen wir an, Sie haben zwei Benutzer. Bob ist ein normaler Benutzer und James ein Administrator.

Wenn Sie sich als Bob anmelden und “runas james acommand” verwenden, wird der Befehl so ausgeführt, als ob er von James ausgeführt würde, d.h. er greift auf die Benutzereinstellungen von James zu, und alle Benutzeränderungen gehen in die Ordner James Meine Dokumente & Einstellungen usw. Wenn Sie also z.B. eine Anwendung installieren, wird sie als James und nicht als Bob installiert.

Wenn Bob andererseits “sudo acommand” verwendet, wird der Befehl immer noch als Bob ausgeführt, aber mit erhöhten Rechten - genau wie der Linux-Befehl sudo. Um zu verhindern, dass irgendein Benutzer sudo ausführen kann, müssen Sie eine sudoers-Benutzergruppe definieren, die die Liste der normalen Benutzer enthält, die mit sudo die Berechtigung zum Erhöhen haben. Die Benutzer müssen vor der Erhöhung immer noch Anmeldedaten angeben.

Manchmal ist der Unterschied nicht wichtig, manchmal schon, und ich finde, dass beide Befehle nützlich sein können.

41
41
41
2009-09-17 13:11:39 +0000

Sie können auch die Script Elevation PowerToys verwenden.

30
30
30
2012-10-26 07:52:13 +0000

Wenn Sie bereit sind, zu alternativen Konsolen zu wechseln, gibt es ConEmu (Ich bin der Autor). Eines seiner Merkmale - die Möglichkeit, in einem ConEmu-Fenster sowohl erhöhte als auch nicht erhöhte Registerkarten auszuführen. Tabs können auch mit unterschiedlichen Zugangsdaten gestartet werden.

Für den Benutzerkomfort gibt es die Batch-Datei csudo.cmd (die leicht in die bash übernommen werden kann). Lesen Sie die vollständige Beschreibung in project’s wiki . Kurz gesagt, wenn Sie einen Befehl von einem bestehenden, nicht erhöhten Tab ausführen, z.B.

csudo dism /online /enable-feature /featurename:NetFX3 /All /Source:D:\sources\sxs /LimitAccess

startet ConEmu dism in der neuen, erhöhten Konsole/Tab (mit vorhergehender UAC-Eingabeaufforderung in Vista oder Anmeldebox in XP).

Standardmäßig startet csudo die neue Konsole in einem Split (kann durch Bearbeiten des Inhalts von csudo.cmd geändert werden).

Und natürlich können Sie sie in sudo.cmd umbenennen, wenn Ihnen das “klassische” Wort sudo gefällt.

24
24
24
2012-08-28 10:36:22 +0000

Schnellmethode:

Drei Schritte zum Hinzufügen von sudo.

  1. PowerShell öffnen.

  2. Kopieren Sie das folgende Skript (Strg+C) und fügen Sie es in PowerShell ein (Alt+Leertaste+E+P):

$script_path="$HOME\Documents\Scripts"; if (!(test-path $script_path)) {New-Item -ItemType directory $script_path} if (!(test-path $profile)) { new-item -path $profile -itemtype file -force }". $script_path\sudo.ps1" | Out-File $profile -append; "function sudo(){if (`$args.Length -eq 1){start-process `$args[0] -verb `"runAs`"} if (`$args.Length -gt 1){start-process `$args[0] -ArgumentList `$args[1..`$args.Length] -verb `"runAs`"}}" | Out-File $script_path\sudo.ps1; powershell
  1. Drücken Sie die Eingabetaste.

Dadurch wird der Befehl sudo in PowerShell dauerhaft aktiviert.

Verwendung:

sudo <process-name> [param1 [param2 [param3]]]

Beispiele:

sudo explorer
sudo notepad
sudo powershell
sudo cmd
sudo taskmgr
sudo tasklist
sudo taskkill /IM Skype.exe /PID 8496

Lange Methode zum Lernen:

Hinweis: Ich habe das Skript aus beiden Artikeln gemischt, um das oben genannte Skript zu erstellen. Statt das Skript manuell in den Notizblock einzufügen, fügte ich die Anweisungen Out-File hinzu, um die Dateien ps1 und $profile aus dem Skript zu speichern.

Tipp: Wenn Sie kein großer Fan von UAC-Popups sind (wie ich), speichern Sie Folgendes in der Datei *.reg und führen Sie es aus:

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]
"ConsentPromptBehaviorAdmin"=dword:00000000
19
19
19
2009-09-17 11:22:41 +0000

Wenn Sie dies unter Windows tun, dann gibt es neben dem Befehl Ausführen als, wie in ein paar anderen Antworten erwähnt, auch Möglichkeiten, dies mit der Maus zu tun.

Wenn Sie die Umschalttaste gedrückt halten, während Sie mit der rechten Maustaste auf die meisten ausführbaren Dateien in Windows klicken, sollten Ihnen ein paar fortgeschrittenere Optionen auffallen. Eine davon ist die Option “Run As...” (ich glaube, ab Vista heißt sie “Run As Administrator”).

Sie können auch eine fortgeschrittenere Version von RunAs von Microsoft herunterladen, die ShellRunAs heißt und Verbesserungen gegenüber dem eingebauten RunAs-Befehl aufweist, sowohl im Befehlszeilen- als auch im Grafikmodus, einschließlich der Möglichkeit, Konto-Anmeldedaten zu speichern

4
4
4
2011-11-17 15:24:50 +0000

Surun ist eine kostenlose Open-Source-Anwendung, mit der bestimmte Programme mit Administratorrechten ausgeführt werden können, ohne dass ein Kennwort angegeben werden muss, ohne dass die Benutzerregistrierung geändert oder Umgebungsvariablen modifiziert werden müssen.

Als ich Windows XP benutzte, hat mir diese Anwendung sehr geholfen. Beta funktioniert unter Windows 7.

3
3
3
2012-09-06 15:01:51 +0000

Wie Sie wahrscheinlich schon entdeckt haben, lässt Runas Sie als einen anderen Benutzer laufen, aber es kann keine Elevation durchführen und übergibt keine aktuellen Verzeichnisse, Umgebungsvariablen oder lange Befehlszeilen. Hamilton C shell löst das mit einem echten su und sudo. su lässt Sie einen Befehl als einen anderen Benutzer laufen; sudo (eigentlich ein Alias auf su) lässt Sie einen Befehl mit Elevation laufen. Sie können auch beides tun, indem Sie elevated als ein anderer Benutzer ausführen. Aktuelle Verzeichnisse, Umgebungsvariablen und lange Befehlszeilen werden mittels eines gemeinsamen Speicher-Handshakes zwischen su, das im Kontext des Aufrufers läuft, und einer Kopie von sich selbst, die als Zwischenspiel mit den neuen Anmeldeinformationen läuft und dann das Kind startet, übergeben. Vollständige Offenlegung: Ich bin der Autor.

3
3
3
2018-06-14 18:44:28 +0000

Es gibt dafür eine schokoladige Verpackung mit dem praktischen Namen sudo . Sie können das Paket mit chocolatey mit folgendem Befehl installieren:

choco install -y sudo

Dann können Sie in jeder Windows/MS-Shell, die Sie benutzen müssen, sudo wie erwartet benutzen.

3
3
3
2019-11-07 16:12:24 +0000

Ich habe gsudo geschrieben, ein sudo für Fenster, das sich wie *nix sudo anfühlt und ein paar Killer-Features hat:

  • Ausführen innerhalb der aktuellen Konsole (im Anhang) ohne Abbruch der Autovervollständigung mit Tabulatortaste. Oder fügen Sie -n hinzu, um in einem neuen Fenster zu starten.
  • Behandelt alle Szenarien zuverlässig, um auf Skripte angewendet zu werden. (ExitCodes, StdIn/Out/Err Redirection/Capture)
  • Unterstützt Cmd/PowerShell/PowerShell Core
  • Cache für Berechtigungsnachweise: Wenn gsudo innerhalb von Minuten mehrmals aufgerufen wird, zeigt es das UAC-Popup nur einmal an.

Verwendung

gsudo Öffnet eine erhöhte Shell in der aktuellen Konsole.

gsudo [options] {command} [arguments] Führt den angegebenen Befehl mit erhöhten Rechten aus.

Am relevantesten [options]:

  • -n | --new Startet den Befehl in einer neuen Konsole mit erhöhten Rechten (und kehrt sofort zurück).
  • -w | --wait Erzwingt das Warten auf das Ende des Prozesses (und gibt den Exitcode zurück).
  • -s | --system Als lokales Systemkonto ausführen (“NT AUTHORITY\SYSTEM”).
  • --copyev Alle Umgebungsvariablen vor der Ausführung in die erhöhte Sitzung kopieren.

Installation

  • Verwendung von Scoop: scoop install gsudo
  • Verwendung von Chocolatey: choco install gsudo
  • Manuelle Installation
PowerShell -Command "Set-ExecutionPolicy RemoteSigned -scope Process; iwr -useb https://raw.githubusercontent.com/gerardog/gsudo/master/installgsudo.ps1 | iex"
1
1
1
2014-11-26 09:45:34 +0000

Ein funktionierender sudo-Ersatz für Cygwins mintty-Terminal wäre es, das folgende Skript im PATH des Benutzers zu platzieren:

$!/bin/bash
cygstart --action=runas mintty -e `which bash` -lc \"$@\"

Für mich ist dies der einzige brauchbare Ersatz, um die Privilegien von Programmen wie vim oder cygrunsrv bei der Arbeit in einem Terminal unter Windows zu erhöhen.

1
1
1
2017-11-20 19:58:47 +0000

Die einfachste Lösung ist meines Erachtens die Nutzung der Powershell, die portabel ist und den Benutzer unter Verwendung des UAC auffordert, die Arbeit zu erledigen.

Sie können dies einfach in einer beliebigen Shell (cmd oder Powershell) ausführen

powershell Start-Process -verb runAs path-to-your.exe "-all -args -in -quotes"
0
0
0
2018-02-01 21:29:20 +0000

Das folgende vbs-Skript erlaubt es, einen gegebenen Befehl mit Argumenten mit Elevation zu starten und imitiert das Verhalten des ursprünglichen Befehls unix sudo für einen begrenzten Satz von Anwendungsfällen (es wird keine Anmeldeinformationen zwischenspeichern, noch erlaubt es die echte Ausführung von Befehlen mit unterschiedlichen Anmeldeinformationen). Ich habe ihn auf C:\Windows\System32 gesetzt.

Set objArgs = WScript.Arguments
exe = objArgs(0)
args = ""
IF objArgs.Count >= 2 Then
   args = args & objArgs(1)
End If
For it = 2 to objArgs.Count - 1
   args = args & " " & objArgs(it)
Next
Set objShell = CreateObject( "WScript.Shell")
windir=objShell.ExpandEnvironmentStrings("%WINDIR%")
Set objShellApp = CreateObject("Shell.Application")
objShellApp.ShellExecute exe, args, "", "runas", 1
set objShellApp = nothing

Beispielhafte Verwendung auf einer Eingabeaufforderung sudo net start service

0
0
0
2016-01-10 21:08:24 +0000

Dieses Skript erledigt die Aufgabe:

@echo Set objShell = CreateObject("Shell.Application") > %temp%\sudo.tmp.vbs
@echo args = Right("%*", (Len("%*") - Len("%1"))) >> %temp%\sudo.tmp.vbs
@echo objShell.ShellExecute "%1", args, "", "runas" >> %temp%\sudo.tmp.vbs
@cscript //NoLogo %temp%\sudo.tmp.vbs

Speichern Sie es als sudo.cmd und fügen Sie es dann zu Ihrem PFAD hinzu

Hinweis: runas bedeutet in diesem Zusammenhang “Als Administrator ausführen” und nicht “Als anderer Benutzer ausführen” Von hier aus genommen und leicht bearbeitet, um den cscript.exe-Header aus der Ausgabe zu entfernen