Security

새로운 Windows Vista용 Elevation PowerToy

Michael Murgolo

 

한 눈에 보기:

  • 타사 스크립팅 도구용 Run as Administrator
  • Run as Another User
  • CMD 및 Windows PowerShell용 Prompt Here as System
  • Elevation Gadget에 끌어서 놓기

이 기사의 코드 다운로드: Elevation2008_06.exe (197KB)

Windows Vista용 Elevation PowerToy 새 버전을 소개합니다. TechNet Magazine 2007년 6월호에서 이 유틸리티에 대해 자세히 설명한 적이 있습니다. 그로부터 1년이 지난 지금, 이번에는 Run as Administrator 기능을

즐겨 사용하는 타사 스크립팅 도구로 확장하는 방법, Windows Vista®에서 제거된 편리한 Windows® XP 기능을 대체하는 방법, 그리고 Elevation PowerToy에 포함된 몇 가지 유용한 도구에 대해 살펴보겠습니다.

추가 스크립팅 도구용 Run as Administrator

이전 기사(technet.microsoft.com/magazine/cc162321.aspx)에서 다루었던 한 가지 주제는 기본 Windows 스크립팅 도구에 대한 Run as Administrator 옵션 지원에 대한 것이었습니다. 여기서는 다음과 같은 타사 스크립팅 도구에 대한 Run as Administrator PowerToy를 소개합니다.

이러한 각 도구에 대한 코드는 technetmagazine.com에서 이 기사와 함께 다운로드할 수 있습니다. 실제 파일의 이름은 각각 ElevateAutoIt3.inf, ElevateAutoHotKey.inf, ElevatePerlScript.inf 및 ElevateKiXtart.inf입니다. AutoIt v3, AutoHotkey 및 ActivePerl의 경우에는 간단히 설치할 수 있습니다. 단순히 해당 응용 프로그램을 다운로드하여 기본 위치에 설치하면 됩니다. 사용하고자 하는 응용 프로그램을 설치한 후 각 도구에 대해 해당 Run as Administrator PowerToy를 설치하기만 하면 됩니다.

안타깝게도 Kixtart 2010은 설치 관리자를 제공하지 않습니다. 그래서 KiXtart가 표준 위치에 설치되어 PowerToy가 올바르게 작동되도록 하기 위해 Program Files\KiXtart에 KiXtart 2010(v 4.60)을 설치하고 .kix 파일 확장명을 등록하는 INF 파일을 제공했습니다.

www.kixtart.org/?p=downloads로 이동하여 KiX2010_460.zip을 다운로드하고 폴더로 압축을 풉니다. 이 기사와 함께 제공되는 코드 다운로드에 포함된 Install_KiXtart.inf 파일을 동일 폴더로 복사합니다. 그런 다음 Install.Kixtart.inf를 마우스 오른쪽 단추로 클릭하고 "설치"를 선택합니다. 다음에는 ElevateKiXtart.inf PowerToy를 설치하면 됩니다.

Run as Another User PowerToy

사용자, 심지어 관리자도 표준 사용자 권한으로 대부분의 응용 프로그램을 실행하도록 하여 운영 체제의 맬웨어에 대한 취약성을 낮추기 위해 UAC(사용자 계정 컨트롤)가 생성되었습니다. UAC는 관리 작업 및 기타 응용 프로그램 기능을 위한 권한 상승 기능을 제공합니다. 이 권한 상승 기능은 Run as Administrator 옵션을 통해 제공되며, 이 옵션은 실행 파일을 마우스 오른쪽 단추로 클릭하면 나타납니다. 2007년 6월 기사에서 설명했던 Elevation PowerToy에는 이 기능을 다른 파일과 개체 유형에도 적용되도록 확장했습니다.

Windows Vista에 기본으로 제공된 기능은 다양한 관리 작업에 잘 맞는 편입니다. 하지만 Windows Vista에는 한 가지 중요한 시나리오가 빠졌습니다. 많은 IT 부서에서는 네트워크 관리자가 일상 작업(전자 메일 사용, 문서 작성 등)용으로 하나의 사용자 계정을 사용하고 네트워크 관리(또는 로컬 컴퓨터 관리) 전용으로 또 하나의 계정을 사용하도록 하는 정책을 사용합니다.

