IIS 7.0 구성에서 잠금을 사용하는 방법

작성자: Saad Ladki

요약

이 문서에서는 서버에서 구성을 잠그고 잠금을 해제하는 방법을 설명합니다. 애플리케이션 수준 구성 파일이 재정의할 수 있는 설정과 요소를 사용하여 전체 섹션을 <location> 잠그는 방법을 알아봅니다.

다음과 같은 섹션 내에서 구성 설정의 보다 세분화된 잠금을 실험합니다.

  • 특정 요소 및 특성 잠금
  • 특정 요소 또는 특성을 제외한 모든 항목 잠금
  • , <remove>및 지시문과 <clear> 같은 <add>특정 컬렉션 지시문 잠금
  • 컬렉션의 특정 요소 잠금

이 문서를 읽은 후 구성 파일에서 XML 요소를 직접 편집하여 구성 잠금의 다양한 기능을 관리하는 방법을 알게 됩니다(이러한 작업을 수행하는 프로그래밍 인터페이스는 XML 구조를 매우 밀접하게 따릅니다).

이 문서에서는 관리 API, 스크립트 또는 UI(사용자 인터페이스)를 사용하여 동일한 작업을 수행하는 방법을 보여 주는 대신 의도적으로 구성 파일에서 XML 요소를 편집하는 데만 중점을 둡니다.

소개

IIS 7.0 이상에서는 다양한 수준 및 범위에서 구성 설정을 잠그고 잠금 해제할 수 있습니다. 구성을 잠그면 계층 구조의 하위 수준에서 재정의(또는 전혀 설정)할 수 없습니다. 잠금 해제 구성은 잠긴 수준에서만 수행할 수 있습니다. 예를 들어 다른 사이트 또는 경로에 대해 서로 다른 구성을 만들 때 유용하며 일부 사이트 및 경로만 재정의할 수 있습니다. 섹션 수준 또는 섹션 내의 특정 요소, 특성, 컬렉션 요소 및 컬렉션 지시문에 대해 잠금을 수행할 수 있습니다.

작업 1: 태그를 사용하여 <location> 섹션 잠금

이 작업에서는 태그를 사용하여 <location> 구성 계층의 애플리케이션 수준에서 재정의할 수 없도록 전체 구성 섹션을 전역 수준에서 잠그거나 잠금 해제하는 방법을 알아봅니다.

참고

기본적으로 applicationHost.config 대부분의 IIS 섹션은 잠겨 있으며 .NET 프레임워크는 잠기지 않습니다(machine.config 및 루트 web.config system.web> 섹션 그룹의 ASP.NET 섹션 <포함).

메모장과 같은 텍스트 편집기를 사용하여 다음 위치에서 applicationHost.config 파일을 엽니다.

%windir%\system32\inetsrv\config\applicationHost.config

<configSections> 파일 맨 위에 있는 섹션을 검토합니다. 섹션의 이름, 섹션 그룹 포함, 잠금 여부 등 이 파일의 구성 섹션에 대한 메타데이터가 있습니다.

잠긴 섹션은 "허용" 또는 "거부"인 "overrideModeDefault" 특성으로 지정됩니다. 이 줄에 지정된 대로 기본적으로 잠겨 있지 않은 섹션은 거의 없습니다. 예를 들면 다음과 같습니다.

<section name="defaultDocument" overrideModeDefault="Allow" />

여기서는 섹션을 처리합니다 <windowsAuthentication> . 기본적으로 잠겨 있습니다.

서버의 모든 애플리케이션에 대한 전체 섹션의 잠금을 해제하려면 파일의 현재 위치에서 파일의 아래쪽으로 콘텐츠를 이동하고 요소 내에 <location overrideMode="Allow"> 넣습니다. 또한 섹션 그룹을 둘러싸고 있어야 합니다 <system.webServer>. , , 및 <security><authentication>입니다. 최종 결과는 다음과 같습니다.

