Microsoft MVP성태의 닷넷 이야기
Windows: 16. 개발자를 위한 UAC 환경 설정 [링크 복사], [링크+제목 복사],
조회: 31047
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
(연관된 글이 1개 있습니다.)
(시리즈 글이 8개 있습니다.)
Windows: 14. 보호 모드와 필수 무결성 제어(MIC: Mandatory Integrity Control)
; https://www.sysnet.pe.kr/2/0/433

Windows: 15. MIC 환경 구성 - Windows XP와 유사한 보안 설정
; https://www.sysnet.pe.kr/2/0/434

Windows: 16. 개발자를 위한 UAC 환경 설정
; https://www.sysnet.pe.kr/2/0/437

Windows: 17. 보안 데스크톱에서 활성화되지 않은 UAC 창이 안전할까?
; https://www.sysnet.pe.kr/2/0/441

Windows: 20. UAC 이모저모
; https://www.sysnet.pe.kr/2/0/449

Windows: 22. 가상화에 대해서.
; https://www.sysnet.pe.kr/2/0/456

.NET Framework: 297. 특정 EXE 파일의 실행을 Internet Explorer처럼 "Protected Mode"로 실행하는 방법
; https://www.sysnet.pe.kr/2/0/1225

개발 환경 구성: 571. UAC - 관리자 권한 없이 UIPI 제약을 없애는 방법
; https://www.sysnet.pe.kr/2/0/12633





개발자를 위한 UAC 환경 설정


이미 2차례에 걸쳐서, 다음과 같은 글로 UAC 관련 설명을 했습니다.

보호 모드와 필수 무결성 제어(MIC: Mandatory Integrity Control)
; https://www.sysnet.pe.kr/2/0/433

MIC 환경 구성 - Windows XP와 유사한 보안 설정
; https://www.sysnet.pe.kr/2/0/434

처음, 윈도우즈 비스타를 사용했을 때는, 개발자 환경이 워낙 관리 권한을 많이 건드리기 때문에 당연히 UAC를 해제해야만 한다고 생각했었습니다. 하지만, 조금씩 비스타에 익숙해지면서... UAC 창이 그다지 많이 뜨는 것은 아님을 알게 되었습니다. 여러분들도 한번 잠시 UAC 확인창에 대해서 생각해 보십시오. 정말로 그렇게 자주 뜨던가요?

솔직히, 응용 프로그램보다는 오히려 인터넷 웹 사이트에서 더욱 UAC 확인창을 요구하더군요. 아니 좀 더 정확히 말하면 UAC 확인창을 요구한다기보다는 애당초 관리자 권한으로 인터넷 익스플로러를 실행시켜야 하지요. ^^;

그건 그렇다 치고... 어쨌든 기존 환경에 비하면 단 한 번일지라도 UAC 확인창을 거쳐야 하는 것이 불편하지 않을리 없습니다. 따라서, 어떻게 해서든지 ^^ 조금이라도 편해질 수 있는 환경 설정을 하는 것이 좋을 텐데요.

나름대로 생각해 보면, 자신의 환경에 따라서 다음과 같은 4가지 구성 중에서 선택하는 것이 가능할 것 같습니다.



1. 기본 환경이 관리 모드여야 하는 개발자라면?
간단하지요. ^^; UAC를 해제하면 됩니다. "msconfig.exe"를 실행시키고, "Tools" 탭에 있는 "Disable UAC"를 실행시켜 준 후 재부팅을 하게 되면 UAC가 해제되고 기본적으로 모든 프로세스들의 "integrity SID" 값이 "high"로 설정되어 실행됩니다. 무조건 high 모드에서 개발하는 업종(예를 들면, 커널 개발 같은)이 아니라면 별로 권하고 싶지 않은 설정입니다.

2. 비록 빈번한 관리자 환경이 요구되기는 하지만 전체적인 MIC 환경은 유지하고 싶은 경우라면?
초기에 제가 즐겨 사용했던 구성입니다. 재부팅이 필요하지 않은데다 UAC 확인창이 뜨지 않고도 자동으로 관리 권한 요청이 발생하면 승격이 됩니다. (따라서, 인터넷 익스플로러 같은 경우에 명시적으로 "Run as administrator"로 실행시켜 주지 않으면 포탈 사이트의 ActiveX들이 정상적으로 동작하지 않았습니다.)

이러한 구성은 "로컬 보안 정책(local security policy)"에서 해줄 수 있습니다. "시작 메뉴"의 명령어 입력창(사실, 이제는 "검색"과 관련되어 있지만.)에서 "로컬 보안 정책"이라고 입력해 주시면 됩니다. 그럼, 다음과 같은 로컬 보안 정책 관리자 콘솔이 뜨게 되는데, "보안 설정" / "로컬 정책" / "보안 옵션"으로 이동해서 "사용자 계정 컨트롤: 관리자 계정일 때 관리 승인 모드에서 권한 상승 확인 방법" 값을 "권한 상승 전에 확인 안 함"으로 설정하는 것입니다.

