Als Standard-Benutzer ein Programm als Admin starten

  • Hallo, suche vergeblich nach dem Fehler.
    Ich habe einen Standard-Benutzer (also ohne Adminrechte). Von diesem muss openVPN mit Adminrechten gestartet werden. Allerdings nicht in der Domäne, in der der PC eigentlich ist, sondern lokal. Nach ein bisschen sucherei und probiererei bin ich zu folgendem Ergebnis gekommen:

    Ich bekomme jedoch die Fehlermeldung "unbekannter Benutzername oder falsches Passwort".

    Weiß dazu jemand etwas? Bin nun schon seit heuet Morgen am testen und bin bisher nicht weiter gekommen.
    Ich nutze die Version 3.2.10.0, da es die Funktion RunAsSet in den neueren Versionen angeblich nicht mehr geben soll.

    Danke schon mal im Voraus!

    MfG


    Edit: mittlwerweile habe ich bemerkt, dass die Leerzeichen im Pfad gestört haben. Habe nun einen Pfad ohne Leer- und Sonderzeichen gewählt. Bekomme jetzt aber die Meldung "Unable to execute the external program".
    Der Code sieht nun wie folgt aus:

    Einmal editiert, zuletzt von Zephyr (22. Februar 2011 um 14:36)

  • Also bei deinem letzten Versuch hast du schonmal die Dateiendung vergessen. Ein Verzeichnis ausführen wird wohl nicht klappen.

    Zu deiner veralteten Version und runasset:

    Diese Funktion gibt es in der Tat nicht mehr, aber dafür gibts

    [autoit]

    runas()
    runaswait()

    [/autoit]


    Beide Varianten sollten alles erlauben was du auch mit runasset bewirken kannst.

    Es ist im übrigen nicht sonderlich sicher das Administrator Passwort in einem Script zu speichern, das zudem noch mit einer alten Autoit Version kompiliert wurde. Dafür gibt es noch offizielle Decompiler.
    Aber auch die neueren Versionen sind da keinesfalls sicher, auch wenn es nicht mehr so einfach ist an einen decompiler zu kommen.

    Möglicherweise würde es auch ausreichen das Script als user auszuführen und Teile die Administratorberechtigungen benötigen in externe Scripte auszulagern, die nur lokal auf dem Admin Account ausgeführt werden und vom Benutzer Account mittels Eventtrigger gestartet werden. Dadurch hinterlegst du das PW dann nur in der Taskplannung auf dem Admin Account. Der Task wird ausgeführt sobald das User Programm diesen Eventtrigger auslöst.
    Ob sowas in einer Domäne funktioniert weiss ich aber nicht, hatte solch eine Lösung nur auf einem lokalen PC mit User und Admin Account realisiert.

    Einmal editiert, zuletzt von misterspeed (22. Februar 2011 um 15:38)

  • Dass das nicht sonderlich sicher ist, weiß ich. Das wird auch später noch geändert :) Die grundsätzilche Funktion sollte aber erstmal einwandfrei laufen.

    Könntest Du mir den Code mit den entsprechenden Funktionien editieren? Das wäre nett

  • Dürfte dann wohl etwa so ausschaun:

    [autoit]


    ; Programmstart mit normalem Benutzeraccount ohne Adminrechte
    ; "Benutzer1" muss der Benutzername des Administrators sein, bei "Passwort Benutzer1" entsprechendes Passwort einsetzen
    $runas = RunAsWait($benutzer1, $domain, $adminpw, 4, $pathtoscriptexe) ; bitte hilfe lesen, bin nicht sicher was den 4. parameter angeht
    if @error=0 then exit

    [/autoit][autoit][/autoit][autoit]

    MsgBox(4096, "Fehler", "Es konnte kein lokales Administratorprofil geladen werden!")

    [/autoit]

    Aber kann das hier nicht testen und habe auch keine sonderliche Erfahrung mit der runas Funktion. Solange du die alte Autoit Version hast wird das bei dir aber ohnehin nicht klappen.
    Somit bitte selbst in der Hilfe nachlesen und die neueste Autoit Version installieren.

  • Danke, hat so einwandfrei funktioniert! Als vierter Parameter ist in der Hilfe "login_flag" angegeben. Habe da allerdings nichts verändert und die 4 stehen gelassen.

    Danke nochmals!

  • Danke, hat so einwandfrei funktioniert!


    Hmm, naja da ich schon daran gebastelt habe, poste ich es jetzt trotzdem ^^

    [autoit]

    $sFilePath = @WindowsDir & "\system32\notepad.exe" ; File
    $sWorkingD = @WindowsDir & "\system32\" ; Working Directory
    $sParameter = "" ; Parameters for program start

    [/autoit][autoit][/autoit][autoit]

    ; Merge filepath & parameter for RunAs (to prevent errors with spaces in Filepath)
    $sFilePath = '"' & $sFilePath & '"'
    If $sParameter <> "" Then $sFilePath &= " " & $sParameter

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]

    If IsAdmin() Then

    [/autoit][autoit][/autoit][autoit]

    ; Falls schon mit Admin angemeldet, wird das Programm damit gestartet
    RunWait($sFilePath, $sWorkingD)
    If @error Then Exit MsgBox(16, "Error", "Fehler beim starten ohne Adminprofil!")
    Else

    [/autoit][autoit][/autoit][autoit]

    ; Programm mit Adminrechten (externes Konto) ausführen!
    RunAsWait("Administrator", @ComputerName, "Adminpasswort!", 0, $sFilePath, $sWorkingD)
    If @error Then Exit MsgBox(16, "Error", "Fehler beim laden des Adminprofils!")
    EndIf

    [/autoit]