<location overrideMode="Allow">
  <system.webServer>
     <security>
        <authentication>
          <!-- the content of windowsAuthentication section is here -->
        </authentication>
     </security>
  </system.webServer>
</location>

이제 섹션이 모든 애플리케이션에 대해 잠금 해제되었습니다. 이 경로에 대해서만 섹션의 잠금을 해제할 수 있도록 위치 태그에 경로를 지정할 수 있습니다. 이전 단계에서와 같이 지정하지 않은 경우 기본 경로는 path="입니다. (또는 path="", 같은 것), 즉 "이 현재 수준"을 의미합니다. 이 경우 applicationHost.config 현재 수준은 전역 수준을 의미합니다. 네임스페이스 계층 구조의 아무 곳이나 위치 태그(예: vdir 수준의 web.config)를 사용하여 이 시점부터 구성을 아래쪽으로 잠글 수도 있습니다.

다음은 "AdminSuperTrusted" 사이트에 대해서만 이 섹션의 잠금을 해제하는 방법의 예입니다. 즉, 해당 사이트의 web.config 파일이 이 섹션의 설정을 재정의할 수 있습니다. 그러나 상자의 다른 모든 사이트에 대해 전역 수준에서 잠겨 있으며 재정의할 수 없습니다.

이 예제에서는 섹션의 내용을 원래 위치에 applicationHost.config 두고 특정 경로를 사용하여 위치 태그에 섹션을 지정해야 합니다.

<location path="AdminSuperTrustedSite" overrideMode="Allow">
  <system.webServer>
    <security>
      <authentication>
        <!-- note: this is different than previous example, in that  -->
        <!-- the content of the section is in the original place and -->
        <!-- was not moved here; in addition, the section is also    -->
        <!-- specified here, just by its name, so that it gets       -->
        <!-- unlocked only for the site specified in the location.   -->
        <windowsAuthentication/>
      </authentication>
    </security>
  </system.webServer>
</location>

위의 세 번째 예제로 돌아가면 모든 사이트의 모든 애플리케이션(위치 경로=".")에 대해 섹션이 잠금 해제됩니다. 기본 <인증> 섹션 그룹(파일에서 <location> 위의 요소 외부 그룹)에 windowsAuthenitcation> 섹션이 포함되어 <있지 않은지 확인합니다. 위치 태그 외부와 위치 경로="의 동일한 파일에 섹션을 <표시할 수 없습니다."> 태그; 이는 잘못된 구성으로 간주됩니다.

섹션이 잠겨 있는지 여부를 테스트하려면 브라우저에서 로 이동합니다 http://localhost/app .

섹션이 잠겨 있으면 애플리케이션 수준의 <windowsAuthentication> web.config 파일에 섹션이 있으므로 브라우저에 오류가 표시됩니다. 즉, web.config 해당 수준에 대해 재정 <windowsAuthentication> 의하려고 합니다. 그러나 이제 해당 섹션이 전역 수준에서 잠겨 있으므로 web.config 파일의 구성이 유효하지 않습니다.

위치 태그를 overrideMode="Deny"로 변경합니다. 이렇게 하면 섹션이 다시 잠깁니다. machine.config 또는 루트 web.config ASP.NET 섹션과 같은 다른 섹션을 실험합니다. 전역 수준에서 잠그고 web.config 수준에서 재정의합니다.

작업 2: 특정 요소 및 특성 잠금

이전 작업을 기반으로 하여 태그 내에서 섹션을 찾 <windowsAuthentication> 습니다 <location> . 위치 태그를 설정하여 overrideMode="Allow" 섹션의 잠금을 해제합니다. 섹션의 특정 부분만 잠그지 않습니다.

enabled 특성을 true로 설정한 다음 lockAttributes="enabled"를 설정하여 잠급니다.

이렇게 하면 애플리케이션 수준 구성 파일이 섹션의 <windowsAuthentication>사용 특성 값을 변경하지 못하게 됩니다.

