SimpleIsBest.NET

유경상의 닷넷 블로그

WMI 보안에 대하여...

by 블로그쥔장 | 작성일자: 2005-12-21 오전 11:37:00
이 글은 오래된 전에 작성된 글입니다. 따라서 최신 버전의 기술에 알맞지 않거나 오류를 유발할 수 있습니다. 저자는 이 글에 대한 질문을 받지 않을 것입니다. 하지만 이 글이 리뉴얼 되면 이 글에 대한 질문을 하거나 토론을 할 수도 있습니다.
WMI(Windows Management Instrumentation)은 여러모로 쓸모 있는 기능들을 많이 제공합니다. 시스템의 다양한 정보들을 제공할 뿐만 아니라 시스템을 리부팅하거나, 서비스를 시작, 중단 하는 등의 작업도 수행할 수 있지요. 그 뿐인가요? 윈도우 시스템에서 발생하는 다양한 이벤트(레지스트리 변경, 서비스 시작/중단 등)도 친절하게 알려준다. WMI에 익숙하지 않은 독자라면, 필자의 Management & Instrumentation of Your own Application 란 글을 읽어 보기 바랍니다. 오늘은 WMI의 보안에 대해서 간략히(?) 살펴보겠습니다.

WMI Security

오늘의 노가리 거리는 WMI의 보안에 대한 내용이다. 필자도 단순히 WMI 역시 NTFS 나 액티브 디렉터리처럼 네임스페이스 혹은 클래스 별로 보안 설정을 할 것이라는 막연한 생각만 가지고 있었을 뿐, 구체적으로 보안 설정을 어떻게 하는지 알지 못 했다. 그러다 오늘 관련된 테스트를 한 김에 몇 마디 끄적여 볼까 한다.

Episode I : UnauthorizedAccessException

필자가 우연히(?) WMI에 관련된 예제 코드를 작성할 때, 심심풀이로 원격 컴퓨터의 정보를 WMI를 통해 읽도록 작성했었다. 원격 컴퓨터는 필자의 노트북과 동일한 사용자 계정과 비밀번호를 사용했기 때문에 이 코드는 아무런 문제 없이 작동했다(리스트1).

    1 using System;

    2 using System.Management;

    3 

    4 public class WMIRemoteLogicalDiskSampleApp

    5 {

    6     [STAThread]

    7     public static void Main(string[] args)

    8     {

    9         // 매개변수로부터 컴퓨터 이름, 아이디, 비밀번호를 받는다.

   10         string computerName = null, userid = null, password = null;

   11 

   12         if (args.Length == 1) {

   13             computerName = args[0];

   14         }

   15         else if (args.Length == 3) {

   16             computerName = args[0];

   17             userid = args[1];

   18             password = args[2];

   19         }

   20         else {

   21             Console.WriteLine("usage: List Remote Logical Disks.exe [computername] [userid] [password]");

   22             return;

   23         }

   24         string wmiPath = string.Format(@"\\{0}\root\cimv2", computerName);

   25 

   26         ManagementObjectCollection queryCollection = null;

   27 

   28         // 원격 컴퓨터 접속을 위한 옵션 설정

   29         ConnectionOptions opt = new ConnectionOptions();

   30         opt.Username = userid;

   31         opt.Password = password;

   32 

   33         ManagementScope scope = new ManagementScope(wmiPath, opt);

   34 

   35         // ObjectQuery를 통해 검색 한다.

   36         ObjectQuery query = new ObjectQuery("SELECT * From Win32_LogicalDisk ");

   37         ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);

   38 

   39         try {

   40             queryCollection = searcher.Get();

   41             foreach(ManagementObject obj in queryCollection) {

   42                 Console.Write("{0} : [{1}]\t", obj["Name"], obj["Description"]);

   43                 // removable 디스크와 logical 하드 정보만 표시한다.

   44                 uint driveType = (uint)obj["DriveType"];

   45                 if (driveType == 2 || driveType == 3) {

   46                     Console.WriteLine(" : Total {0,6:0,000} MB,  {1,6:0,000} MB Free",

   47                         (ulong)obj["Size"] / (1024*1024),

   48                         (ulong)obj["FreeSpace"] / (1024*1024));

   49                 }

   50                 else {

   51                     Console.WriteLine();

   52                 }

   53             }

   54         }

   55         catch (Exception ex)

   56         {

   57             Console.WriteLine("WMI 예외 :\n{0}", ex.ToString());

   58         }

   59     }

   60 }

