![Auf die EFS-Datei kann nach dem Neustart nicht zugegriffen werden](https://rvso.com/image/1336292/Auf%20die%20EFS-Datei%20kann%20nach%20dem%20Neustart%20nicht%20zugegriffen%20werden.png)
Ich habe eine Datei mit EFS für einen Benutzer verschlüsselt (nennen wir sie „Benutzer X“). Eine Anwendung, die als „Benutzer X“ ausgeführt wird, kann auf die verschlüsselte Datei zugreifen. Sie funktioniert beim Abmelden und Anmelden für jeden Benutzer, der sich über den UI-Anmeldebildschirm anmeldet, bis zum nächsten Neustart einwandfrei.
Nach dem Neustart kann die als „Benutzer X“ ausgeführte Anwendung nicht auf die verschlüsselte Datei zugreifen.
Aber wenn ich mich vom Anmeldebildschirm aus als „Benutzer X“ anmelde, funktioniert es. Das heißt, sobald ich mich als „Benutzer X“ anmelde, mich abmelde und als beliebiger anderer Benutzer anmelde und meine Anwendung als „Benutzer X“ ausführe, kann sie auf die verschlüsselte Datei zugreifen.
Aber gemäß dem Entwurf möchte ich nicht, dass sich „Benutzer X“ über den UI-Bildschirm anmeldet.
Kann mir jemand sagen, warum „Benutzer X“ beim Neustart nicht auf die EFS-verschlüsselte Datei zugreifen kann und wie ich das Problem lösen kann, sodass meine als „Benutzer X“ ausgeführte Anwendung auf die verschlüsselte Datei zugreifen kann, ohne sich als Benutzer X anzumelden?
Hinweis: Ich verwende Windows Embedded Standard 7.
Vielen Dank im Voraus.
Antwort1
Es gibt einen Prozess namens lsass.exe, der für den Sicherheitsaspekt (Authentifizierung, Anmeldung, Verschlüsselung usw.) zuständig ist. Wenn ich mich nicht irre, läuft dieser Prozess nur bei interaktiven Anmeldungen (wie Konsole oder RDP). Sie können versuchen, einen kleinen Batch hinzuzufügen, der zuerst lsass.exe startet.
Antwort2
Ein Jahrzehnt später ist hier eine Lösung, die für Sie funktionieren könnte:
Wenn Sie die Eingabeaufforderung (Batch-Skript [.bat]) verwenden können oder Ihre Anwendung in einer Sprache geschrieben haben, die das Ausführen externer EXE-Dateien ermöglicht, liegt die Antwort inPSExec.exeund Sie benötigen keine Administratorrechte.
Ich bin kein Experte für die Codierung oder die Funktionsweise von Microsofts EFS, aber das Problem scheint etwas mit den Programmen zur Verwaltung von Zertifikaten und privaten Schlüsseln zu tun zu haben, die für jeden Benutzer im Hintergrund ausgeführt werden und nur dann ausgeführt werden, wenn sich der Benutzer anmeldet. Ich sage Programme, weil durch die Anmeldung des anderen Benutzers (Benutzer X) auf dem PC keine Dienste gestartet werden (außer den bereits laufenden).
PSExecist in der Lage, eine ordnungsgemäße Anmeldung eines Benutzers vollständig im Hintergrund durchzuführen, während „Als Benutzer ausführen“ (oder etwas Ähnliches) das Sicherheitstoken des Benutzers (wiederum bin ich kein Windows-Mitarbeiter) mit etwas Ähnlichem zu imitieren scheint wieAnmeldebenutzerFunktion.
Wie dem auch sei, hier ist der Code, der das Problem ein für alle Mal behebt (denken Sie daran, dass Benutzer X der Benutzer ist, der die Dateien ursprünglich verschlüsselt hat):
Batch-Skript:
cd [PSExec Extracted Directory]
PSExec -accepteula -d -u "User X" -p "P455W0RD" cipher /c "C:\path\to\any\encrypted.file"
Sobald Ihre Batchdatei ausgeführt wurde, führen Sie Ihre App im Namen von Benutzer X aus. Sie können die Batchdatei beim Start mithilfe der integrierten Funktion von Windows starten lassen.Aufgabenplaner.
Was oben passiert ist:
Gehen Sie zum PSExec-Verzeichnis.
Führen Sie PSExec mit den folgenden Optionen aus.
(-accepteula) Ohne diese Option zeigt PSExec eine Aufforderung zur Zustimmung zur Softwarelizenz an.
(-d) Starten Sie keine interaktive Eingabeaufforderung.
(-u & -p) Benutzername und Passwort für den Benutzer, der die App, die Sie ausführen möchten, ursprünglich verschlüsselt hat, und dieser muss auch der Benutzer sein, für den Sie die App ausführen möchten (Benutzer X).
(cipher /c [Dateipfad]) Verwenden Sie EFS, um eine Datei im Namen von Benutzer X zu überprüfen (dadurch werden die Zertifikat- und privaten Schlüsselprogramme beim Benutzer gestartet, sobald sich PSExec ordnungsgemäß als Benutzer X angemeldet hat).
C#-Skript:
//Register a process context for PSExec to initialize a real user logon & relevant EFS programs
ProcessStartInfo execution = new ProcessStartInfo
{
CreateNoWindow = true,
RedirectStandardError = true,
RedirectStandardOutput = true,
RedirectStandardInput = true,
WindowStyle = ProcessWindowStyle.Hidden,
UseShellExecute = false,
FileName = "C:\\path\\to\\PSExec.exe",
Arguments = "-accepteula -d -u \"User X\" -p \"P455W0RD\" cipher /c \"C:\\path\\to\\any\encrypted.file\""
};
//Run user & EFS initialization
Process.Start(execution).WaitForExit();
//Initialize execution of an encrypted program on behalf of a user
execution.FileName = directory + "\\Test\\Router\\AppController.exe";
execution.UserName = "User X";
execution.Password = new NetworkCredential("", "P455W0RD").SecurePassword;
//Run the specified user's exclusive application
Process.Start(execution);
//Terminate thread
return;
Nicht das sicherste in Bezug auf Ihre Passwörter, aber ich bin sicher, dass Sie nach 9 Jahren, in denen dieser Beitrag online ist, Ihre Mittel gefunden haben. Ich hoffe, dies hilft jemandem wie mir oder Ihnen, der unterwegs darauf stößt :).