IIS7의 사용자 계정과 그룹에 대한 이해

2006. 12. 31. 16:46 IT 및 개발/Windows Server
서론

이전 버전의 IIS 에는 설치시에 생성되는 IUSR_MachineName 라는 로컬 계정이 존재했습니다. 이 IUSR_MachineName 계정은 익명 인증이 활성화되어 있는 경우 IIS 에 의해서 기본 신원계정으로 사용되며, FTP 서비스와 HTTP 서비스 모두 이 계정을 사용했습니다. 그리고, 응용 프로그램 풀의 신원 계정으로 사용되는 모든 계정들을 포괄하기 위한 목적으로 IIS_WPG 라는 그룹도 존재했습니다. IIS 가 설치되는 동안 시스템에 존재하는 모든 적절한 리소스에는 IIS_WPG 그룹에 대한 올바른 권한 모음이 설정되었습니다. 그래서, 관리자들은 새로운 응용 프로그램 풀 계정을 생성하면 그 계정을 IIS_WPG 그룹에 추가해야만 했었습니다.

이 모델은 대단히 잘 동작했지만, 대부분의 설계들이 그런 것처럼 이 모델에도 단점은 존재했으며, 그 중에서도 IUSR_MachineName 계정과 IIS_WPG 그룹이 생성된 시스템에 국한되는 계정이라는 점이 가장 큰 단점이었습니다. Windows 의 모든 계정과 그룹은 다른 계정들과 구분되는 SID (Security IDentifier) 라고 불리우는 유일한 번호를 부여받는데, ACL 이 생성될 때 바로 이 SDI 가 사용됩니다. IIS 의 기존 버전에서는 IUSR_MachineName 계정 정보가 metabase.xml 파일에 저장되도록 설계되었는데, 여러분들이 metabase.xml 파일을 한 머신에서 다른 머신으로 복사한다고 하더라도, 대상 머신의 IUSR_MachineName 계정은 본래 머신의 계정과 다른 SID 를 가지고 있기 때문에 IIS 가 곧바로 동작하지 않았습니다. 게다가, 머신과 머신간의 SID 는 서로 다르므로 'xcopy /o' 명령만으로는 한 머신에서 다른 머신으로 ACL 을 복사할 수도 없습니다. 도메인 계정을 사용하는 방법도 있지만, 그렇게 되면 여러분들의 네트워크 기반 구조에 엑티브 디렉터리를 추가해야만 합니다. 그리고, IIS_WPG 그룹도 권한과 관련된 비슷한 문제점을 갖고 있었습니다. 만약 여러분들이 어떤 머신의 파일 시스템에 IIS_WPG 그룹에 대한 ACL 을 설정한 다음, 'xcopy /o' 명령을 사용하여 또 다른 머신으로 복사를 시도한다면 그 작업은 실패하게 될 것입니다. IIS 팀에서는 이러한 문제점에 대한 피드백을 받아들여 내장 계정과 그룹을 사용하여 IIS 7.0 을 개선했습니다.

내장 계정과 그룹은 운영체제 시스템에 의해 언제나 동일한 SID 를 보장받습니다. 그리고, IIS 는 이를 더욱 적극적으로 받아들여 새로운 계정과 그룹의 실제 이름이 결코 지역화되지 않도록 보장합니다. 예를 들어서, 설치된 Windows 의 언어와는 관계없이, 언제나 IIS 계정의 이름은 IUSR 가 되고 그룹의 이름은 IIS_IUSRS 가 됩니다.

이를 정리하면, IIS 7.0 에서는:

  • IUSR 내장 계정이 기존의 IUSR_MachineName 계정을 대체합니다.
  • IIS_IUSRS 내장 그룹이 기존의 IIS_WPG 그룹을 대체합니다.

내장된 계정인 IUSR 계정은 비밀번호가 필요하지 않습니다. 그리고, 여러분들은 논리적으로 이 계정은 NETWORKSERVICE 계정이나 LOCALSERVICE 계정과 동일한 것으로 간주할 수 있습니다. 다음 섹션에서 IUSR 계정과 IIS_IUSRS 그룹에 대해서 보다 깊게 알아보도록 하겠습니다.

새로운 IUSR 계정에 대한 이해

앞에서 설명했던 것과 같이, IIS 7.0 에서는 IUSR 계정이 IUSR_MachineName 계정을 대체합니다. 그러나, IUSR_MachineName 계정도 여전히 생성되고 사용되는데, 이는 오직 FTP 서버가 설치된 경우에만 해당됩니다. 만약 FTP 서버가 설치되지 않는다면 이 계정은 결코 생성되지 않을 것입니다.

IUSR 내장 계정은 비밀번호를 요구하지 않으며 익명 인증이 활성화된 경우 기본 신원계정으로 사용되어집니다. 만약, 여러분들이 applicationHost.config 파일을 살펴본다면 다음과 같이 정의된 부분을 쉽게 찾아보실 수 있을 것입니다.

<anonymousAuthentication enabled="true" userName="IUSR" defaultLogonDomain="" />

이 부분은 우리들이 모든 익명 인증 요청에 대해서 이 새로운 내장 계정을 사용하기를 원한다는 것을 IIS 에게 말해줍니다. 이러한 결과로 우리들이 얻을 수 있는 커다란 이점은 다음과 같습니다.

  • 탐색기나 그 밖의 다양한 명령 프롬프트 도구들을 사용하여 IUSR 계정에 대한 파일 시스템 권한을 설정할 수 있습니다.
  • 더 이상 IUSR 계정의 비밀번호 만료에 대해서 걱정할 필요가 없습니다.
  • 파일들을 소유권 정보와 ACL 정보까지 포함하여 xcopy /o 명령을 통해 다른 머신에 완벽하게 복사할 수 있습니다.