다른 특성을 잠그려면 다음 예제와 같이 쉼표로 구분된 lockAttributes 값에 추가합니다.

lockAttributes="enabled,attribute1,attribute2"

다음 예제와 같이 "*"를 사용하여 모든 특성을 잠글 수도 있습니다.

lockAttributes="*"

이제 섹션은 다음과 같이 표시됩니다.

<location path="." overrideMode="Allow">   <system.webServer>
    <security>
      <authentication>
        <windowsAuthentication enabled="true" lockAttributes="enabled">          
          <providers>
            <add value="Negotiate" />
            <add value="NTLM" />
          </providers>
        </windowsAuthentication>
      </authentication>
    </security>
  </system.webServer>
</location>

애플리케이션에 대한 web.config 파일에서 섹션의 설정을 재정의 <windowsAuthentication> 합니다.

브라우저에서 잠긴 설정을 제외한 모든 설정(이 경우 사용 특성)을 재정의할 수 있는지 확인하기 위해 페이지를 요청합니다.

참고

Web.config 파일에 설정한 특성의 값이 ApplicationHost.config 파일과 동일한 경우에도 web.config 파일에서 특성을 지정하면 구성 오류가 발생합니다. 잠긴 특성을 모든 값으로 설정하는 것은 특성을 재정의하려는 시도로 간주되므로 실패합니다. (또한 특성은 요소와 다릅니다. 다음 작업에서는 요소를 잠급니다.)

lockAttributes 특성을 제거합니다.

lockElements="providers"를 설정하여 섹션 내의 <providers> 요소를 잠급니다.

잠글 다른 요소가 있는 경우 다음과 같이 쉼표로 구분하여 추가할 수 있습니다.

lockElements="providers,element1,element2"

이제 섹션은 다음과 같이 표시됩니다.

<location path="." overrideMode="Allow">   <system.webServer>
    <security>
      <authentication>
        <windowsAuthentication enabled="true" lockElements="providers">
          <providers>
            <add value="Negotiate" />
            <add value="NTLM" />
          </providers>
        </windowsAuthentication>
      </authentication>
    </security>
  </system.webServer>
</location>

애플리케이션 Web.config 파일에서 요소를 설정하거나 컬렉션을 추가, 제거 또는 지우려고 시도하여 요소를 재정 <providers> 의합니다.

브라우저에서 페이지를 요청하고 오류가 표시됩니다. web.config 파일에서 사용 특성과 같은 다른 요소 또는 특성을 재정의합니다. 페이지로 이동하여 오류가 표시되지 않음을 확인합니다.

lockElements 특성을 제거합니다.

작업 3: 특정 특성을 제외한 모든 항목 잠금

이 작업에서는 정의하는 특정 요소를 제외한 섹션의 모든 요소 또는 특성을 잠그는 방법을 알아봅니다. 이는 섹션에 있거나 향후 어떤 속성이 있는지 확실하지 않고 명시적으로 잠금 해제되도록 설정한 속성을 제외한 모든 속성을 잠그려는 경우에 유용합니다.

이전 작업을 빌드하고 위치 태그에서 섹션을 찾 <windowsAuthentication> 습니다.

lockAllElementsExcept 또는 lockAllAttributesExcept 특성을 잠금할 요소 또는 특성의 쉼표로 구분된 목록으로 설정합니다. 예를 들어 섹션은 다음과 같을 수 있습니다.

<windowsAuthentication enabled="true" lockAllElementsExcept="providers">
     <providers>
          <add value="Negotiate" />
          <add value="NTLM" />
     </providers>
</windowsAuthentication>

또는 다음과 같습니다.

<windowsAuthentication enabled="true" lockAllAttributesExcept="enabled">
     <providers>
          <add value="Negotiate" />
          <add value="NTLM" />
     </providers>
</windowsAuthentication>