이러한 정책은 네트워크 관리자가 일상 작업을 수행하는 중에 우발적으로 맬웨어를 실행하는 경우 관리자가 전체 시스템이나 해당 도메인을 손상시키지 않도록 위험을 낮추기 위한 목적입니다. 이 목적은 Windows XP에서 "...(으)로 실행" 오른쪽 클릭 옵션의 사용을 통해 실현되었습니다. 하지만 Windows Vista에서는 이 옵션이 제거되고 Run as Administrator 옵션으로 대체되었습니다.

그러나 runas 명령줄 도구는 Windows Vista에도 여전히 존재합니다. 안타깝게도, Microsoft® Management Console(MMC) 스냅인을 실행하는 가장 일반적인 이중 계정 작업에는 이 도구를 사용할 수 없습니다. 예를 들어, Active Directory®에서 일부 계정 관리 작업이 여러분에게 위임되었다고 가정해 보겠습니다. 일상적인 작업을 위해서는 표준 사용자로 실행하며, UAC를 사용하는 Windows Vista 컴퓨터에서는 네트워크 관리 계정도 로컬 관리 그룹의 구성원이므로 필요할 경우 네트워크 관리 도구를 설치할 수 있습니다. 이제 Active Directory 관리 계정을 사용하여 ADU&C(Active Directory 사용자 및 컴퓨터)를 시작하려고 하며, 다음과 같이 runas 명령을 시도합니다.

runas /user:mydomain\admin
"mmc.exe %windir%\system32\dsa.msc"

안타깝게도 이 명령을 실행해도 ADU&C가 시작되지 않습니다. 대신 "요청한 작업을 수행하려면 권한 상승이 필요합니다"라는 runas 오류가 표시됩니다. 이 경우는 MMC 실행 파일이 highestAvailable 권한 수준에서 실행되도록 표시되어 있음을 의미합니다. 네트워크 관리자 계정에 대한 highestAvailable 수준은 관리자이기 때문에 이 방식으로 ADU&C를 시작하려면 권한 상승이 필요합니다. runas는 권한 상승 프롬프트를 나타내지 못하므로 오류가 발생합니다.

따라서 Windows Vista에서는 "...(으)로 실행"에 대한 상황에 맞는 메뉴 항목을 제공하지 않고 프로세스를 권한 상승이 필요한 다른 사용자로 실행할 수 있는 기본 수단을 제공하지 않으므로 이 시나리오를 해결하기 어렵습니다.

이 시나리오에 대한 솔루션이 없다면 매우 실망스럽겠지만 다행히도 솔루션이 있습니다. 이전 Elevation PowerToy 중 하나가 두 번째 문제를 해결하기 위한 키를 제공하며, 첫 번째 문제에 대한 솔루션도 준비하고 있습니다. 솔직히 제가 권한 상승 문제에 대한 솔루션을 개발했다고 주장하고 싶지만 이 솔루션은 Windows AppCompat 팀의 Gov Maharaj로부터 얻은 것입니다.

Elevate Command PowerToy를 runas 명령과 함께 사용할 수 있는 것으로 나타났습니다. 이전 명령은 권한 상승 프롬프트를 나타내지 못했지만 다음 코드는 권한 상승 프롬프트를 나타냅니다.

runas /user:mydomain\admin
"elevate mmc.exe%windir%\system32\dsa.msc"

이 코드를 실행하면 runas가 elevate.cmd(기술적으로 말하면 시작되는 프로세스는 cmd.exe임)를 다른 사용자 권한으로 시작하며 elevate 명령이 권한 상승 프롬프트와 함께 mmc.exe 시작을 담당합니다.

최종적으로 이 방법을 사용하여 이를 .exe 및 .msc 파일에 대한 파일 연결과 결합한 후 HTML 응용 프로그램 UI를 제공하여 오른쪽 클릭 메뉴를 통해 사용할 수 있는 Run as Another User 옵션을 생성하는 PowerToy를 만들었습니다. Run as Another Use를 선택하면 그림 1과 같은 HTML 응용 프로그램이 나타납니다.

그림 1 Run as Another User 도구

그림 1** Run as Another User 도구 **(더 크게 보려면 이미지를 클릭하십시오.)

