Creative Commons License

Microsoft .NET

닷넷!시작하기
닷넷! Ver 2.0~
닷넷!스킬업
웹개발
윈폼개발
실용모듈개발
Tip & Tech
하루 한 문법

Microsoft .NET 개발자들을 위한 공간입니다. 기초강의에서 부터 고급 기술 정보 및 팁등을 다루도록 하겠습니다.

.

웹개발

이제 웹 기반 응용개발 지식은 거의 필수적으로 요구되는 시대입니다. 구체적인 웹 사이트 개발은 아니더라도 거시적인 웹 기반 서비스에 대한 지식 배양을 위해 할 것이 참 많네요 ^^

IUSER_컴퓨터이름 VS NETWORK_SERVICE

작성자 : 박종명
최초 작성일 : 2009-09-01 (화요일)
최종 수정일 : 2009-09-01 (화요일)
조회 수 : 5185

문제>>

‘IUSER_컴퓨터이름계정과 , NETWORK_SERVICE 계정의 차이점에 대해 말하시오

(IIS 6.0 기준)

 

ASP.NET 개발자인 당신에게 이런 질문이 던져졌다면 어떻게 답을 하시겠습니까?

 

..  문제가 좀 쉽나요?

대체로 이런 답을 할 것으로 예상됩니다

 

‘IUSER_컴퓨터이름은 웹 서버의 자원을 요청할 때 기본적으로 사용하는 익명 인터넷 계정이며

NETWORK SERVICE ASP.NET 파일을 실행하는 계정입니다라고 말이죠

 

. 맞습니다.

 

그러면 질문을 다르게 해 보죠

문제 1>>

IIS 보안 설정은 다음과 같이 기본값 그대로이다



웹 서버에 Test.aspx 라는 파일이 있고 이 파일에는 NETWORK SERVICE 계정만 권한(읽기,실행)가지도록 하였다.
IUSR_컴퓨터이름 계정은 이 파일에 대한 아무런 권한이 없다.

이럴 경우 익명 사용자가 Test.aspx 파일에 대한 접근이 가능한가?

 

그리고 반대로 IUSR_컴퓨터이름 계정만 (적절한) 권한을 가지고 있다면 파일 접근이 가능한가?

 

그리고 또 다른 문제를 내보겠습니다

문제 2>>

Web.Config 파일에 <identity impersonate="true" /> 일 때와 <identity impersonate="false" />

일 때 위 문제 상황은 어떻게 달라 지는가?

 

문제 3>>

Web.Config 파일에 <authentication mode="Forms" /> 일 때와 <authentication mode="Windows" /> 일 때
위 문제 상황은 어떻게 달라지는가?

 

 

위 문제들에 시원스레 답을 할 수 있는 사람은 ASP.NET 보안(권한) 메커니즘에 대해 공부를 열심히 한 사람입니다.

 

문제에 핵심이 다 들어가 있습니다.

ASP.NET 리소스의 실행에 대한 인증 및 권한 메커니즘은 아래와 같은 요소들과 상호 연관관계있습니다.

1) Windows 보안 메커니즘

2) Impersonate(가장)

3) Authentication Mode (인증 방식)

 

위 문제들에 대한 답을 해 볼까요……

문제 1에 대한 답>>

NETWORK SERVICE 계정이나 IUSR_컴퓨터이름 두 계정 중 하나의 계정이라도 권한이 없다면 아래와 같은

HTTP 오류 코드가 반환된다. (모든 설정이 기본값이라 가정한다)

모두 IIS의 파일 접근 권한 체크에서 권한 오류가 발생하게 된다

 

문제 2에 대한 답>>

가장(impersonate) 을 했을 경우와 하지 않았을 경우의 차이점이다

가장이란 ASP.NET 의 실행 계정을 임의의 계정으로 가장(흉내내기)할 수 있는 옵션이다

(자세한 내용은 impersonate 와 관련된 글 참조 바람)

 