이 특정 섹션에는 현재 다른 특성이나 요소가 없습니다. lockAllElementsExcept 또는 lockAllAttributesExcept 특성을 설정하는 효과를 테스트하려면 특성 집합이 더 풍부한 다른 섹션에 동일한 특성을 추가합니다.

작업 4: 일부 컬렉션 지시문 잠금

이 작업에서는 애플리케이션 수준에서 구성 파일 요소를 추가할 수 있지만 제거할 수 없도록 컬렉션에서 및 <remove> 지시문을 잠그 <add> 는 방법을 알아봅니다.

이전 작업을 빌드하고 위치 태그에서 섹션을 찾 <windowsAuthentication> 습니다.

컬렉션에서 lockElements 특성을 <providers>제거,지우도록 설정합니다.

완료되면 섹션은 다음과 같습니다.

<windowsAuthentication enabled="true" >
  <providers lockElements="remove,clear">
    <add value="Negotiate" />
    <add value="NTLM" />
  </providers>
</windowsAuthentication>

애플리케이션의 web.config 파일에서 컬렉션에서 NTLM 요소를 제거하는 요소를 만듭니 <remove> 다.

완료되면 web.config 파일은 다음과 같습니다.

<configuration>
  <system.webServer>
    <security>
      <authentication>
        <windowsAuthentication>
          <providers>
            <remove value="NTLM" />
          </providers>
        </windowsAuthentication>
      </authentication>
    </security>
  </system.webServer>
</configuration>

브라우저에서 를 요청합니다 http://localhost/app.

작업 5: 컬렉션의 특정 요소 잠금

이 작업에서는 특정 컬렉션 요소를 잠그는 방법을 알아봅니다. 개발자는 계층 구조의 하위(애플리케이션) 수준에서 컬렉션에 요소를 추가할 수 있으며 컬렉션에서 잠겨 있지 않은 요소를 제거할 수 있습니다. 그러나 구체적으로 잠근 요소는 제거할 수 없습니다. 지우는 것은 컬렉션에서 모든 요소를 제거하는 것을 의미하기 때문에 컬렉션을 지울 수 없습니다.

이전 작업을 빌드하고 위치 태그에서 섹션을 찾 <windowsAuthentication> 습니다.

컬렉션의 <providers> NTLM 공급자에 대한 요소에서 <add>lockItem 을 "true"로 설정합니다.

완료되면 섹션은 다음과 같습니다.

<windowsAuthentication enabled="true" >
  <providers>
    <add value="Negotiate" />
    <add value="NTLM" lockItem="true" />
  </providers>
</windowsAuthentication>

애플리케이션 web.config 파일에서 컬렉션에서 NTLM 요소를 제거하는 요소를 만듭니 <remove> 다.

완료되면 Web.config 파일은 다음과 같습니다.

<configuration>
  <system.webServer>
    <security>
      <authentication>
        <windowsAuthentication>
          <providers>
            <remove value="NTLM" />
          </providers>
       </windowsAuthentication>
      </authentication>
    </security>
  </system.webServer>
</configuration>

브라우저에서 요청 http://localhost/app -- 요청이 실패합니다.

요약

이 문서에서는 구성 설정을 잠그는 방법을 알아보았습니다. 요소를 사용하거나 태그의 lockItem 특성을 true로 <location> 설정하여 전체 섹션을 잠글 수 있습니다. 잠금은 lockAttributes, lockElements, lockAllAttributesExcept, lockAllElementsExcept 또는 lockItem 설정을 컬렉션 요소에 사용하고 컬렉션에서 lockElements 설정을 사용하여 특정 컬렉션 지시문(<add>, <remove>또는 <clear>)을 지정하는 경우 보다 유연하고 세분화될 수 있습니다. 잠금은 ApplicationHost.config 뿐만 아니라 계층의 모든 수준에서 발생할 수 있습니다. 잠금은 해당 수준에서 아래쪽으로 적용됩니다.