여기서 로컬 컴퓨터 계정으로 간단히 사용자 이름과 도메인을 입력하고 "Use Local Account" 확인란을 선택합니다. 그런 다음 "Run" 단추를 클릭하여 해당 응용 프로그램을 표준 사용자로 시작하거나, "Run as Admin" 단추를 클릭하여 상승된 권한으로 응용 프로그램을 시작할 수 있습니다. 이 두 가지 단추 중 하나를 클릭한 후에는 runas.exe가 실행되고 암호 또는 스마트 카드 PIN을 요청하는 프롬프트가 표시됩니다.

이 PowerToy에서는 Elevate Command PowerToy를 사용하기 때문에 Elevate Command PowerToy를 먼저 설치해야 합니다. 그런 다음 RunAs.inf 파일을 마우스 오른쪽 단추로 클릭하고 "설치"를 선택한 다음 권한 상승을 승인합니다. 이 도구를 제거하려면 "프로그램 및 기능" 제어판을 사용합니다.

관리 도구에 있는 .msc 파일에 대한 일부 바로 가기(컴퓨터 관리 등)가 이 PowerToy와 작동함을 알 수 있습니다. 하지만 adminpak.msi를 사용하여 Windows Server® 2003 관리 도구를 설치하는 경우 생성되는 바로 가기는 .msc 파일에 대한 표준 바로 가기가 아닙니다. 대신 이러한 바로 가기는 Windows Installer 바로 가기이므로 Windows 탐색기에 이러한 바로 가기에 대한 Run as Another User 옵션이 표시되지 않습니다.

이러한 바로 가기의 경우 실제 .msc 파일을 찾아서 마우스 오른쪽 단추로 클릭하거나 .msc 파일에 대한 새 바로 가기를 만들어야 합니다. 또한 Internet Explorer가 Windows Vista의 보호 모드에 맞게 다시 설계되었기 때문에 runas가 Internet Explorer®에서는 작동하지 않습니다. 이 문제에 관한 자세한 내용은 support.microsoft.com/?id=922980을 참조하십시오.

참고: 이러한 PowerToy를 완성한 후 이 기사를 작성하는 사이에 Windows Sysinternals에서 Run as Another User PowerToy와 매우 비슷하게 작동하는 새로운 도구를 발표했습니다. ShellRunas라는 도구로 Windows Sysinternals 사이트 technet.microsoft.com/sysinternals/cc300361에서 찾아볼 수 있습니다.

Sysinternals에서는 전문적으로 실제 코드를 작성하기 때문에 이 도구가 사용하기 더 좋을 수도 있습니다. 제가 만든 유틸리티는 스크립트 코드와 함께 HTML 응용 프로그램을 사용하여 어떻게 특히 이 작업 및 일반적인 셸 확장을 수행할 수 있는지에 대한 예로 그대로 기사에 남겨 두기로 했습니다.

CMD Prompt Here as System 및 PowerShell Prompt Here as System

로컬 시스템 컨텍스트에서 프로그램을 실행해야 할 때가 있습니다. 예를 들면, System Center Configuration Manager(SCCM) 등 많은 소프트웨어 배포 도구는 로컬 시스템으로 실행되는 클라이언트 에이전트를 사용하여 작업을 수행합니다.

SCCM과 같은 제품의 배포를 시도하기 전에 로컬 시스템으로 실행되는 소프트웨어 설치 프로그램의 동작을 테스트하려면 로컬 시스템으로 실행되는 명령 프롬프트를 사용하여 설치 관리자를 시작하는 것이 유용할 수 있습니다. 따라서 저는 CMD 및 PowerShell Prompt Here as System PowerToy를 작성하기로 했습니다.

Windows XP를 사용할 때는 이와 같은 기능을 다음 명령 셸 스크립트를 사용하여 수행하곤 했습니다.

@echo off
sc create CmdAsSystem type= own type= interact
binPath= "cmd /c start cmd /k (cd c:\ ^& color ec ^& 
title ***** SYSTEM *****)"
net start CmdAsSystem
sc delete CmdAsSystem

하지만 Windows Vista에서는 권한이 상승된 명령 프롬프트에서 이 코드를 실행하려 할 경우 다음 오류 메시지가 표시되고 시스템으로 실행되는 명령 프롬프트가 나타나지 않습니다.