리스트1. 로컬/원격 컴퓨터의 디스크 정보를 표시하는 간단한(?) WMI 예제 코드

여기서 테스트를 멈추었다면 인생이 이렇게 피곤하지 않았을 텐데 말이다. 공연히 다른 Windows 2003 서버에 대해 테스트를 해본답시고 프로그램을 한번 더 돌렸다. 그랬더니 UnauthorizedAccessException 예외가 발생하면서 "액세스가 거부되었습니다" 혹은 본토 말로 "Access Denied" 오류 메시지가 발생한 것 이였다. 갑자기 빡돌아 버린 필자, 원인을 찾기 위해 삽질을 시작하게 된 것이다.

Episode II : Remote WMI Access & DCOM Protocol

원격으로 WMI를 사용할 때는 DCOM (Distributed COM) 프로토콜이 사용된다. 원래 WMI 란 것이 COM을 통해 API를 제공하기 때문에 원격 컴퓨터를 WMI를 통해 액세스 한다면 DCOM이 사용되는 것은 당연하다고 할 수 있겠다. 닷넷의 System.Management 네임스페이스 역시 WMI의 COM 인터페이스에 대한 래퍼(wrapper)일 뿐이다. 언제나 이 놈의 COM에서 벗어날 수 있을까 하는 독자가 있다면, 적어도 몇 년 동안은 COM에 시달려야 할 것은 분명하다. 10여 년 동안 Microsoft의 핵심 기술로서 사용되어 왔고 많은 운영체제 컴포넌트들에 의해 사용되는 COM이 하루 아침에 사라지지 않을 것임은 너무나도 자명하다.

어찌 되었건, WMI를 통해 원격 컴퓨터를 액세스하면 DCOM이 사용되므로, DCOM에 관련된 제반 설정이 정확한가 먼저 살펴야 한다. DCOM 설정 중 가장 먼저 살필 것은 RPC에 대한 것이다. DCOM은 하부 프로토콜로서 RPC (Remote Procedure Call)를 사용하므로 RPC 설정 역시 검토의 대상이다(줴길... 먼 넘의 것이 이렇게 걸리는 게 많은지...). RPC 가 사용하는 포트, 방화벽 등등을 검토해 보아야 할 것이다. RPC가 사용하는 포트가 어떤 것이고, 이것을 바꾸는 방법, 방화벽 설정 그리고 RPC를 테스트하는 구체적인 방법은 지난 RPC 관련 포스트 시리즈들을 살펴보기 바란다. 간단히 요약하면, WMI 클라이언트와 WMI 서버 사이에 방화벽이 있다면 RPC가 제대로 작동하지 않을 확률은 99.999 % 이다. 따라서 RPC가 사용하는 포트를 조정하고 방화벽에서 이들 포트를 열어주어야만 한다.

액세스 하고자 하는 컴퓨터에 대해 RPC 가 작동한다고 끝은 아니다. 해당 원격 컴퓨터에 DCOM이 활성화 되었는가를 또 확인해 보아야 한다. 필자가 테스트한 첫 번째 서버는 이 설정이 잘못되어 있었다. 즉, DCOM을 사용 불가로 해놓았기 때문에 원격 WMI 액세스에 문제가 발생한 것이다. 확인 방법은 "구성 요소 서비스"의 "내 컴퓨터"의 등록 정보 메뉴를 선택하면 나타나는 "DCOM 기본 속성" 대화 상자를 사용하면 된다(화면1).


화면1. DCOM 사용 설정

