IIS 7.5 보안에 대해 이야기 할 때 AFAIK :
App Pool Identity 는 내 웹 응용 프로그램을 실행할 사람을 결정 합니다.
인증 방법 은 인증 대상 클라이언트를 결정 합니다.
다음과 같이 구성된 가상 폴더가 있습니다.
- 모든 클라이언트가 IUSR 로 인증되어야한다는 기대와 함께 익명 인증을 사용합니다 .
- 폴더에 대한 IUSR의 모든 권한을 부여합니다.
- 내 앱 풀 ID가 폴더에 대한 권한이없는 XXX 계정으로 설정되어 있습니다. (의도적으로 이것을 설정했습니다)
그러나 해당 폴더의 파일을 찾아 볼 수 없습니다. 폴더에 액세스 할 수있는 권한을 XXX 계정에 부여하면 문제가 해결됩니다.
그렇다면 익명 인증에서 App Pool Identity는 어떤 역할을합니까? 폴더에 액세스하려면 앱 풀 ID 계정에 권한을 부여해야하는 것은 전혀 예상치 못한 일입니다. 익명 인증으로 충분하다고 생각 했습니까?
감사.
답변
여기에 과부하 된 용어가 많이 있으며 IIS 7과 7.5 사이의 변경 사항이 있습니다.
앱 풀 자격 증명 및 앱 풀 계정
응용 프로그램 풀 ID (소문자 I, 일명 앱 풀 계정 )로 시작하겠습니다 .
내가 말하는 방식으로, 응용 프로그램 풀 계정 은 응용 프로그램 풀 을 부팅 하는 데 사용되는 계정 과 다른 사람을 사칭하지 않을 때 응용 프로그램 풀이 가정하는 ID입니다.
따라서 응용 프로그램 풀에 부여한 ID에 관계없이 콘텐츠 폴더의 파일 을 읽을 수 있어야 합니다 . 특히 IIS 구성의 일부를 구성하는 web.config 파일 을 {그러나 이에 제한되지는 않음} 파일 을 읽을 수 있어야 합니다 . 앱 풀이 진행됩니다).
폴더에 액세스 할 수 없으면 중요한 (게임 변경) web.config 파일이 있다고 가정하고 오류를 표시합니다. 따라서 앱 풀 계정 에는 모든 콘텐츠 폴더에 대한 읽기 권한이 필요합니다 .
응용 프로그램
왜 앱 풀 계정 (앱 풀 ID)과 앱 풀 ID를 차별화해야합니까? 특수 대문자로 사용되는 ApplicationPoolIdentity 는 새로운 계정 유형 ( 관리 서비스 계정)으로 IIS 7.5 / Windows 2008 R2에서 도입되어 기본값이되었으며 Windows 2008 SP2에서도 사용할 수 있습니다 (기본값은 아님).
IIS.Net의 응용 프로그램 풀 ID를 참조하십시오.
GUI를 사용하여 R2에서 웹 사이트를 만들 때 :
- 해당 웹 사이트를 호스팅하기위한 앱 풀이 생성되며
- 계정 유형은 네트워크 서비스 (2008 기본값), 로컬 서비스 또는 로컬 시스템 대신 ApplicationPoolIdentity입니다.
2008 RTM에서 기본 앱 풀 계정은 네트워크 서비스 와 고유 한 앱 풀 ID / 고유 자입니다. 새로운 R2 / SP2 AppPoolIdentity 계정 유형 은 네트워크 서비스 유사 계정 (즉, 오프 박스 연결시 컴퓨터)이지만 동일한 상자 내에서 다른 앱 풀을 가장하는 것을 방지합니다.
원래 질문으로 돌아 가기 :
-
앱 풀 계정 은 다른 사람을 사칭하지 않을 때 앱이 실행되는 사람을 정의합니다.
-
인증 방법 은 클라이언트를 가장하기 위해 클라이언트를 인증 하는 방법을 설명 합니다.
-
익명 사용자 계정 이 인증되지 않은 요청에 대해 사용자를 가장하는 경우와 같이 실행하는 겁니다 정의 – IUSR 이러한 사용자입니다.
또한 IIS 7.5를 사용하면 익명 사용자 계정을 응용 프로그램 풀 ID (익명 인증 방법의 속성)로 설정하면 지정된 웹 사이트의 콘텐츠를보다 간단하게 격리하고 보호 할 수 있습니다.
이름 형식으로 IIS AppPool \ YourSiteName을 사용하여 권한을 설정하십시오. ( 이 게시물 참조 )
답변
ASP.NET에서 일반적으로 혼동되는 두 가지 사항이 있습니다.
- “사용자 ID”-사용자 계정 인증은 실제로 II와 ASP.NET에서 모두 실행되는 계정이나 ID와 관련이 없습니다. 익명 인증을 사용하면 모든 사용자가 클라이언트 브라우저에 사용자 이름과 암호를 입력하지 않고도 공개 컨텐츠에 액세스 할 수 있습니다. IIS에서 기본적으로 인증되는 익명의 IUSR 계정은 공개 웹 사이트 컨텐츠에 대한 액세스 만 적용합니다. 기본 II 또는 ASP.NET 서비스에서 사용하는 프로세스 나 리소스에는 영향을 미치지 않습니다.
- “응용 프로그램 ID”-실제로 IIS 및 ASP.NET에서 실행되는 서버의 실제 “WindowsIdentity”계정입니다.이 계정은 IIs에 의해 풀에 할당되고 ASP.NET에 제공되는 응용 프로그램 풀 ID 계정입니다. ASP.NET 프로세스는 기본적으로이 응용 프로그램 풀 ID 계정 (IIs 버전 7.5 이상의 가상 계정이라고 함)에서 실행됩니다.
설명 : 첫째, ASP.NET의 “인증”은 일반적으로 web.config에 설정된 이벤트로, 주어진 사용자 계정에 IIs에 의해 일반 HttpContext 객체로 ASP.NET에 사용자 토큰으로 전달됩니다 … 즉, 현재 사용자의 현재 세션 또는 컨텍스트. 실제로 ASP.NET 프로세스를 실행하는 WindowsIdentity를 변경하지 않고 사용자 ID 토큰을 전달합니다. HttpContext를 사용하면 코드에서 해당 ID 또는 이름을 사용하여 웹 사이트의 다양한 섹션에 대한 데이터베이스 권한을 저장할 수 있습니다. 그러나 ASP.NET은 IIs에서 ASP.NET을 실행하는 실제 응용 프로그램 “프로세스”계정의 ID에 영향을 주거나 변경하지 않기 때문에 ASP.NET의 파일 액세스에는 영향을 미치지 않습니다.
“Impersonation”을 수행하여 ASP에 의해 IIs에 의해 전달 된 토큰을 가장 한 다음 해당 계정 ID로 실행하도록 지시 할 때까지 이러한 상황이 발생하지 않습니다. web.config에서 가장을 설정할 수 있습니다. ASP.NET에서 가장을 활성화하면 WindowsIdentity는 작업자 프로세스에서 인증 된 계정이 IIS에서 ASP.NET으로 전달되는 모든 항목으로 변경되며 해당 사용자 계정에 할당 된 권한에 따라 파일에 액세스 할 수 있습니다. 이 상황이 발생하면 ASP.NET은 현재 II 버전의 기본 프로세스 ID로 다시 되돌려 주어진 응용 프로그램 풀에 할당 된 응용 프로그램 풀 ID 계정으로 되돌릴 수 있습니다.
IIs가 ASP.NET에 명시 적 인증이 설정되지 않은 일반 익명 사용자 계정 만 사용하는 경우 IIs는 기본적으로 웹 사이트에 할당 된 응용 프로그램 풀의 응용 프로그램 풀 ID 계정을 시작하여이를 ASP.NET 및이를 실행하는 작업자 프로세스에 전달합니다. 해당 응용 프로그램 풀 ID 계정은 IIS에 대한 모든 요청을 처리하고 해당 사이트에 대해 ASP.NET을 실행합니다.
IIs가이 설정에서 시작되고 사용자가 액세스하면 실제로는 기본적으로 웹 페이지 및 기타 기본 리소스에 대한 액세스를 결정하는 익명의 IUSR 계정을 백그라운드에서 인증합니다. 그러나 해당 계정은 ASP.NET으로 전달되지 않습니다. 또한 IIS가 실행되는 ASP 및 NET의 응용 프로그램 풀 ID에는 영향을 미치지 않습니다.
web.config에서 Impersonate를 “true”로 설정하고 공개 액세스를 위해 II의 기본 익명 IUSR 계정을 사용하고 있으며 Windows를 사용하는 대신 web.config에서 anonymousAuthentication 특성을 명시 적으로 true로 설정 한 경우 또는 다른 로그인 계정)의 경우 II는 응용 프로그램 풀 ID를 가져오고 II와 ASP.NET은 이제 익명의 IUSR 인증 및 가장 된 계정으로 응용 프로그램 프로세스를 실행합니다.
그렇게하면 ASP.NET과 해당 프로세스가 이제 IUSR 계정으로 실행됩니다. 즉, ASP.NET의 응용 프로그램 프로세스는 WindowsIdentity 계정을 IUSR 계정으로 실행합니다. 이제 해당 익명 IUSR 계정과 해당 계정이 액세스 할 폴더에 대한 읽기 / 쓰기 액세스 권한을 적용 할 수 있습니다. (참고 : 기본 프로세스 계정, 풀의 응용 프로그램 풀 계정, 권한 및 해당 폴더에 대한 권한을 추가해야합니다. 이는 Microsoft의 권장 사항에 따릅니다)
행운을 빕니다!
답변
두 가지 인증 컨텍스트가 있습니다. 웹 요청을 처리하는 웹 서버 프로세스는 App Pool Identity 사용자로 실행됩니다. 가상 호스트에 대한 요청이 들어 오면 응용 프로그램 풀은 특정 사이트의 “익명 인증 자격 증명”(기본적으로 IUSR)에 나열된 사용자를 가장합니다.
웹 사이트 내에서 실행되는 모든 스크립트는 IUSR로 실행되지만 로깅 및 기타 특정 기능은 앱 풀 사용자로 실행됩니다 (기본적으로 네트워크 서비스-특수 가상 앱 풀 사용자를 사용하도록 최근 변경 되었음). 스크립트로 제어가 전달되기 전에 요청 스택에서 특정 검사가 수행 될 때 앱 풀 ID (네트워크 서비스)가 디렉토리의 파일을 나열 할 수 있어야합니다.
풀당 하나의 사이트를 실행하고 웹 사이트의 익명 사용자와 동일한 사용자로 실행되도록 앱 풀 ID를 설정하는 것이 좋습니다. 익명 사용자 컨텍스트 (IUSR)를 벗어나 앱 풀 ID 자체의 권한을 상승시킬 수 있습니다.