경고:  CmdAsSystem 서비스는 대화형으로 구성되어 있으며 
지원되지 않고 않습니다. 
서비스가 올바르게 작동하지 않을 수 있습니다.

문제는 이 스크립트가 대화식 서비스를 생성 및 시작하려 한다는 점입니다. 대화식 서비스는 Windows Vista의 세션 0 격리로 인해 올바르게 작동하지 않습니다. 세션 0 격리에 대한 설명은 microsoft.com/whdc/system/vista/Vista_Services.mspx에서 볼 수 있는 "Services in Windows Vista" 백서를 참조하십시오.

이 제한을 해결하기 위해 저는 Sysinternals에서 개발한 Psexec 도구를 사용했습니다. 이 도구에 대한 자세한 내용은 technet.microsoft.com/sysinternals/bb897553.aspx를 참조하십시오. 이 도구를 사용하면 프로세스를 시스템 컨텍스트에서 시작할 수 있습니다. 안타깝게도 대부분의 Sysinternationals 도구에는 설치 관리자가 포함되어 있지 않습니다. 따라서 저는 Psexec를 포함하는 전체 Sysinternals Suite를 Program Files\Sysinternals Suite에 설치하기 위한 INF 파일(코드 다운로드에 제공)을 제공했습니다. 추가 보너스로 이 INF 파일은 Sysinternals Suite의 그래픽 도구에 대한 시작 메뉴 바로 가기도 만듭니다.

이 Sysinternals Suite를 설치하려면 먼저 technet.microsoft.com/sysinternals/bb842062.aspx에서 SysinternalsSuite.zip을 다운로드하여 폴더에 압축을 풉니다. 그런 다음 INF 파일(Install_SysinternalsSuite.inf)을 해당 폴더로 복사한 후 Install_SysinternalsSuite.inf를 마우스 오른쪽 단추로 클릭하고 "설치"를 선택합니다. 이러한 새 PowerToys에서는 Elevate Command PowerToy를 사용하므로 다음으로 이 유틸리티를 설치합니다. 이렇게 한 후에는 CmdHereAsSystem.inf와 PowerShellHereAsSystem.inf를 설치할 수 있습니다. 이러한 PowerToy를 설치하고 나면 그림 2와 같이 Windows 탐색기에서 폴더 및 드라이브에 대한 오른쪽 클릭 항목으로 CMD Prompt Here as System과 PowerShell Prompt Here as System 옵션을 사용할 수 있습니다.

그림 2 CMD Prompt Here as System 및 PowerShell Prompt Here as System 옵션

그림 2** CMD Prompt Here as System 및 PowerShell Prompt Here as System 옵션 **

그림 3은 시스템으로 실행되는 CMD 프롬프트를 보여 줍니다. 이 프롬프트가 시스템으로 실행 중이며 잘못된 명령을 입력할 경우 시스템에 예기치 않은 문제가 발생하고 시스템이 손상될 수 있다는 것을 경고하기 위해 밝은 색상을 선택했습니다.

그림 3 CMD Prompt as System은 신중하게 사용해야 합니다.

그림 3** CMD Prompt as System은 신중하게 사용해야 합니다. **

마지막으로 PowerToy에서 이러한 프롬프트가 실행 대화 상자나 CMD 프롬프트에서 시작될 수 있도록 시스템에 명령을 추가합니다. 예를 들어, "실행" 상자에서 다음 명령을 실행하면 WIndows 폴더에서 CMD 프롬프트가 시스템으로 시작됩니다.

cmdassystem "c:\windows"

이에 해당하는 Windows PowerShellTM 명령은 psassystem입니다. 또한 각각 cmdasadmin 및 psasadmine라는 유사한 명령을 설치하도록 CMD 및 PowerShell Prompt Here as Administrator PowerToy도 수정했습니다.

Elevation Gadget

대부분의 PowerToy에서는 마우스 오른쪽 단추를 클릭해야 합니다. 하지만 이 업데이트의 보너스로 좀 더 재미있는 부분을 포함시켰습니다. 바로 Windows 사이드바 가젯인데, 저는 이 가젯을 Elevation Gadget(그림 4 참조)이라고 부릅니다. 이 가젯에는 끌어서 놓기 기능을 사용할 수 있습니다. Windows 탐색기에서 runas 동작이 정의되어 있는 스크립트 또는 실행 파일을 끌어다 놓기만 하면 상승된 권한으로 시작됩니다.

