Файл EFS недоступен после перезагрузки

Я зашифровал файл с EFS для пользователя (назовем его "Пользователь X"). Приложение, которое работает как "Пользователь X", может получить доступ к зашифрованному файлу. Он продолжает нормально работать через выход из системы и вход в систему для любого пользователя, входящего через экран входа в систему пользовательского интерфейса до следующей перезагрузки.

После перезагрузки приложение, работающее как "Пользователь X", не может получить доступ к зашифрованному файлу.

Но когда я вхожу в "Пользователь X" с экрана входа, он начинает работать. Это означает, что как только я войду в систему как "Пользователь X", выйду из системы и войду в систему как любой другой пользователь, а мое приложение будет работать как "Пользователь Х", и он сможет получить доступ к зашифрованному файлу.

Но, согласно дизайну, я не хочу, чтобы "Пользователь Х" входил в систему с помощью экрана пользовательского интерфейса.

Может кто-нибудь подсказать, почему после перезагрузки "Пользователь Х" не может получить доступ к зашифрованному файлу EFS и как мне его разрешить, чтобы мое приложение, работающее как "Пользователь Х", получило доступ к зашифрованному файлу без входа в систему как пользователь X?

Примечание. Я использую Windows Embedded Std. 7.

Заранее спасибо.

2 ответа

Есть процесс с именем lsass.exe, который отвечает за безопасность (авторизация, вход в систему, шифрование и т. Д.). Если я не ошибаюсь, этот процесс выполняется только во время интерактивного входа в систему (например, консоль или RDP). Вы можете попробовать добавить небольшой пакет, который сначала запустит lsass.exe.

Десять лет спустя, вот решение, которое может вам подойти:

Если вы можете использовать командную строку (пакетный сценарий [.bat]) или написали свое приложение на любом языке, позволяющем запускать внешние exe-файлы, ответ кроется в PSExec.exe, и вам не нужны права ..

Я не эксперт в том, как EFS Microsoft закодирована или работает под капотом, но, похоже, проблема связана с программами управления сертификатами и закрытыми ключами, которые запускаются в фоновом режиме для каждого пользователя только после входа пользователя в систему. Я говорю программы, потому что никакие службы не запускаются (кроме уже запущенных) при входе в систему другого пользователя (Пользователя X) на ПК.

администратораPSExec может выполнить правильный вход пользователя в систему полностью в фоновом режиме, тогда как «запуск от имени пользователя» (или что-то в этом роде), похоже, имитирует токен безопасности пользователя (опять же, я не сотрудник Windows) с что-то вроде функции LogonUser .

В любом случае, вот код, который решает проблему раз и навсегда (имейте в виду, что пользователь X — это пользователь, который в первую очередь зашифровал файлы):


Пакетный скрипт:

      cd [PSExec Extracted Directory]
PSExec -accepteula -d -u "User X" -p "P455W0RD" cipher /c "C:\path\to\any\encrypted.file"

После запуска пакетного файла запустите приложение от имени пользователя X. Вы можете запустить пакетный файл при запуске с помощью встроенного планировщика задач Windows .

Что произошло выше:

  1. Перейдите в каталог PSExec.

  2. Запустите PSExec со следующими параметрами.

  3. (-accepteula) Без этого PSExec выводит запрос на согласие с лицензией на программное обеспечение.

  4. (-d) Не запускать интерактивную командную строку.

  5. (-u & -p) Имя пользователя и пароль для пользователя, который изначально зашифровал приложение, которое вы хотите запустить, и это также должен быть пользователь, для которого вы хотите запустить приложение (Пользователь X).

  6. (cipher /c [filePath]) Используйте EFS для проверки файла от имени пользователя X (это то, что запускает программы сертификатов и закрытых ключей для пользователя после того, как PSExec правильно вошел в систему как пользователь X).


С#-скрипт:

      //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;

Не самый безопасный с точки зрения ваших паролей, но я уверен, что через 9 лет после публикации этого поста у вас будут средства. Надеюсь, это поможет кому-то вроде меня или вас, кто столкнется с этим по пути :).

Другие вопросы по тегам