본문 바로가기

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

[연재 01] An Overview Of UAC

UAC는 다시 한번 더 체계적으로 정리할 필요가 있을 것 같다. 뭐든지 튼튼한 기본이 중요한 법인데, UAC는 프로그래밍시 기본적으로 이해하고 있어야 하는 새로운 컨셉일 것이라는 생각에서이다. 해서 체험기부터 해서 다시 나름대로 신경써서 함 정리해보려 한다.

UAC라는 것은 머신을 제외한 모든 사람들은 싫어할 것 같은 특징중의 하나인 것 같다. 사용자도 그렇고 개발자도 그렇고 그리고 관리자도 그렇게 좋아할 것 같지는 않다. 처음에 달봉이도 상당히 당혹스러웠다. 그러나 한편으로는 개발자로서의 호기심이 발동하기도 했다. 이번 연재에서는 체험기에서부터 다시 시작해서 나름대로 UAC에 대한 필요성을 알아보고 그리고 구체적으로 개발시 어떻게 해결해야 하는지를 알아보겠다.

■ UAC 시작하기

Vista를 설치하는 것부터가 쉬운일이 아니였다. Vista 베타시절, 달봉이 집에 있는 PC중에 두 대에 일단 Vista 설치를 시도했다. 몇번을 시도했는데도 실패하고 그때는 결국 설치를 못하고 지나갔다. 그러다가 정식 버전이 릴리스되면서 다시 시도했다. 실패했다. 나중에 알고 보니 PC 사양이 부족했던 것이다. 결국 집에 있는 PC는 포기하고 좀 사양이 괜찮은 달봉이의 작업용 노트북에 Virtual PC 2007 를 설치해서 그곳에 Vista를 설치했다.

처음 Vista를 시작할때, Vista는 달봉이에게 계정을 하나 만들것을 요청한다. 새롭게 넣은 계정은 기본적으로 로컬의 Administrators그룹의 멤버로 등록이 된다. 문제는 새롭게 등록한 관리자 계정으로 로그온을 해도 관리자가 아니라는 것이다. 관리자가 아님으로 해서 발생하는 예외 상황( Vista 이전의 사고로는 분명 돌발상황이다)을 함 만들어보자.

방금 새롭게 생성한 관리자 계정으로 로그온 한 후 "시작->실행..."을 선택한다. ( 근데, 이 실행...항목이 Vista에서는 보이지 않는다. -_-;;  이 항목을 보이는 팁은 뒤에서 설명하겠다.)  우선 "실행..." 대신에 "검색 시작"항목에 cmd.exe를 입력한다.

1231668901

[그림] 검색시작 항목

그런 다음 다음 명령을 실행시킨다.

net users inguen dragon /add

users 그룹에 "inguen"계정을 패스워드 "dragon"으로 생성하겠다는 내용이다. 이 명령을 실행시키면 그림과 같은 에러가 발생한다.

1039078505

[그림] 사용자추가하기

액세스가 거부되었다는 것이다. 이전 버전의 Windows에서의 개념으로는 이해가 가지 않은 결과이다. 관리자가 못하는 일이 뭐가 있단 말인가. GUI 방식으로 사용자 계정을 추가해보자.  "시작->제어판"을 선택하면 사용자 계정을 추가/제거할 수 있는 메뉴를 볼 수가 있다.

1152283655

[그림] 제어판-사용자 계정 추가/제거

"사용자 계정 추가 또는 제거" 옆에 방패 아이콘이 있는 것이 수상하기는 하지만, 하여튼 메뉴를 클릭해보자. 창이 하나 뜨면서 주변은 어두워진다. 창외의 다른 곳은 선택할 수도 없게 된다. 그 내용을 보면 권한이 필요하다면서 작업을 진행하려면 [계속]을 클릭하라는 것이다.

1030409665

[그림] 관리자 승인 요청 창

관리자 계정으로 로그온했음에도 이 방법도 역시나 권한이 필요하단다. 그러나 커맨드 프롬프트와는 다르게 "계속"을 클릭하면 사용자 계정을 추가할 수는 있다.

