본문 바로가기

IT 살이/03. 관리 - 보안 관리

Vista의 가상화(Virtualization)

Vista에서는 일반 사용자(Administrators 그룹에 속한 사용자 포함)는 시스템에서 보호되는 디렉토리 또는 레지스트리에 직접 쓰지 못하도록 하고 있다. 보호받는 디렉토리와 레지스트리 경로는 다음과 같다.

(%SYSTEMROOT%, %PROGRAMDATA%, %PROGRAMFILES%\(서브디렉토리)

HKEY_LOCAL_MACHINE\SOFTWARE

그럼, 기존에 이런 곳에 접근해서 데이터를 저장하고 있는 어플리케이션은 모두 사용할 수 없게 되는 것인가.

Vista에서는 "임시"로 이런 어플리케이션의 호환성을 위하여 가상화 기술을 도입하고 있다. 어플리케이션에서 보호받는 디렉토리와 레지스트리에 데이터를 쓰려고 하면 Vista에서는 런타임시 그 경로를 사용자별 경로로 자동으로 변경시켜 준다. 

%SYSTEMROOT%, %PROGRAMDATA%, %PROGRAMFILES%\(서브디렉토리)
Redirect to: %LOCALAPPDATA%\VirtualStore

HKEY_LOCAL_MACHINE\SOFTWARE
Redirect to: HKEY_CURRENT_USER\Software\Classes\VirtualStore\MACHINE\SOFTWARE\<Application Registry Keys> 

어플리케이션에서는 보호받는 디렉토리, 레지스트리에 값을 쓰지만, 런타임시 Vista에서는 그것을 사용자별로 각자의 경로로 리다이렉트해서 그곳에 값을 쓴다는 얘기다. 다음 샘플 프로그램을 보자. 

namespace ConsoleApplication1

{

    class Program

    {

        static void Main(string[] args)

        {

            string programFiles = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles);

            string filePath = System.IO.Path.Combine(programFiles, "dalbong2.txt");

            Console.WriteLine(filePath);



            //빈 파일 생성

            System.IO.FileStream stream = System.IO.File.Create(filePath);

            stream.Close();

            Console.Read();

        }

    }

}


이 프로그램을 실행하는 계정은 물론 일반 사용자 계정이라고 하자. Program Files의 물리적 경로와  "dalbong2.txt"를 결합해서 Console로 출력한다. 그 값은 다음과 같다.

[그림] 프로그램상에서 인식하는 파일 경로


Program Files 폴더에 dalbong2.txt를 생성하겠다는 것인데, 그러나 실제 파일은 이곳에 저장되지 않는다. 프로그램으로부터 이 요청을 받으면 Vista에서는 다음 경로로 리다이렉트를 해서 파일을 저장한다.

[그림] 실제 저장 경로


파일이 실제 생성된 곳의 경로는 그림에서처럼 보는 바와 같다. 일반 사용자는 Program Files 폴더에 접근할 수 없기 때문에 에러가 발생하고 Vista에서는 가상화를 통해서 사용자별로 가상 디렉토리에 파일을 생성하게 되는 것이다. 그러나 만일 실행 파일을 관리자 권한으로 실행시킨다면 실제 "C:\Program Files\dalbong2.txt"로 저장될 것이다.



가상화는 앞에서 언급한 대로 레거시 어플리케이션과의 호환성을 위해서 취하고 있는 "임시" 기능이다.  64비트의 환경에서는 이 기능은 사라진다.