No se puede acceder al archivo EFS después de reiniciar

No se puede acceder al archivo EFS después de reiniciar

He cifrado un archivo con EFS para un usuario (llamémoslo "Usuario X"). Una aplicación que se ejecuta como "Usuario X" puede acceder al archivo cifrado. Sigue funcionando bien al cerrar sesión y al iniciar sesión para cualquier usuario que inicie sesión a través de la pantalla de inicio de sesión de la interfaz de usuario hasta el próximo reinicio.

Al reiniciar, la aplicación que se ejecuta como "Usuario X" no puede acceder al archivo cifrado.

Pero cuando inicio sesión como "Usuario X" desde la pantalla de inicio de sesión, comienza a funcionar. Es decir, una vez que inicio sesión como "Usuario X", cierro la sesión e inicio sesión como cualquier otro usuario y ejecuto mi aplicación como "Usuario X", puedo acceder al archivo cifrado.

Pero según el diseño, no quiero que el "Usuario X" inicie sesión usando la pantalla de la interfaz de usuario.

¿Alguien puede sugerir por qué al reiniciar el "Usuario X" no puede acceder al archivo cifrado EFS y cómo lo resuelvo, para que mi aplicación que se ejecuta como "Usuario X" pueda acceder al archivo cifrado sin iniciar sesión como usuario X?

Nota: estoy usando Windows Embedded Std. 7.

Gracias de antemano.

Respuesta1

Hay un proceso llamado lsass.exe que es responsable de la parte de seguridad (autenticación, inicio de sesión, cifrado, etc.). Si no me equivoco, este proceso se ejecuta solo durante los inicios de sesión interactivos (como consola o RDP). Puede intentar agregar un pequeño lote que primero inicie lsass.exe.

Respuesta2

Una década después, aquí tienes una solución que podría funcionar para ti:

Si puede utilizar el símbolo del sistema (script por lotes [.bat]), o ha escrito su aplicación en cualquier idioma que le permita ejecutar archivos ejecutables externos, la respuesta está enPSExec.exeY no necesita privilegios de administrador.

No soy un experto en cómo se codifica o funciona internamente el EFS de Microsoft, pero parece que el problema tiene algo que ver con los programas de administración de certificados y claves privadas que se ejecutan en segundo plano para cada usuario, solo cuando el usuario inicia sesión. Digo programas porque no se inicia ningún servicio (aparte de los que ya se están ejecutando) al iniciar sesión con el otro usuario (Usuario X) en la PC.

PSExeces capaz de realizar un inicio de sesión adecuado de un usuario completamente en segundo plano, mientras que "ejecutar como usuario" (o algo similar) parece estar imitando el token de seguridad del usuario (nuevamente, no soy un empleado de Windows) con algo similar alIniciar sesiónUsuariofunción.

De todos modos, aquí está el código que soluciona el problema de una vez por todas (tenga en cuenta que el Usuario X es el usuario que cifró los archivos en primer lugar):


Guión por lotes:

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

Una vez que se haya ejecutado su archivo por lotes, ejecute su aplicación en nombre del Usuario X. Puede hacer que el archivo por lotes se inicie al inicio utilizando la función integrada de Windows.programador de tareas.

Lo que pasó arriba:

  1. Vaya al directorio PSExec.

  2. Ejecute PSExec con las siguientes opciones.

  3. (-accepteula) Sin esto, PSExec aparece un mensaje para aceptar su licencia de software.

  4. (-d) No inicie un símbolo del sistema interactivo.

  5. (-u & -p) Nombre de usuario y contraseña del usuario que originalmente cifró la aplicación que desea ejecutar y también debe ser el usuario para el que desea ejecutar la aplicación (Usuario X).

  6. (cipher /c [filePath]) Utilice EFS para verificar un archivo en nombre del Usuario X (esto es lo que inicia los programas de certificado y clave privada en el usuario una vez que PSExec ha iniciado sesión correctamente como Usuario X).


Guión C#:

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

No es el más seguro en términos de contraseñas, pero estoy seguro de que después de 9 años de publicar esta publicación, tendrás tus medios. Espero que esto ayude a alguien como yo o tú que se encuentre con esto en el camino :).

información relacionada