그림 4 Elevation Gadget에 끌어서 놓기

그림 4** Elevation Gadget에 끌어서 놓기 **

이전 Elevation PowerToy를 설치한 경우 Windows Script Host 스크립트, Windows PowerShell 스크립트, HTML 응용 프로그램, Windows Installer 패키지 및 패치, Windows Vista에서 기본적으로 runas 동작이 정의되어 있는 실행 파일 및 명령 셸 스크립트에 대해 이 가젯이 작동합니다. 또한 한 번에 두 개 이상의 항목을 끌어다 놓을 수도 있습니다. 폴더 하나를 가젯으로 끌어다 놓고 어떻게 되는지 보십시오.

이 가젯을 설치하려면 Elevation.gadget(코드 다운로드에 제공)을 두 번 클릭합니다. 가젯 코드를 살펴보려면 .cab 확장명을 파일 이름에 추가하면 됩니다. 그런 다음 Cab 파일의 내용을 추출할 수 있습니다.

요약

이 기사의 다운로드에는 새 PowerToy와 이전 기사에 소개된 PowerToy가 모두 포함되어 있습니다. 이전 PowerToy 중 일부를 조금 수정했습니다. 예를 들면, Windows PowerShell Prompt Here as Administrator 및 Elevate WSH Script의 이전 버전은 모두 고유의 elevate.cmd 및 elevate.vbs 사본을 설치했습니다. 몇몇 새 PowerToy도 이 파일에 의존하므로 이러한 도구를 변경하여 Elevate Command PowerToy를 설치하여 해당 사본을 공유하도록 했습니다. PowerToy에서 Elevate Command PowerToy 설치를 필요로 하는지 확인하려면 INF 파일의 헤더를 보면 됩니다.

다른 이전 PowerToy도 기능적인 부분은 아니지만 조금씩 변경되었습니다. 최신 버전의 PowerToy를 설치하려면 항상 이전 버전을 제거해야 합니다. 이 유틸리티 모음에 현재 17가지 도구가 포함되어 있으므로 전체 유틸리티 모음을 설치 및 제거할 수 있는 InstallAllPowerToys.cmd 및 UninstallAllPowerToys.cmd라고 하는 명령 셸 스크립트를 각각 추가했습니다. 사용하려는 도구만 설치 및 제거하도록 이 스크립트를 사용자 지정할 수도 있습니다.

InstallAllPowerToys.cmd는 기본적으로 타사 스크립팅 도구용 Run as Administrator PowerToy는 설치하지 않습니다. 설치된 소프트웨어에 해당하는 PowerToy만 설치하도록 이 스크립트를 수정할 수 있습니다. 이러한 도구 중 하나를 실행하면 해당 도구가 상승된 권한으로 다시 시작됩니다. UninstallAllPowerToys.cmd는 이러한 도구의 이전 버전을 모두 제거합니다.

모든 PowerToy와 마찬가지로 이러한 도구에 대한 지원은 없으며 사용으로 인한 위험은 사용자 스스로 감수해야 합니다. 이 도구는 Microsoft 정식 제품이 아니며 개인적으로 작성한 것입니다. 이 도구는 32비트 Windows Vista에서 영어를 기본 언어로 하여 저와 몇몇 자원자를 통해서만 테스트되었습니다. 마지막으로 이러한 PowerToy 전체 또는 일부는 향후 출시되는 Windows 업데이트, 서비스 팩 또는 운영 체제 버전에서 작동하지 않을 수도 있습니다.

Michael Murgolo는 Microsoft Consulting Services의 수석 인프라 컨설턴트로, 운영 체제, 배포, 네트워크 서비스, Active Directory, 시스템 관리, 자동화 및 패치 관리를 담당하고 있습니다. 데스크톱 배포와 마이그레이션 분야의 전문가입니다.

© 2008 Microsoft Corporation 및 CMP Media, LLC. All rights reserved. 이 문서의 전부 또는 일부를 무단으로 복제하는 행위는 금지됩니다..