두 경우가 말해주는 것은 "관리자로 로그온했지만 cmd.exe는 관리자 토큰(이것이 뭔지는 바로 뒤에서 설명한다)으로 실행되지 않고 있다"는 것이다. 뒤에 설명하겠지만 Administrators그룹에 속한 관리자 계정으로 로그온 하더라도 Vista에서는 관리자 토큰 대신에 일반 사용자 토큰을 사용하게 된다. 그러다가 관리자 계정을 필요로하는 프로그램을 실행시키면 그제서야 관리자 계정을 사용한다. 그냥 아무말 없이 사용하는 것이 아니라 Vista에서는 사용자의 허락을 득한 후에 사용하도록 하고 있다. 즉 앞의 그림과 같은 창은 사용자의 동의를 얻는 창이다. 일종의 "Are you sure?"라는 표현이다. 해서 그림과 같은 프롬프트창을 "동의 확인(consent user interface, Consent UI)창이라고 한다. 관리자 계정으로 로그온한 사용자가 동의를 하면 그제서야 프로그램을 시작한다.

여기서 중요한 포인트 한가지!

그럼 커맨드 프롬프트창에서 커맨드 라인으로 작업을 했을때는 "액세스가 거부"되었다는 메세지만 출력하고 왜 이런 동의 확인 창이 뜨지 않았을까? Vista가 사용자의 동의를 구하는 것은 프로그램이 시작되기 전이라는 것이다. 일단 프로그램이 시작되고 나면 사용되고 있는 계정의 권한을 변경할 수 없다. 일반 사용자 계정으로 시작했는데 나중에 관리자 권한을 필요로 하는 작업을 요청하면 에러가 나는 것이다.

■ 관리자 권한으로 명령 프롬프트창 시작하기

그럼 명령 프롬프트창은 관리자 모드로 시작할 수 없는 것일까?  뒤에서 프로그램을 관리자 권한으로 실행시키는 일반적인 방법에 대해서 정리가 있을 것이다. 그러나 우선 명령 프롬롬프트 창을 관리자 권한으로 실행시키는 방법에 대해서만 알아본다.

"실행..."을 이용해서는 명령 프롬프트창을 관리자 권한으로 실행시킬 수는 없다. 대신에 GUI 메뉴를 이용하면 가능하다. GUI 방식으로 실행시키려면 다음 순서를 따른다.

시작->모든 프로그램->보조 프로그램->명령 프롬프트 선택

1224734755

[그림] GUI로 명령 프롬프트 시작

명령 프롬프트 메뉴를 오른쪽 클릭하면 그림처럼 "관리자 권한으로 실행"이라는 컨텍스트 메뉴가 나타난다. 그 컨텍스트 메뉴를 선택하면 관리자 권한으로 실행되는 명령 프롬프트창을 이용할 수 있다.

■ "실행..."  항목 보이기

개인적으로 달봉이는 "실행..." 항목을 자주 쓰는 편이다. 이것이 안보니까 왠지 불편한 것 같다. 이전의 Windows에서처럼 Vista에서도 이전 형식의 시작 메뉴를 사용할 수 있도록 한다. "시작->오른쪽 클릭->속성"을 선택하면 그림과 같은 창이 뜬다.

1210119251

[그림] 이전 시작 메뉴 선택

단순히 그림에서 "이전 시작 메뉴"를 선택하면 된다. 그러나 Vista의 시작 메뉴를 그대로 두고 "실행" 항목이나 시스템 관리 도구등 몇개만 보이게 하고 싶은 경우도 있을 것이다. 그런 경우는 "시작 메뉴"를 선택하고 "사용자 지정..." 버튼을 클릭한다.

1405662841

[그림] 시작 메뉴 사용자 지정

창에서 "실행" 항목의 체크 박스를 선택하고 그리고 "시스템 관리 도구"에서 "모든 프로그램 메뉴 및 시작 메뉴에 표시"를 선택한다. 그런 다음 확인을 하고 속성창을 닫으면 결과는 다음 그림과 같다.

1088693019

[그림] 사용자 지정 결과


■  체험기 소감