이외에도 DCOM에서 사용하는 보안 설정을 살펴보아야 한다. WMI 서버의 관리자 계정(Administrators 그룹에 포함된 계정)을 사용한다면 문제는 없을 것이다. 이들 관리자 계정들은 기본적으로 DCOM을 원격에서 사용할 수 있도록 설정되어 있다. 만약, 미천한 일반 계정으로 원격 WMI 호출을 해야 한다면 DCOM 보안 설정을 해 주어야 한다. DCOM 보안 설정은 설명할 것이 존나게 많은 관계로 다음 기회로 미루기로 하겠다.

Episode III : WMI Namespace Security

DCOM에 대한 여러 테스트 및 설정 결과, 필자가 사용할 수 있는 다양한 원격 컴퓨터들에 대해 리스트1의 코드는 정상적으로 작동했다. 여기서 만족하고 테스트를 끝냈다면, 이 포스트를 쓸 일도 없었을 것이다. 하지만, 필자의 병적인 호기심이 또 발동한 것이다. 관리자 계정이 아닌 일반 계정으로 원격 WMI 액세스도 가능하겠지? 그래서 테스트 해봤다. 물론 일반 계정으로 리스트1의 코드를 수행해 보면 UnauthorizedAccessException 이 발생한다. DCOM 보안 설정이 문제인 것으로 판단되어 DCOM 보안 설정을 해봤다. 그래도 결과는 마찬가지 였다. 아무리 DCOM 보안 설정을 이리저리 바꾸어도 관리자 계정이 아닌 일반 사용자 계정으로 원격 WMI 액세스는 실패했다. 분노 게이지가 상승한 필자... 간단한 DCOM 서버까지 작성하고 일반 사용자 계정으로 호출해 보니, 잘 작동하는 것이 아닌가?

그렇다. 일반 사용자 계정을 사용하면 DCOM 보안 설정을 통과 하더라도 WMI 보안에 의해 원격 호출은 실패하는 것 이였다. 로컬 컴퓨터를 액세스하는 경우, 일반 사용자 계정을 사용하더라도 리스트1 정도의 '읽기' 작업은 오류를 발생하지 않는다. 하지만, 원격 액세스를 하는 경우에만 일반 사용자 계정에 제한이 있는 것 이였다. 잽싸게 MSDN 라이브러리를 뒤져 보았다. 젠장... 예전에 그냥 WMI 도 별도의 보안이 있을 것이다라고 만 생각하고 까맣게 잊어버린 바로 그 보안 설정이 MSDN에 떡하고 설명되어 있지 않은가? 이래서 닭 대가리는 고달픈가 보다.

WMI는 자체적으로 각 WMI 네임스페이스 별로 액세스 권한을 명시할 수 있도록 되어 있다. 각 네임스페이스에는 __SystemSecurity 라는 WMI 클래스를 갖고 있고 이 클래스의 메쏘드들을 호출하여 WMI 클래스 및 인스턴스에 대한 액세스 권한을 읽거나 설정할 수 있다. 이렇게 WMI 네임스페이스에 설정된 액세스 권한은 해당 네임스페이스의 모든 하위 클래스 및 인스턴스에 대한 액세스 권한을 설정한다. 구체적인 예제 코드를 설명하자면, SID (Security Identifier), ACL (Access Control List) 등을 모두 설명해야 하고, 이들에 대한 설명은 책 한 권 수준이므로 대략 무리다. 코드 말고 권한 설정을 해줄 방법은 없을까?

물론 있다. 필자도 이제서야 알게 된 WMI 컨트롤이란 것을 사용하면 된다. WMI 컨트롤 이라는 녀석은 로컬 컴퓨터의 WMI 보안 설정과 WMI Repositary를 백업하는 등의 관리 기능을 제공하는 다이얼로그를 말한다. WMI 컨트롤을 사용하는 방법은 매우 쉽다. 사실 눈길을 잘 안 줘서 그렇지 우리들이 잘 아는 곳에 위치해 있다. 제어판의 시스템을 선택하거나, "내 컴퓨터"의 관리 메뉴를 선택하면 나타나는 "컴퓨터 관리" MMC에서 "서비스 및 응용 프로그램" 폴더의 하부를 살펴보면, WMI 컨트롤이란 것이 떡 하고 버티고 있을 것이다(화면 2).