uac_settings_for_dev_1.png

위와 같이 설정하게 된 이후에는, UAC 확인창이 뜨질 않습니다. 왜냐하면 자동으로 "확인"한 것으로 간주하기 때문입니다. 물론 승격 요청 이전에는 각 프로세스들의 "integrity SID" 값도 그대로 유지된 체 시스템이 운영됩니다. 재부팅도 필요하지 않기 때문에 무척 편리한 설정입니다. 사실, "권한 승격 요청"은 악성 코드에 상관없이 모두 할 수 있기 때문에 이 모드가 "안전"하다고 볼 수는 없습니다.

3. 특정 프로그램만이 관리 권한이 요구되는 환경이라면?
예를 들어, VS.NET 2005로 웹 사이트를 IIS와 연동하여 개발하는 경우라면, IIS의 메타베이스 정보를 접근하게 되어 관리자 권한이 필요하게 됩니다. 따라서, 이런 분들은 거의 매일 VS.NET 2005를 관리자 권한으로 실행하게 될 텐데요. 그때마다 매번 "관리자 권한으로 실행(Run as administrator)"으로 실행시키기가 꽤나 번거로울 테니, VS.NET 2005 아이콘을 오른쪽 마우스 버튼으로 눌러서 나오는 속성창에서 "관리자 권한으로 이 프로그램 실행(Run this program as an administrator)"을 설정해 두시는 것이 편리하겠습니다.

uac_settings_for_dev_2.png

즉,,, 이제부터는 UAC는 받아들이되 어떻게해서든지 번거로운 과정을 하나라도 줄이는 노력을 해야 하겠지요. ^^

4. 일반 응용 프로그램 개발자라면?
문제는 ^^ 이런 분들입니다. 방법이 없단 얘기입니다. 그냥 일반 사용자와 동등하게 UAC를 받아들이셔야 합니다. 위의 '3번'에서 살펴본 "관리자 권한으로 실행(Run as administrator)"조차도 이 분들은 대상이 될 수 없습니다. 왜냐고요?

일단, VS.NET 2005 프로세스가 관리 권한으로 승격된 이후에는, 그 자식으로 실행되는 프로세스들 역시 "high" 권한으로 실행되어 집니다. 아래의 화면은 VS.NET 2005에서 "WindowsApplication1" 프로젝트를 만든 후, "Ctrl + F5" 키를 눌러 실행시켰을 때의 프로세스 구조입니다. "WindowsApplication1.vshost.exe"는 물론이고 "WindowsApplication1.exe" 역시 "devenv.exe"의 자식 프로세스로 실행되기 때문에 "high" 권한을 그대로 물려받아 실행되게 됩니다. UAC 환경 테스트가 제대로 될 수 없겠지요!

uac_settings_for_dev_3.png



그럼, 저는 어떻게 해두고 쓰냐는 질문을 하실 분이 계실 텐데요. 저는 위의 "4번" 선택의 변형으로 해두고 있습니다. 기본적으로는 4번 단계인데, 거기에 "로컬 보안 정책"에서 "보안 설정" / "로컬 정책" / "보안 옵션"의 "사용자 계정 컨트롤: 권한 상승시 보안 데스크톱으로 전환" 값을 아래와 같이 "사용 안함"으로 두고 있습니다.

uac_settings_for_dev_4.png

데스크톱 보안을 사용하지 않게 되므로, UAC 확인창을 제어하려고 들면 보안이 뚫리게 되는 단점이 있지만 저처럼 ^^ 컴퓨터를 표준으로 사용하는 사람이라면 별다른 위험이 없을 것으로 "스스로" 판단하고 있기 때문에 이 정도로만 해두고 있습니다. 적어도 UAC 제어를 받는 프로그램의 개발에도 영향을 주지 않고 데스크톱 전환으로 인한 부하가 없기 때문에 개인적으로는 이 정도 선택이 가장 최선인 것 같습니다.

혹시... 여러분들 중에서 "나는 위에서 설명한 방법과는 다르게 구성했다."라는 분들이 계시다면 공개 좀 부탁드리겠습니다. ^^

마지막으로 하고 싶은 말.

"개발자일수록 UAC를 Enable 상태로 둬야 한다"





[이 토픽에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 2/11/2023]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 



2007-01-15 03시01분
[WaterStone] 저는 완전히 UAC 기본 값으로 사용하고 있습니다.
문제가 무엇인가 알아야 대처가 가능하기 땀시...
가끔 WCF 프로그래밍이나 기타 관리자 권한이 필요한 경우에는 VS 2005를 관리자 권한으로 구동시키곤
합니다만...

참... 보안 데스크톱을 사용하지 않을 때의 장점이 있나요?
보안 상승 확인이 좀 더 빨리 뜬다든가 등등...
[guest]
2007-01-15 03시18분
예. 보안 상승 확인창이 빨리 뜹니다. 그나마 ^^; 0.1초의 생산성을 올리기 위해 택할 수 있었던 유일한 방법이었습니다.