<identity impersonate="true" />로 특정 ID 지정 없이 가장을 활성화(true)하게 되면

ASP.NET 실행 프로세스의 요청 쓰레드 계정이 NETWORK SERVICE 가 아닌 IUSR_컴퓨터이름 계정이 된다.

 

가장을 하지 않는 설정이 <identity impersonate="false" />이 기본 값이기 때문에 문제 1 상황은 위와 같다.

 

그렇다면 다면 가장을 했을 경우 문제 1 상황이 어떻게 달라지는 살펴 보자

 

1) <identity impersonate="true" /> 설정, NETWORK SERVICE 계정만 권한 있음
IUSR_컴퓨터이름 계정이 이 리소스에 접근할 수 없기 때문에 같은 결과가 발생한다

 

2) <identity impersonate="true" /> 설정, IUSR_컴퓨터이름 계정만 권한 있음

IUSR_컴퓨터이름 계정에 권한이 있기 때문에 기본적인 윈도우 보안은 통과하였으나 ASP.NET 리소스 실행에서
예외가 발생하게 된다. NETWORK SERVICE 계정에 권한이 없기 때문이다

이 결과는 앞서 403.1 HTTP 오류 반환과는 다르다.

ASP.NET 리소스의 처리 중 .NET 보안 예외가 발생한 것이다

 

문제 3에 대한 답>>

이 글의 중요한 부분이 되겠다

ASP.NET 인증 방식 중 윈도우 인증을 했을 때와 폼 인증을 했을 때 차이점이다

 

윈도우 인증 <authentication mode="Windows" /> 이 기본 값이기 때문에 문제 1 상황은 위와 같다.
그렇다면 폼 인증일 경우 문제 1 상황이 어떻게 달라지는 살펴 보자

 

1) <authentication mode="Forms" /> 설정, NETWORK SERVICE 계정만 권한 있음

결과: 정상 실행됨
윈도우 인증일 때에는 403.1 HTTP 오류가 반환되었는데 폼 인증으로 하니깐 정상실행이 된다.

이렇게 되는 이유는,

윈도우 인증으로 설정할 경우 IIS의 파일 접근 권한 메커니즘이 ASP.NET 에도 그대로 적용되기 때문이다.
즉 익명 계정이 파일에 접근할 수 없기 때문에 IIS 에서 HTTP 오류를 반환하는 것이다

반면에 폼 인증으로 설정하면 IIS 기본 파일 접근 권한 체크를 하지 않고 바로 ASP.NET 실행 프로세스로 넘긴다.
따라서 정상 실행이 되는 것이다

 

 

1) <authentication mode="Forms" /> 설정, IUSR_컴퓨터이름 계정만 권한 있음
여전히 IIS 권한 체크는 없이 넘어왔지만 ASP.NET 프로세스 실행 계정인 NETWORK SERVICE 계정에 대한 권한이
없기 때문에 예외가 발생하게 된다

간략하게 몇 가지 사례를 살펴 보았습니다.

말 그대로 몇 가지 사례일 뿐입니다.

 

ASP.NET 인증 및 권한 이해에 있어 IIS Windows 의 인증 및 권한 체계를 간과할 수 없으며 더 원리 기반적인 학습을 반드시 해야 합니다.

 

참고로 간혹 이런 분 있습니다

? 저는 NETWORK SERIVCE 계정도 IUSR_컴퓨터이름 계정 모두 없는데 실행이 잘 되는데요?

 

아마 위 두 계정이 없어도 잘 실행되는 경우라면 Users 그룹이나 Everyone 그룹에 권한이 부여되어 있을 것입니다. NETWORK SERVICE 계정이나 IUSR_컴퓨터이름 계정 모두 Users 그룹에 포함되기 때문에 그렇습니다.

 

이름
비밀번호
홈페이지
AZ <- 왼쪽의 문자를 오른쪽 박스에 똑같이 입력해 주세요