UAC의 기본 컨셉은 간단하다 : 관리자 권한을 필요로 하는 작업을 하려고 할때마다 동의 확인창(Consent UI)을 띄워 관리자 권한으로 어떤 작업을 하려고 한다는 것을 확실히 알 수 있도록 해 준다는 것이다. 그러나 앞에서 본 것처럼 매번 이런 확인을 받는다는 것은 귀찮고 번거로운 일이다. 이런 첫인상은 달봉이만 그런 것은 아닐 것이다. 그럼 이런 메커니즘에는 어떤 이점이 있을까? 훌륭한 테크니컬한 이유는 없다. 추측할 수 있듯이 "보안"때문이다. 보안때문이라고는 하지만 어떻게 생각해보면 내 PC를 사용하는데 남의 허락을 얻어야 하는 듯한 기분이기도 하다. 또 어떻게 생각해보면 마이크로소프트가 보안에 대한 평판을 업그레이드하겠다는 정책에 사용자가 희생된 기분이기도 하다.

그럼에도 불구하고 UAC를 좋아하게 될 것 같다. UAC가 주는 이점을 이해하기 위해서 사용자를 두 부류로 나눠보자. 자신이 무엇을 하고 있는지를 정확히 알고 있는 베테랑 관리자와 아직 기술적으로 미숙한 사용자가 Vista를 사용한다고 해 보자. 아직 미숙한 사용자에게 UAC는 "깨어나라"라는 메세지를 전달하는 효과를 줄 수 있을 것이다. 사용자는 자신이 뭔가 시스템적으로 중요한 작업을 하려고 한다는 것을 깨닫고 한번 더 집중하게 될 것이고 되도록이면 취소를 선택해서 원하지 않은 스파이웨어의 설치를 막을 수 있을 것이다. 괜찮은 효과이다.

아주 능숙한 관리자인 경우는 어떤가? UAC가 쓸모없을까? 시스템 관리자들이라면 관리자 계정으로 로그온해서 작업하지 말라는 말을 들어봤을 것이다. 그러나 이전 Windows에서 일반 사용자 계정으로 로그온하면 얼마나 많은 제약 사항이 있는 지도 알 것이다. 권한 제약에 걸리는 순간마다 로그오프해서 다시 관리자 계정으로 로그온해서 작업을 하고 다시 사용자 계정으로 변경하고...-_-;; 아마 이렇게 작업하는 관리자는 아무도 없을 것이다. 있으려나....;;. Vista에서는 그러나 일반적인 상황에서는 사용자 계정으로 작업을 하다 관리자 권한이 필요한 경우는 "Are you sure?"에 동의만 하고도 관리자 계정으로 작업을 할 수 있다. 그리고 매일 반복되는 작업으로 인해 매너리즘에 빠져 아무 생각없이 작업하다가 실수할 일도 줄어들게 될 것이다.

어떤 이에 의하면 이제는 Windows의 문화를 바꿀 필요가 있다는 것이다. 문화나 습관을 바꾼다는 것은 쉬운 일은 아니지만 그렇다고 불가능한 것은 아닐 것이다. 유닉스쪽에서는 이미 오래 전에 이 같은 경험을 거쳤다고 한다. 처음에 루트 권한(관리자 권한)에 익숙했던 사용자들은 점차 일반 사용자 계정으로 로그온하려고 노력했다. 그러나 일반 사용자 계정으로는 실행되지 않은 유닉스 프로그램이 있었고 그래서 이번에는 유닉스 개발자들은 사용자 계정으로로 실행될 수 있는 애플리케이션을 작성할 수 있는 방법을 배워나갔다고 한다. 오늘날 유닉스나 리룩스를 사용하는 사람들은 루트 대신에 일반 사용자 계정을 사용하는데 익숙해졌고 프로그램들도 훌륭히 작동한다고 한다. 이제 Windows도 같은 변화를 경험하게 될 것이다. 그러나 그것은 가치가 있는 일이다.

다음 포스트에서부터는 좀더 UAC의 기술적인 얘기를 해 보겠다. 개발자라면 충분히 그 내부의 모습을 이해하고 있을 필요가 있을 것이다.