보안 데스크톱 전환에 대해 설명한 글을 읽어보면 재미있는 사실을 발견할 수 있는데요. ^^ 원래 데스크톱 단위 사이에서는 화면 공유가 안되잖아요? 그런데, UAC 확인창이 뜰 때 배경에 기존 화면이 남아있을 수 있게 전체 화면을 캡쳐해서 이미지 처리한다고 합니다. 사실 많이 빨라서 덜 느낀다고는 해도,,, 어쨌든, 화면이 깜박이는 것 자체가 별로니까요.

조금은 편리할 수 있다고 해도, 다음의 글에서도 밝히듯이 그다지 권장하지 않는다고 합니다. ^^

User Account Control Prompts on the Secure Desktop
; https://learn.microsoft.com/en-us/archive/blogs/uac/user-account-control-prompts-on-the-secure-desktop
kevin25
2011-05-18 08시32분
[guest] "Computer Configuration" / "Windows Settings" / "Security Settings" / "Local Policies" / "Security Options"
- User Account Control: Switch to the secure desktop when prompting for elevation
[guest]

... 91  [92]  93  94  95  96  97  98  99  100  101  102  103  104  105  ...
NoWriterDateCnt.TitleFile(s)
11635정성태8/1/201818779오류 유형: 472. C# 컴파일 오류 - Your project is not referencing the ".NETFramework,Version=v3.5" framework.
11634정성태8/1/201821719.NET Framework: 790. .NET Thread 상태가 Cooperative일 때 GC hang 현상 재현 방법파일 다운로드1
11633정성태7/29/201825680Graphics: 15. Unity - shader의 World matrix(unity_ObjectToWorld)를 수작업으로 구성 [2]파일 다운로드1
11632정성태7/28/201827982Graphics: 14. C# - Unity에서 캐릭터가 바라보는 방향을 기준으로 카메라의 위치 이동 및 회전하는 방법
11631정성태7/27/201829934Graphics: 13. Unity로 실습하는 Shader (9) - 투명 배경이 있는 텍스처 입히기 [1]
11630정성태7/27/201825067개발 환경 구성: 391. (GitHub 등과 직접 연동해) 소스 코드 디버깅을 쉽게 해 주는 SourceLink [3]
11629정성태7/26/201823866.NET Framework: 789. C# 컴파일 옵션 - Check for arithmetic overflow/underflow [2]
11628정성태7/25/201825686Graphics: 12. Unity로 실습하는 Shader (8) - 다중 패스(Multi-Pass Shader)
11627정성태7/25/201820101개발 환경 구성: 390. C# - 컴파일러 옵션 OSS signing / Public Signing
11626정성태7/25/201818455오류 유형: 471. .C++ 함수를 const로 바꾼 경우 C2440 컴파일 오류가 발생한다면?
11625정성태7/24/201817696Math: 49. GeoGebra 기하 (25) - 타원의 중심점 찾기파일 다운로드1
11624정성태7/24/201822138개발 환경 구성: 389. C# - 재현 가능한 빌드(reproducible builds) == Deterministic builds [4]
11623정성태7/24/201821515Math: 48. C# - 가우시안 함수의 이산형(discrete) 커널 값 생성파일 다운로드1
11622정성태7/23/201821639개발 환경 구성: 388. Windows 환경에서 Octave 패키지 설치하는 방법
11621정성태7/23/201819243VC++: 127. 멤버 함수에 대한 포인터를 외부에서 호출하는 방법파일 다운로드1
11620정성태7/22/201822510Graphics: 11. Unity로 실습하는 Shader (7) - Blur (평균값, 가우스, 중간값) 필터 [1]파일 다운로드1
11619정성태7/21/201821564Graphics: 10. Unity로 실습하는 Shader (6) - Mosaic Shading
11618정성태7/20/201818658개발 환경 구성: 387. 삼성 오디세이(Odyssey) 노트북의 운영체제를 새로 설치하는 방법
11617정성태7/20/201819407Team Foundation Server: 50. TFS 소스 코드 관리 기능 (5) - "Rollback", "Rollback Entire Changeset"
11616정성태7/17/201818777Graphics: 9. Unity Shader - 전역 변수의 초기화
11615정성태7/17/201823124.NET Framework: 788. RawInput을 이용한 키보드/마우스 입력 모니터링파일 다운로드1
11614정성태7/17/201825407Graphics: 8. Unity Shader - Texture의 UV 좌표에 대응하는 Pixel 좌표
11613정성태7/16/201821672Graphics: 7. Unity로 실습하는 Shader (5) - Flat Shading
11612정성태7/16/201820623Windows: 148. Windows - Raw Input의 Top level collection 의미
11611정성태7/15/201820845Graphics: 6. Unity로 실습하는 Shader (4) - 퐁 셰이딩(phong shading)
11610정성태7/15/201817399Graphics: 5. Unity로 실습하는 Shader (3) - 고로 셰이딩(gouraud shading) + 퐁 모델(Phong model) + Texture
... 91  [92]  93  94  95  96  97  98  99  100  101  102  103  104  105  ...