![재부팅 후 EFS 파일에 액세스할 수 없음](https://rvso.com/image/1336292/%EC%9E%AC%EB%B6%80%ED%8C%85%20%ED%9B%84%20EFS%20%ED%8C%8C%EC%9D%BC%EC%97%90%20%EC%95%A1%EC%84%B8%EC%8A%A4%ED%95%A0%20%EC%88%98%20%EC%97%86%EC%9D%8C.png)
사용자를 위해 EFS로 파일을 암호화했습니다(이 이름을 "사용자 X"로 지정). "사용자 X"로 실행되는 애플리케이션은 암호화된 파일에 접근할 수 있습니다. 다음 재부팅까지 UI 로그인 화면을 통해 로그인하는 모든 사용자에 대해 로그오프 및 로그인 전반에 걸쳐 정상적으로 작동합니다.
재부팅 시 "사용자 X"로 실행 중인 응용 프로그램은 암호화된 파일에 액세스할 수 없습니다.
하지만 로그인 화면에서 "사용자 X"로 로그인하면 작동이 시작됩니다. 즉, "사용자 X"로 로그인하고 로그오프한 후 다른 사용자로 로그인하고 "사용자 X"로 내 응용 프로그램을 실행하면 암호화된 파일에 액세스할 수 있습니다.
그러나 디자인에 따라 "사용자 X"가 UI 화면을 사용하여 로그인하는 것을 원하지 않습니다.
재부팅 시 "사용자 X"가 EFS 암호화된 파일에 액세스할 수 없는 이유와 이를 해결하는 방법을 제안할 수 있는 사람이 있습니까? "사용자 X"로 실행되는 내 애플리케이션이 다음으로 로그인하지 않고 암호화된 파일에 액세스할 수 있어야 합니다. 사용자 X?
참고: 저는 Windows Embedded Std를 사용하고 있습니다. 7.
미리 감사드립니다.
답변1
보안 부분(인증, 로그온, 암호화 등)을 담당하는 lsass.exe라는 프로세스가 있습니다. 제가 착각한 것이 아니라면 이 프로세스는 대화형 로그온(예: 콘솔 또는 RDP) 중에만 실행됩니다. lsass.exe를 먼저 실행하는 작은 배치를 추가해 볼 수 있습니다.
답변2
10년 후, 귀하에게 도움이 될 수 있는 솔루션은 다음과 같습니다.
명령 프롬프트(배치 스크립트 [.bat])를 사용할 수 있거나 외부 exe를 실행할 수 있는 언어로 애플리케이션을 작성한 경우 대답은 다음과 같습니다.PSExec.exe& 관리자 권한이 필요하지 않습니다.
저는 Microsoft의 EFS가 내부적으로 코딩되거나 작동하는 방식에 대한 전문가는 아니지만 문제는 사용자 로그인 시에만 각 사용자에 대해 백그라운드에서 실행되는 인증서 및 개인 키 관리 프로그램과 관련된 것 같습니다. PC에서 다른 사용자(사용자 X)로 로그인해도 (이미 실행 중인 서비스 제외) 서비스가 시작되지 않기 때문에 프로그램이라고 말합니다.
PSExec백그라운드에서 완전히 사용자의 적절한 로그인을 수행할 수 있는 반면 '사용자로 실행'(또는 이와 유사한 것)은 사용자의 보안 토큰을 모방하는 것 같습니다(다시 말하지만 저는 Windows 직원이 아닙니다). 와 비슷하다로그온사용자기능.
어쨌든 문제를 완전히 해결하는 코드는 다음과 같습니다(사용자 X는 처음에 파일을 암호화한 사용자라는 점을 명심하세요).
배치 스크립트:
cd [PSExec Extracted Directory]
PSExec -accepteula -d -u "User X" -p "P455W0RD" cipher /c "C:\path\to\any\encrypted.file"
배치 파일이 실행되면 사용자 X를 대신하여 앱을 실행합니다. Windows의 기본 제공 기능을 사용하여 시작 시 배치 파일이 시작되도록 할 수 있습니다.작업 스케줄러.
위에서 일어난 일:
PSExec 디렉터리로 이동합니다.
다음 옵션을 사용하여 PSExec를 실행합니다.
(-accepteula) 이것이 없으면 PSExec에서 소프트웨어 라이센스에 동의하라는 메시지가 나타납니다.
(-d) 대화형 명령 프롬프트를 시작하지 않습니다.
(-u & -p) 실행하려는 앱을 원래 암호화한 사용자의 사용자 이름 및 비밀번호이며 해당 사용자는 (사용자 X)에 대해 앱을 실행하려는 사용자여야 합니다.
(cipher /c [filePath]) EFS를 사용하여 사용자 X를 대신하여 파일을 확인합니다. 이는 PSExec가 사용자 X로 제대로 로그인되면 사용자의 인증서 및 개인 키 프로그램을 시작하는 것입니다.
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;
비밀번호 측면에서 가장 안전한 것은 아니지만 이 게시물이 게시된 지 9년이 지나면 비밀번호를 사용할 수 있을 것이라고 확신합니다. 이것이 나 같은 사람이나 도중에 이런 일을 겪는 사람에게 도움이 되기를 바랍니다 :).