화면2. "컴퓨터 관리" MMC에서의 WMI 컨트롤

WMI 컨트롤의 오른쪽 패널은 별다르게 표시되는 것이 전혀 없으므로 신경을 끄고, WMI 컨트롤의 컨텍스트 메뉴(오른쪽 클릭하면 나타나는 메뉴 있자나...)의 속성을 지긋이 눌러 보자. 그러면 WMI 컨트롤이 나타날 것이다(화면 3). 오 놀라워라... 이런 것이 있었는 줄은 정말 몰랐다... 우~~~워~~~ -_-;

WMIControlAndSecurity.png
화면3. WMI 컨트롤과 네임스페이스 보안 설정

WMI 컨트롤에서 보안 탭을 살펴보면 WMI Repository 에 저장된 WMI 네임스페이스들이 트리 형태로 나타난다. 그리고 각 네임스페이스를 클릭하고 "보안" 버튼을 누르면 네임스페이스에 설정된 액세스 권한을 보여주는 표준 액세스 권한 대화 상자가 나타날 것이다(화면 3). 대부분의 Windows 보안이 그러하듯이 권한은 상속된다. WMI 역시 Root 네임스페이스에 설정된 권한을 하위 네임스페이스들이 상속 받고 있음을 확인해 볼 수 있다. 그리고...

Everyone 그룹에 설정된 액세스 권한 설정의 찬찬히 살펴보면... "원격으로부터 사용 가능" 이란 권한이 기본적으로 주어져 있지 않음을 발견할 수 있다. 이런 C8, 이런 게 있는지 모르면 백날 방화벽에, RPC 포트에, DCOM 보안 설정해봤자 관리자가 아닌 계정으론 항상 Access Denied 오류가 발생할 것 아닌가... 하긴 몰랐던 필자가 바보지, MS가 이걸 숨긴 건 아니니까... T_T

WMI 액세스 권한의 종류와 의미는 MSDN을 참조해 보면 알 수 있다. 허탈감에 빠진 필자도 상세하게 읽어 보진 못 했다. 대충, "계정 사용" 권한은 해당 계정이 WMI 스키마와 객체의 속성을 읽을 수 있는 권한을 의미하며, "메서드 실행" 권한은 WMI 클래스의 메쏘드를 호출할 수 있는 권한을 말한다. 여기서 주의할 점은 "메서드 실행" 권한이란 것이 WMI 클래스의 메쏘드를 호출할 수 있는 권한만을 얘기하는 것이며 메쏘드 내에서 수행하는 작업에 대한 권한은 아니라는 점이다. 예를 들어, 시스템을 리부팅하는 메쏘드를 호출할 때는 메쏘드를 호출하는 권한은 WMI에 의해 확인되지만, 리부팅 하는 권한은 별도로 확인되어 진다.

"전체 쓰기 권한"은 WMI 클래스의 속성을 쓰거나 인스턴스의 속성에 대한 쓰기 권한을 얘기하는 것 같고, "일부 쓰기" 권한은 WMI 인스턴스의 속성에 대한 쓰기 권한을 의미하는 것 같다. 사실 필자도 정확한 테스트를 안 해봐서 잘 모르겠다. 테스트 하고 싶지도 않고... 나중에 필자가 WMI 권한에 관련되어 다시 분노 게이지가 상승하거나 똥줄 타게 바쁜 일이 생기면 모를까...

기본 설정을 살펴 보면... 관리자 계정은 모든 권한이 주어져 있으며, 관리자가 아닌 일반 계정은 Everyone 그룹에 포함되므로, 로컬 컴퓨터에 대해서는 WMI 개체의 속성을 읽거나 메쏘드를 호출하는 데는 문제가 없다. 하지만 원격에서의 액세스는 제한되어 있다. 관리자가 아닌 일반 사용자 계정을 사용하여 원격에서 WMI를 액세스하고자 한다면, 해당 계정에 대해 "원격으로부터 사용 가능" 권한을 허용해야 한다.

