2009-03-22 4 views
0

Ich brauche pünktlich aufrufende Befehle (net share, netsh ...), die Administratorrechte von einer Software erfordern, die von einem Benutzerkonto gestartet wurde.Sicheres Aufrufen von Befehlen mit Administratorrechten unter Windows

Unter einer Unix-Variante würde ich neben meiner Benutzer-Modus-Software ein kleines, vorsichtig geschriebenes Skript mit einem suid-Bit installieren, das die benötigten Befehle aufruft.

Was ist die gleichwertige Best Practice unter Microsoft Windows? Ich wäre besonders an einer Vista-freundlichen, aber XP-kompatiblen Lösung interessiert.

Antwort

1

Wie BobbyShaftoe sagt, ist die kanonische Lösung dieses Problems in Windows über einen Dienst, da Dienste standardmäßig unter dem Konto LocalSystem ausgeführt werden. Jede andere Methode muss sich als Administrator anmelden, für den Anmeldeinformationen erforderlich sind. Die zusätzlichen Informationen, die Sie für Vista benötigen, sind, dass die Clientanwendung mit dem Dienst über eine Form von IPC kommunizieren muss, die Sitzungsgrenzen überschreiten kann, da sich Konsole und Dienste unter Vista in verschiedenen Sitzungen befinden . Die normale IPC-Methode, die in diesem Fall verwendet wird, ist eine Named Pipe.

Die gleiche Lösung wird in XP gut funktionieren.

+0

Das ist genau die Art von Antwort, die ich brauchte; Ich wollte eine kanonische Methode verwenden, die keine spezifischen Anmeldeinformationen erfordert. Danke für den zusätzlichen Tipp mit Vista. – oparisy

1

Eine Methode könnte ein Dienst sein, der mit administrativen Privilegien läuft. Informieren Sie den Dienst anschließend über Ihre Anwendung, um diese Befehle aufzurufen. Ich nehme an, dass Sie nicht möchten, dass der Benutzer administrative Anmeldeinformationen benötigt.

+0

Ich möchte in der Tat den Benutzer von Ausgaben wie wissen und Eingabe von Anmeldeinformationen vergießen. Ihre Methode ist genial, ist aber kein ständig laufender Service-Overkill für diese Aufgabe? Gibt es kein Windows-Suid-Äquivalent? – oparisy

+0

Es gibt nicht wirklich ein Äquivalent. Sie können die Benutzeranmeldeinformationen vom installierenden Benutzer abrufen und in einer anderen verschlüsselten Form speichern. Der Benutzer mag dies jedoch nicht, und Sie müssen den Fall behandeln, wenn sich die Anmeldeinformationen ändern. Aber es würde auch funktionieren, verwenden Sie einfach die RunAs-Funktion – BobbyShaftoe

+0

Allerdings würde ich mit der ersten Methode gehen. – BobbyShaftoe

0

Mit den WinAPI-Funktionen LogonUser und CreateProcessAsUser können Sie programmatisch einen neuen Prozess mit unterschiedlichen Zugriffsrechten starten.

Für Ihr Szenario würde ich ein Batch-Skript mit den erforderlichen net-Befehlen schreiben, und bei Bedarf erstellen Sie einen neuen cmd.exe-Prozess, der den Skriptnamen als Parameter erhält.

Diese Lösung erfordert, dass Sie die Anmeldeinformationen, die in LogonUser in Ihrer Anwendung verwendet werden, irgendwie speichern, sodass Sicherheitsrisiken bestehen können.

+0

Batch-Skript mit Administratorrechten aufgerufen? Dies ist ein Zug-Wrack-Desaster, das darauf wartet, passiert zu sein. Das Speichern von Administratoranmeldeinformationen ist ebenfalls keine gute Idee. – snemarch