IIS 7.5 ApplicationPoolIdentity 역활 및 기능 1.
- NTFS 폴더 권한과 ApplicationPoolIdentity |
우선 iis 7 http 요청 처리 간략 아키텍쳐 설명필요.
IIS 7 은 IIS 6.0 과 비슷한 요청 처리 흐름을 가지고 있습니다. 다음 목록은 아래 그림에 표시된 요청 처리 흐름을 설명합니다.
1. 클라이언트 브라우저가 웹 서버에 대한 HTTP 요청을 시작 하는 경우 HTTP.sys 가 해당 요청을 가로챕니다.
2. HTTP.sys 는 구성 정보 저장소로부터 정보를 얻기 위해 WAS 와 연락을 합니다.
3. WAS 는 ApplicationHost.config, 구성 정보 저장소부터 구성 정보를 요청합니다.
4. WWW Service 는 응용프로그램 풀과 사이트 구성과 같은 구성 정보를 받습니다.
5. WWW service 는 Http.sys 를 구성하기 위해 구성 정보를 이용합니다.
6. WAS 는 요청에 의 만들어진 응용프로그램 풀을 위해 작업자 프로세스를 시작합니다.
7. 작업자 프로세스가 요청을 처리하고 Http.sys 응답을 반환 합니다.
8. 클라이언트가 응답을 받습니다.
작업자 프로세스에서 HTTP 요청은 이벤트라고 불리는 정렬된 여러 단계를 통해 전달됩니다. 각 이벤트에서 네이티브 모듈은 사용자 인증이나 이벤트 로그에 정보 추가 같은 요청의 일부분을 처리합니다. 만약 요청이 관리되는 모듈을 필요로 할 경우 네이티브 ManagedEngine 모듈이 폼 인증을 사용하여 사용자 인증 등의 필요한 프로세스를 수행할 수 있는 관리되는 모듈 AppDomain을 만듭니다. 요청이 웹 서버 코어에서 모든 이벤트를 통과 할 경우 응답이 HTTP.sys 에 반환됩니다.
iis7.5 의 새로운 기능인
응용 프로그램 풀 신원 계정 (Application Pool Identity)
기본적으로 IIS 6 나 IIS 7 의 작업자 프로세스는 NETWORKSERVICE 계정으로 실행되며, NETWORKSERVICE 계정은 내장 윈도우 신원입니다. 이 계정에는 비밀번호가 필요없으며 비교적 낮은 수준의 사용자 권한만 부여되어 있습니다. 보안적인 측면에서 볼 때, 낮은 수준의 사용자 권한을 가진 계정으로 서비스를 실행하는 것은 매우 좋은 습관입니다. 그러면, 악의적인 사용자가 소프트웨어의 버그를 이용하여 전체 시스템 권한을 획득하는 것을 미연에 방지할 수 있기 때문입니다.
그럼에도 불구하고 이 방식의 가장 큰 문제점은, NETWORKSERVICE 계정으로 실행되는 서비스가 역시 같은 계정으로 실행되는 다른 서비스들에 여전히 영향을 미칠 수 있다는 점입니다. 기본적으로 IIS 작업자 프로세스에서는 서드-파티 코드들이 (클래식 ASP, ASP.NET, PHP 코드 등) 실행되므로, IIS 작업자 프로세스는 다른 윈도우 시스템 서비스들과 격리되어야하며 별도의 신원으로 실행되는 것이 바람직합니다. 이를 위해서, 윈도우 운영 체제 수준에서 "가상 계정" 이라는 이름의 새로운 기능을 제공하여 IIS 로 하여금 각각의 응용 프로그램 풀들을 위한 자신만의 신원 계정을 생성할 수 있도록 지원해줍니다
결과적으로 새로운 응용 프로그램 풀이 생성될 때마다, IIS 관리 프로세스에 의해 응용 프로그램 풀의 이름과 동일한 이름으로 보안 식별자 (SID) 가 생성됩니다. 다시 말해자면, "MyNewAppPool" 라는 이름으로 새로운 응용 프로그램 풀을 생성했다면, 윈도우 보안 시스템에도 역시 "MyNewAppPool" 라는 이름으로 보안 식별자가 자동 생성된다는 것입니다. 그리고, 바로 이 시점부터 해당 신원을 리소스 보안 설정에 사용할 수 있습니다. 그렇지만, 이 신원은 실제로 존재하는 사용자 계정이 아니며, 따라서 윈도우 사용자 관리 콘솔에는 나타나지 않습니다.
테스트로 윈도우 탐색기에서 임의의 파일을 선택하여 접근 제어 목록 (ACL) 에 "DefaultAppPool" 신원을 추가해보도록 하겠습니다.
- 윈도우 탐색기를 실행합니다.
- 파일 또는 디렉터리를 선택합니다.
- 마우스 오른쪽 버튼으로 클릭하고 "속성" 메뉴를 선택합니다.
- "보안" 탭을 선택합니다.
- "편집" 버튼을 클릭한 다음 "추가" 버튼을 클릭합니다.
- "위치" 버튼을 클릭하고 머신을 선택합니다.
- "선택할 개체 이름을 입력하십시오." 텍스트 박스에 "IIS AppPool DefaultAppPool (또는 생성한 응용프로그램 풀)" 라고 입력합니다.
- "이름 확인" 버튼을 클릭하고 "확인" 버튼을 클릭합니다.
이상의 설정을 마치고 나면 선택한 파일을 "DefaultAppPool (또는 생성한 응용프로그램 풀)" 신원으로 접근할 수 있습니다.
기본적으로 윈도우 7 과 윈도우 서버 2008 R2 에서는 응용 프로그램 풀이 응용 프로그램 풀 신원 보안 식별자를 사용하여 실행되고, "AppPoolIdentity" 라는 이름으로 새로운 신원 유형이 제공됩니다. "AppPoolIdentity" 신원 유형이 선택되면 (윈도우 7 과 윈도우 서버 2008 R2 의 기본값) IIS 는 작업자 프로세스를 응용 프로그램 풀 신원으로 실행합니다.
===========================================================================
- Networkservice 계정 과 Application Pool Identity 계정으로 할당시 NTFS 권한 상관 관계 확인 테스트
- abc.skyblue098.pe.kr / test.skyblue098.pe.kr 두개 웹사이트 비교 분석
1.Application Pool Identity 신원 계정의 Users 그룹 NTFS 권한 제공시.
- 결과
두 사이트 모두 실행 확인
2. test.skyblue098.pe.kr 사이트 Application Pool Identity 신원 계정.
abc.skyblue098.pe.kr 사이트 Networkservic 신원 계정 으로 신원 계정을 변경시
Iusr 그룹 NTFS 권한만 제공시.
-결과
네트워크 서비스 계정 신원 사용시 IUSR 그룹 권한으로 실행 가능 한것을 확인 할수 있습니다.
3. Application Pool Identity 신원 계정 IIS 관리 프로세스에 의해 응용 프로그램 풀의 이름과 동일한 이름으로 보안 식별자 (SID) 를 NTFS 폴더 권한 부여 하였을때.
- 기본적으로 권한 목록에는 SID 표시 되지 않습니다.
-test.skyblue098.pe.kr 어플명과 동일한 (보안 식별자) NTFS 권한 부여.
- 2번째 목록의 권한부분관 현재 틀려졌습니다.
abc.skyblue098.pe.kr 은 네트워크 서비스 신원 계정에 iusr 그룹 권한 부여 되었고,
test.skyblue098.pe.kr 은 iusr 그룹에 test.skyblue098.pe.kr 어플명과 동일한 (보안 식별자) 권한을 부여 하였습니다.
- 결과
- 결론
Users 그룹계정에는 응용 프로그램 풀 신원 보안 식별자 (sid 값) 이 포함 되어 있는것을 확인 할수 있습니다.
중요한 결론은 각각 Application Pool Identity 을 생성 하여 웹사이트 운영 하여 서로 영향과 간섭을 최소하 하기 위해 IIS7.5 부터 추가된 기능 입니다.