아무 생각 없이 Everyone에 이 권한을 주는 무뇌충 같은 짓은 하지 말기 바란다. Everyone은 말 그대로 모든 계정(익명 사용자 계정 제외)을 포함하므로 권한을 주는데 신중을 기해야 한다. 필자 같으면 별도의 그룹을 만들고(예를 들어 Remote WMI Access Users) 이 그룹에 대해 권한을 주겠다. 그리고 원격 WMI 액세스가 필요한 사용자들을 이 그룹에 포함시키는 방법을 사용할 것이다.

또 한가지 주의할 점은, 필요한 사용자에게 필요한 네임스페이스에 대해서만 권한을 주는 것이다. 앞서도 이야기 했지만, 권한은 상속되므로 Root 네임스페이스에 권한을 주게 되면 하위 모든 네임스페이스에 모두 권한을 주게 된다. 따라서, 가장 많이 사용되는 Win32_XXX 클래스들이 존재하는 root\CIMV2 네임스페이스 정도에만 권한을 주는 것이 좋다.

Episode IV: Conclusion

WMI는 자체의 WMI 클래스, 인스턴스 등에 대한 액세스 권한을 갖고 있으며, 이 액세스 권한은 WMI 네임스페이스 단위로 설정된다. WMI 네임스페이스에 포함된 클래스, 인스턴스 들은 모두 동일한 권한에 의해 지배 받게 된다. 기본적으로 관리자는 모든 권한을 갖고 있으며, 일반 사용자 계정은 로컬 컴퓨터에 대해서는 읽기, 메쏘드 호출 등의 권한을 갖지만, 원격 액세스는 제한되어 있다. WMI 보안 설정을 읽거나 수정하는 방법은 WMI 네임스페이스마다 존재하는 __SystemSecurity 클래스의 메쏘드를 사용하거나 WMI 컨트롤 을 사용하면 된다.

원격으로 WMI를 액세스 할 때는 WMI 보안 뿐만 아니라, WMI 원격 호출에 사용되는 DCOM 프로토콜의 보안 설정, 기타 DCOM 관련 설정, 그리고 DCOM의 하부 프로토콜로 사용되는 RPC 설정을 확인해야 한다. 클라이언트와 WMI 서버(WMI를 통해 액세스하고자 하는 컴퓨터) 사이에 방화벽이 존재하는 경우, RPC 호출에 문제가 발생할 수 있으므로 적절한 방화벽 설정과 RPC 포트 설정이 필요하며, DCOM 보안 설정 역시 살펴보아야 할 사항이다.

대개의 경우, WMI 서버의 관리자 계정을 사용하면 방화벽 문제를 제외하고 다른 문제는 발생하지 않는다. 관리자 계정은 DCOM 보안 설정과 WMI 보안 설정이 모두 적절하게 설정되어 있다. 하지만 관리자 계정이 아닌 일반 사용자 계정을 사용한다면, DCOM 보안 설정과 WMI 보안 설정을 모두 수행해 주어야 한다.