가장 중요한 점은 IUSR 계정이 LOCALSERVICE 계정과 유사하게 네트워크상에서 익명으로 동작한다는 사실입니다. NETWORKSERVICE 계정과 LOCALSYSTEM 계정은 머신의 자격 증명으로 동작할 수 있지만 IUSR 계정은 권한 승격으로 인해서 그럴수가 없습니다. 만약, 여러분들이 익명 계정에 네트워크 권한을 부여하고자 한다면, 기존 버전에서 익명 인증을 위해서 작업했던 것과 같이 새로운 계정을 생성하고 수작업으로 사용자 이름과 비밀번호를 설정해야만 합니다. IIS 관리자를 사용하여 이 작업을 처리하려면:

  • 시작을 클릭한 다음 'INetMgr.exe' 를 입력하고 엔터키를 누릅니다. (만약, 보안 경고 대화 상자가 나타난다면 "계속' 버튼을 선택하여 권한을 승격시키십시오.)
  • "Connections" 섹션에서 여러분들의 머신 이름이 적힌 노드 좌측에 위치한 "+" 버튼을 클릭합니다.
  • 웹 사이트 노드에서 여러분들이 관리하고자 하는 사이트를 더블 클릭합니다.
  • "Feature Name" 이 "Authentication" 인 항목을 더블 클릭합니다.
  • "Anonymous Authentication" 을 선택하고, 화면 오른편에 위치한 "Actions" 섹션에서 "Edit" 버튼을 클릭하여 "Edit Anonymous Authentication Credentials" 대화 상자를 불러옵니다.
  • "Specific User" 옵션을 선택하고 그 옆의 "Set" 버튼을 누릅니다.
  • 원하는 사용자 이름과 비밀번호, 비밀번호 확인을 입력하고 "OK" 버튼을 누릅니다.

새로운 IIS_IUSRS 그룹에 대한 이해

이미 앞에서 설명했던 것처럼, IIS_IUSRS 그룹은 IIS_WPG 그룹을 대체하기 위한 목적으로 만들어 졌습니다. 이 내장 그룹은 필요한 모든 파일과 시스템 리소스에 대한 접근 권한을 갖고 있으며, 바로 그렇기 때문에 어떤 계정이 이 그룹에 포함되면, 아무런 문제없이 응용 프로그램 풀 신원 계정으로 동작할 수 있게 됩니다.

내장 IUSR 계정의 경우와 마찮가지로 내장 IIS_IUSRS 그룹도 몇 가지 XCOPY 배포의 문제점들을 해결해줍니다. 만약, 여러분들이 IIS_WPG 그룹에 대해서 - IIS 6 시스템에서 사용가능한 - 여러분들의 파일에 권한을 설정하고, 그 파일들을 다른 Windows 머신에 복사하려고 한다면, 이 그룹의 SID 는 머신들마다 다르므로 여러분들의 사이트 구성설정은 깨지게 될 것입니다.

그러나, IIS7 에서 IIS_IUSRS 그룹의 SID 는 롱혼이 실행되는 모든 시스템에서 동일하기 때문에, 'xcopy /o' 명령을 사용하여 머신에서 머신으로 파일들을 복사할 때 소유권 정보와 ACL 정보가 그대로 유지됩니다. 결과적으로 XCOPY 배포가 극단적으로 쉬워지는 것입니다.

고객들이 요청한 두 번째 사항은 '응용 프로그램 풀의 신원 계정을 설정하면 IIS 가 사용자를 대신하여 자동으로 필요한 모든 변경작업을 대신 처리해달라.' 라는 것이었습니다. IIS 팀에서는 이 피드백을 수용하여 IIS 7.0 에서는 이 작업을 보다 편리하게 만들었습니다. IIS 가 작업자 프로세스를 시작할 때, 이 작업에는 작업자 프로세스에서 사용될 토큰의 생성이 필요합니다. 이제는 이 토큰이 생성될 때, IIS 가 자동적으로 IIS_IUSRS 그룹의 계정들을 런타임시에 작업자 프로세스 토큰에 추가합니다. 그래서 결과적으로 '응용 프로그램 풀 신원 계정'으로 동작하도록 정의된 계정을 더 이상 명시적으로 IIS_IUSRS 그룹에 포함시킬 필요가 없어졌습니다. IIS 팀에서는 이러한 변화가 여러분들의 시스템 설정을 보다 덜 번거롭도록 도와주고 전반적인 작업을 편리하게 만들어줄 것이라고 믿고 있습니다.

그러나, 만약 여러분들이 이 새로운 기능을 비활성화 시키고 수작업으로 IIS_IUSRS 그룹에 계정을 추가하는 것을 선호한다면, 언제라도 manualGroupMembership 속성의 값을 'true' 로 설정하여 이 새로운 기능을 비활성화시킬 수 있습니다. 다음은 defaultAppPool 을 대상으로 해당 설정을 적용한 예입니다.

<applicationPools>
  <add name="DefaultAppPool">
    <processModel manualGroupMembership="true" />
  </add>
</applicationPools>

출처 : 한국 마이크로소프트 MSDN (2006년)