Runas.exe funktioniert scheinbar nicht als PowerShell Sudo

1269
xdhmoore

Ich versuche runasin einer PowerShell-Funktion zu verwenden, um als armer Mann zu dienen sudo, runasscheine mir aber eigentlich keinen Administratorzugriff zu geben. Zum Beispiel bekomme ich beim Ausführen einen Zugriff verweigert:

runas /user:admin "cmd /K mkdir C:\Windows\System32\mydirectory" 

Wenn ich vim öffne und versuche, eine Datei in System32 zu schreiben, wird beim Speichern eine Fehlermeldung angezeigt:

runas /user:admin "C:\Program Files (x86)\Vim\vim74\gvim.exe C:\Windows\System32\mynewtextfile.txt" 

Ich glaube nicht, dass es sich um ein Problem mit den Anmeldeinformationen handelt, da ich nicht-administrative Aufgaben ausführen kann, z. B. Dateien auf den Desktop schreiben kann, und mein Kennwort anscheinend funktioniert. Ich habe das Tool "Computerverwaltung" in der Verwaltung überprüft und "admin" befindet sich in der Gruppe "Administratoren". Was vermisse ich? Ich bin unter Windows 7 Pro.

3
Hier ist Runas keine Powershell-Funktion. Wenn Sie sich in Powershell befinden, versuchen Sie `> @powershell saps -credential yourdomain \ admin cmd '/ K mkdir C: \ Windows \ System32 \ mydirectory' -verb runas`. chingNotCHing vor 7 Jahren 1
Danke, `Start-Process` /` saps` ist das, was ich am Ende verwendet habe. Was macht die @ Powershell-Syntax? xdhmoore vor 7 Jahren 0
Nevermind, [ich habe es gefunden] (https://superuser.com/questions/864901/what-is-the-difference-zwischen-running-powershell-und-powershell-any-command-w). xdhmoore vor 7 Jahren 0

3 Antworten auf die Frage

0
xdhmoore

Ich habe folgende Informationen in der get-help -full start-processDokumentation gefunden:

# Startet einen PowerShell-Prozess mit den Berechtigungen "Als Administrator ausführen".

PS C:> Start-Prozess powershell.exe -verb runas

Das Beste, was ich sagen kann, runas.exekann Ihren Benutzer ändern, aber Ihre Berechtigungen werden nicht erhöht. Allerdings basiert auf dem obigen Zitat, Powershell - Start-ProcessProzess kann verwendet werden, um dies zu tun, so landete ich tun das folgende in meine up - sudoFunktion, die Arbeit gut genug zu sein scheint:

$MY_PROFILE_TMP="$Env:TMP\my_profile_tmp"; Function Init-TMP() { #Make sure my personal tmp directory exists if (!(Test-Path $MY_PROFILE_TMP)) { mkdir $MY_PROFILE_TMP | Out-Null } }  Function As-Admin() { Init-TMP  #Create unique temp filenames to capture stderr and stdout $GUID=New-Guid $ADMIN_OUT="$MY_PROFILE_TMP\$($GUID)_OUT.txt" $ADMIN_ERR="$MY_PROFILE_TMP\$($GUID)_ERR.txt"  #Remove temp files if for some anomoly or error they already exist rm -ErrorAction Ignore $ADMIN_OUT rm -ErrorAction Ignore $ADMIN_ERR  #Start powershell with elevated permissions and write to the tmp out and error files #Without the &{}, invalid commands like `sudo dinosaur` don't get #captured to the error file Start-Process powershell "& { $args } 2>$ADMIN_ERR > $ADMIN_OUT" -Verb runas -Wait -WindowStyle Hidden  #Write to the current console the out and error results from the elevated process #TODO ideally, we'd read from these as a stream so the order would be correct... cat $ADMIN_ERR -Delimiter None | Write-Error cat $ADMIN_OUT  #Remove the temp files rm -ErrorAction Ignore $ADMIN_OUT rm -ErrorAction Ignore $ADMIN_ERR }  #Make an alias "sudo" New-Alias -Name sudo -Value As-Admin 
Wie sollen wir dieses lange Skript verwenden? Und warum "Start-Prozess-Powershell"? Aus der Frage sollten andere Befehle gestartet werden, nicht PowerShell. vor 7 Jahren 0
Es wird halb ähnlich zu * nix `sudo` verwendet:` sudo "mkdir C: \ Windows \ System32 \ followthewhiterabbit" `. Start-Process wird verwendet, weil, wie von chingNotCHing erwähnt, die Option `-Verb runas` Ihnen erhöhte Berechtigungen gibt, die das Exe` runas` nicht tut. Mein Ziel ist es, Powershell-Befehle (einschließlich Funktionen) auszuführen, also benutze ich Start-Process, um eine erhöhte Powershell zu starten, um meine Befehle auszuführen. Das Skript ist lang, weil ich ursprünglich mit `runas` keinen besseren Weg finden konnte, um die Ausgabe zu erfassen, als in eine tmp-Datei zu schreiben. Mit "Start-Process" gibt es vielleicht einen besseren Weg. xdhmoore vor 7 Jahren 0
0

Nach meiner Untersuchung in Windows 10 sind die folgenden Befehle WORK :

Elevation:

saps -Verb RunAs "cmd" -Arg "/K mkdir C:\Windows\System32\mydirectory" 

Benutzer wechseln:

saps -Verb RunAsUser "cmd" -Arg "/K mkdir C:\Windows\System32\mydirectory" 

Die folgenden Befehle funktionieren nicht :

  • runas /user:admin "cmd /K mkdir C:\Windows\System32\mydirectory" - Dies führt nicht zu einer Erhöhung der Berechtigungen
  • saps -Credential admin "cmd" -Arg "/K mkdir C:\Windows\System32\mydirectory" - Dies führt nicht zu einer Erhöhung der Berechtigungen
  • New-Item -Credential admin "C:\Windows\System32\mydirectory" - Der FileSystem-Anbieter unterstützt keine alternativen Anmeldeinformationen mit Ausnahme des Cmdlets New-PSDrive.
-1
Wes Sayeed

Haben Sie UAC an? Wenn ja, führen Sie das PowerShell-Skript über eine Eingabeaufforderung mit erhöhten Rechten aus?

Der Befehl runas unterliegt den UAC-Einschränkungen des übergeordneten Befehlsfensters. Wenn Sie den Befehl runas nicht von einer erhöhten Eingabeaufforderung aus aufgerufen haben, verfügt der Benutzer nicht über erhöhte Anmeldeinformationen, selbst wenn es sich um ein Administratorkonto handelt.

Leider funktioniert UAC genau so. Der einzige Unterschied besteht darin, dass eine CLI-Anwendung (z. B. runas) nicht zur Erhöhung auffordern kann, wenn dies an ein GUI-Programm angepasst werden muss. Unter * NIX-Betriebssystemen gibt es kein Windows-Äquivalent zum Befehl sudo.

Dies ist keine Lösung für das Problem. Das wissen wir schon aus der Frage. vor 7 Jahren 0
Ja, die Benutzerkontensteuerung ist aktiviert. Nein, ich renne nicht von einer erhöhten Eingabeaufforderung aus. xdhmoore vor 7 Jahren 0