Comments (read-only)
#re: WMI 보안에 대하여... / 위시 / 2005-12-21 오후 2:25:00
좋은글 감사드립니다^_____________________________^
#re: WMI 보안에 대하여... / 블로그쥔장 / 2005-12-21 오후 2:40:00
읽어 주시는 것만으로도 제가 감사해야죠... ^^
#re: WMI 보안에 대하여... / 위시 / 2005-12-21 오후 3:08:00
글도 어쩜 그렇게 재미있게 잘쓰시나요 부럽습니다^^
#역쉬... ^^ / 정성태 / 2005-12-22 오전 9:28:00
WMI Namespace 권한은 정말 유익한 정보 같습니다. Naemspace 별로 권한을 관리한다니... MS 다운 생각같습니다.^^
#re: WMI 보안에 대하여... / 장현희 / 2005-12-23 오후 2:12:00
오늘도 좋은 글 잘 읽고 갑니다. 근데 언제 저런걸 다 하시나요? 전 게을러서 그런가 요즘 도통 아무런 글도 못쓰고 사는데
마냥 부럽게만 바라보고 갑니다. ^^
#re: WMI 보안에 대하여... / 정성균[차칸아이] / 2005-12-28 오후 5:41:00
잘 읽고 갑니다.
으여...머릿속에 넣어야 하는데.... 쉽지가 않네여..^^
#re: WMI 보안에 대하여... / 황승재 / 2006-03-08 오전 11:11:00
좋은 글 감사합니다.
#re: WMI 보안에 대하여... / 거부기 / 2006-08-08 오후 2:56:00
정말로 도움 많이 되었습니다.
감사합니다.
#re: WMI 보안에 대하여... / 헬마 / 2007-08-20 오전 10:21:00
이번에 회사에서 WMI 관련된 프로젝트를 하게되었는데 . 아무리해도 원격 연결이 되지 않는군요. 여기 올라온 WMI 관련 모든 글을 다 읽어보고, 모든 보안 설정을 다 했는데도 안됩니다. 심지어 양쪽 컴퓨터의 방화벽을 모두 끄고, 모두 양쪽 컴퓨터 Everyone 에 모든 권한을 줘도 접근 거부 (권한 없음) 오류가 뜨네요..
WMI 네임스페이스에도 모든 권환을 부여했습니다.

운영체제는 윈도 XP Sp2 구요. 양쪽 모두입니다.

무언가 다른 문제가 있나요?
#re: WMI 보안에 대하여... / 블로그쥔장 / 2007-08-20 오전 10:57:00
글쎄요... 일단 원격 컴퓨터에 로그온 할 수 있는 계정이 필요합니다.
두 컴퓨터가 AD로 묶여있지 않다면 두 컴퓨터에 동일한 암호를 갖는 계정을 만들어야 합니다.
만약 동일한 계정을 만들지 않으시려면 WMI 를 초기화할 때 원격 컴퓨터에 존재하는 아이디와 암호를
제공하셔야 합니다만... (리스트1 참조)
#re: WMI 보안에 대하여... / 헬마 / 2007-08-20 오전 11:21:00
원격컴퓨터에 WMI 라는 계정을 생성해서 WMI를 호출할 때 이 계정으로 호출하는데도 실패합니다 ㅠㅠ wbemtest 로도 계정명과 암호를 제공해봤는데 역시 실패하네요 ㅠㅠ

양쪽 컴퓨터의 모든 보안을 다 풀고 설정을 다 똑같이 해도 접근 거부가 뜨니 답답합니다 ㅠㅠ

wmidiag 라는 툴을 받아서 이걸 돌려봐도 특별한 보안이나 이런쪽 설정 오류는 뜨지 않습니다.
#re: WMI 보안에 대하여... / 개구리 / 2007-11-05 오후 1:44:00
관리자 계정으로 되는 것은 확인 했는데요. 설명대로 해도 일반 계정으로는 안되네요. 일반 계정으로 할 때 DCOM 보안 설정을 해야 한다는 것 같은데, 참조할 만한 자료(url 등) 추천해주세요. DCOM 보안 설정을 어디서 해야 하는지라도...
#re: WMI 보안에 대하여... / 블로그쥔장 / 2007-11-05 오후 4:26:00
DCOM 보안 설정상 Administrators 그룹에 속한 사용자가 아닌 사용자는 원격 컴퓨터에서
DCOM 호출을 거부하도록 되어 있습니다. 특정 사용자에 대해 권한을 주고자 한다면
원격 컴퓨터에서 dcomcnfg.exe 를 구동시키시고 구성요소 서비스 > 컴퓨터 > 내 컴퓨터 를 선택하고
속성으로 들어 갑니다. 대화 상자가 나타나면 COM 보안 탭에 가셔서 시작 및 활성화 권한의
"제한값 편집"에 사용자를 추가하고 모든 권한을 주십시요.
이렇게 하면 DCOM 호출이 허용됩니다.
DCOM 뿐만 아니라 방화벽이 문제를 유발할 수도 있으니 테스트에 주의 하세요.

도움이 되셨기를......
#re: WMI 보안에 대하여... / 개구리 / 2007-11-06 오전 11:54:00
계정의 소속 그룹을 관리자 그룹에 추가하면 되고, 빼면은 안되는 경우는 방화벽 문제가 없다고 봐야 하나요?
DCOM 설정을 했는데도 변함이 없네요. 좀 더 자료를 찾아봐야 할 듯....아무튼 빠른 답변 감사합니다.
혹시나 빠뜨린 설정이 있으면 알려주세요.
#re: WMI 보안에 대하여... / 블로그쥔장 / 2007-11-06 오후 3:50:00
기본적으로 WMI는 Everyone에 대해 권한을 허용하고 있습니다만
XP SP2 와 2003 SP1에 포함된 DCOM 보안 강화에 의해 관리자만이 DCOM 호출을
할 수 있도록 설정되어 있답니다. 이 보안 강화를 제어하는 것이 위에서 설명한
"제한값 편집" 입니다.

관리자 그룹에 포함하면 된다는 얘기는 방화벽을 일단 통과했다는 말이 됩니다.
(혹은 방화벽이 아예 존재하지 않거나... ^_^)

WMI에서 권한을 주실 때도 약간 주의해야 하는데, 권한을 추가하면
기본적으로 권한을 추가한 "WMI 네임스페이스"에만 권한이 설정되어 버립니다.
따라서 보안 대화 상자에서 "고급"버튼을 눌러 권한을 추가하고
"적용 대상"이 "이 네임스페이스와 하위 네임스페이스"가 되도록 설정해야 합니다.
말로만 설명하려니 어렵네요. 암튼 건투를 빕니다.... ^^
#re: WMI 보안에 대하여... / 레드맨 / 2007-11-13 오후 4:22:00
안녕하세요?
WMI에 관한 글을 찾고 있는 중에 좋은글을 보게되어 한가지 여쭙고자 글을 남깁니다.
하고자하는 작업은 로컬 서버에서 원격 서버들의 성능(cpu,ram,disk...)을 모니터링 하기 위함인데(vbscript로)
웹상에 올려진 샘플들은 모두 로컬 위주의 것들이 많습니다.
그래서 원격 서버의 WMI 접속하는 방법을 모르겠습니다.
GUI상에서(wmimgmt.msc나 wbemtest.exe)는 로컬에서 원격으로 사용자명과 암호를 주어 접근하면 되는데요.
vbscript상에서 어떻게 권한을 주는지, 알고 싶어서요. 도움을 주시면 고맙겠습니다.

참고:
1. 동일한 서브 네트워크에서 작업한다는 전제(나아가 도메인도 포함)
2. 각각의 서버마다 사용자명은 같아도 암호는 다름
3. rpc session은 (net use \\ipaddr\ipc$ /u:administrator password)로 모든 원격 서버에는 연결된 상태
4. windows 2000과 windows 2003 환경
5. 각각의 windows 서비스들은 (rpc, wmi...) default 상태
#re: WMI 보안에 대하여... / 블로그쥔장 / 2007-11-13 오후 7:39:00
웹에서 먼저 찾으려고 하지 마시고 MSDN을 먼저 찾은 다음에 구글신이나 다른 신들에게
물어보시는 것이 순서일듯 하네요.... ^^
다음 URL에 있는 ConnectServer 메쏘드와 예제 코드를 참조하십시요.
(vbscript 예제 입니다)
http://msdn2.microsoft.com/en-us/library/Aa393720.aspx

도움이 되셨기를...
#re: WMI 보안에 대하여... / 레드맨 / 2007-11-14 오전 10:04:00
옳으신 말씀입니다.^^
다시한번 해봐야 되겠습니다..
#re: WMI 보안에 대하여... / kral oyun / 2007-12-19 오전 3:55:00
WMI 네임스페이스에도 모든 권환을 부여했습니다
#re: WMI 보안에 대하여... / 이승우 / 2008-01-10 오후 8:54:00
저는 클라이언트에서 WBEMTEST 실행후 원격으로 \\xxx.gotdns.com\root\cimv2 관리자계정으로 접속시도하면
0x80070776 : 지정한 개체 내보내기를 찾을수 없습니다.
OR_INVALID_OXID The object exporter specified was not found

위의 오류가 발생합니다. 도움 부탁드립니다.
#re: WMI 보안에 대하여... / 고영석 / 2008-05-15 오후 6:07:00
원격 호스트에 접근할려고 하는데요; 자꾸 액서스 거부되었습니다 가 뜹니다.

우선 어드민 계정이구요...위에서 설명한데로 했는데도 불구하고 안됩니다.ㅠㅠ;

뭔가 또 해줘야 할 것이 있나요?

\\192.168.10.5\root\cimv2 <----로컬 호스트에서 wbemtest를 실행했습니다.
사용자 : ysko
암호 : temp

로컬호스트 아이피 : 192.168.10.12 입니다.
#re: WMI 보안에 대하여... / 블로그쥔장 / 2008-05-16 오후 12:10:00
고영석님\
WMI를 통해 원격 컴퓨터에 접근할 때 사용하는 계정은 목적 컴퓨터(이 경우 192.168.10.5 컴퓨터)에
존재하는 계정을 사용해야 합니다. 로컬 컴퓨터의 계정은 의미가 없습니다.
또 WMI는 DCOM을 사용하기 때문에 RPC 호출이 발생하고 이 RPC 호출은 방화벽에 의해 차단될 수도 있습니다.
DCOM 역시 보안이 적용되기 때문에 DCOM 보안을 통과할 수 있는지 확인하셔야 합니다.
사용하신 ysko 계정이 192.168.10.5 의 관리자 계정이라면 DCOM 보안은 통과가 되실 겁니다.
하지만 192.168.10.5 컴퓨터의 운영체제가 Vista 라면 UAC에 의해 관리자 권한이 박탈되므로
권한 없음 오류가 나타날 수도 있습니다.
DCOM 보안까지 통과가 된 후에라야 WMI 보안 검사가 수행됩니다.
복잡하지요? -_-;
이러한 사항들을 하나씩 차근차근 검토해 보셔야만 액세스 거부 문제를 해결하실 수 있을 겁니다.

도움이 되셨기를...
#re: WMI 보안에 대하여... / 원격으로 서비스 실행 / 2008-10-23 오후 11:58:00
codeproject에서 WMI관련 해서 검색해서 원격 으로 서비스 목록을 가져 왔습니다.
그런후 StartService 를 호출해 실행 하려는 액세스 권한 이 없다는 메세지가 뜹니다.
원격 접속을 administrators그룹으로 연결 했는데. 정보를 가져 오는것은 되는데. 메소드
실행은 안되네요 어떻게 해야죠?
#re: WMI 보안에 대하여... / 블로그쥔장 / 2008-10-27 오전 10:47:00
어떻게 해야하는지는 저도 모릅니다...... -_-;
테스트를 수행하신 환경에 따라 다르고 컴퓨터 설정마다 다르기 때문이지요.
예를 들어, 클라이언트 컴퓨터에서 Administrators 그룹내에 포함된 계정이라도
서비스 측에서는 그렇지 않을 수도 있기 때문에 권한 오류가 발생할 수도 있습니다.
혹은 그 외의 문제일 수도 있기 때문입니다.
먼저 서버측의 로컬 컴퓨터에서 WMI 코드를 구동하여 서비스가 수행되는지
확인해 보십시요. 그리고 정확하게 같은 계정을 사용하여 클라이언트 컴퓨터에서
프로그램을 구동해 보시기 바랍니다.

제가 슈퍼맨이나 천리안을 가진 사람이 아니기 때문에 정확하게 무엇이 문제이다란 것을
단박에 답변드리지 못함을 이해해 주시기 바랍니다.

죄송합니다......
#re: WMI 보안에 대하여... / 컴돌이 / 2009-10-08 오전 10:59:00
좋은글 감사합니다.
항상 욜심 하시는 모습에 오늘도 감동 먹고 갑니다.