FTP 7 따라하기: 사용자 격리 구성하기

등록일시: 2007-08-07 19:31,  수정일시: 2013-11-10 22:01
조회수: 9,927
이 문서는 IIS 기술을 널리 알리고자 하는 개인적인 취지로 제공되는 번역문서입니다. 이 문서에 대한 모든 저작권은 마이크로소프트에 있으며 요청이 있을 경우 언제라도 게시가 중단될 수 있습니다. 번역 내용에 오역이 존재할 수 있고 주석은 번역자 개인의 의견일 뿐이며 마이크로소프트는 이에 관한 어떠한 보장도 하지 않습니다. 번역이 완료된 이후에도 대상 제품 및 기술이 개선되거나 변경됨에 따라 원문의 내용도 변경되거나 보완되었을 수 있으므로 주의하시기 바랍니다.

서론

마이크로소프트에서는 원도우 서버 코드명 "롱혼"을 위해 완전히 새롭게 작성된 FTP 서비스를 개발했습니다. 이 새로운 FTP 서비스는 지금까지 웹 저작자들이 사용해오던 방법보다 개선된 방법을 사용해서 저작물을 배포할 수 있게 해주고, 웹 관리자에게 보다 많은 보안 및 배포 옵션들을 제공해주는 수 많은 새로운 기능들을 갖고 있습니다.

본문의 따라하기에서는 새로운 FTP 사용자 인터페이스를 사용하거나 IIS 구성 설정 파일을 직접 편집해서 다양한 방법으로 FTP 사용자 격리를 설정하는 과정을 보여드립니다.

노트: 본문의 따라하기에는 로컬 관리자 계정으로 FTP 사이트에 로그인하는 과정이 포함되어 있습니다. 이 과정은 반드시 FTP 사이트가 생성된 서버에서 루프백 주소로 로그인하거나, 원격에서 서버에 로그인하는 경우에는 SSL이 적용되어 있어야 합니다. 만약, 관리자 계정 대신 다른 사용자 계정으로 이 따라하기를 따라해보려면, 반드시 해당 사용자 계정에 적합한 폴더를 생성해야 하고, 필요하다면 이 폴더에 해당 계정에 대한 올바른 권한을 설정해야 합니다.

전제조건

이 따라하기의 내용을 모두 따라해보기 위해서는 다음과 같은 준비가 필요합니다:

  • 여러분들의 롱혼 서버에 IIS 7과 인터넷 정보 서비스 관리자가 설치되어 있어야 합니다.
  • 새로운 FTP 서비스가 설치되어 있어야 합니다. 다음 링크 중 하나를 통해서 http://www.iis.net/ 웹 사이트에서 FTP 서비스를 다운로드 받고 설치할 수 있습니다.
  • FTP 게시를 위한 루트 폴더를 생성해야 합니다:
    • "%SystemDrive%\inetpub\ftproot" 폴더를 생성합니다.
    • 익명 사용자의 접근을 허용하기 위한 권한을 설정합니다:
      • 명령 프롬프트를 실행합니다.
      • 다음의 명령을 실행합니다:
        CACLS "%SystemDrive%\inetpub\ftproot" /G IUSR:R /T /E
      • 명령 프롬프트를 닫습니다.
    • 추가적인 컨텐츠 폴더를 생성합니다:
      • "%SystemDrive%\inetpub\ftproot\LocalUser\Public" *
      • "%SystemDrive%\inetpub\adminfiles" **

* FTP 사이트의 컨텐츠 폴더, 즉 사용자의 홈 디렉터리를 생성하는 자세한 명명 규칙은 본문의 중반에 다시 살펴볼 것입니다.

** 이 폴더는 가상 디렉터리를 사용하는 예제를 위해 필요한 폴더입니다.

IIS 관리자를 사용하여 FTP 사용자 격리 설정하기

단계 1: FTP 사이트 마법사를 사용하여 FTP 사이트를 생성하기

이번 단계에서는 익명 사용자는 읽기만 가능하고 로컬 관리자는 읽고 기록할 수 있는 새로운 FTP 사이트를 생성해 볼 것입니다.

  1. 인터넷 정보 서비스 관리자의 Connections 패인에서 트리뷰의 Sites 노드를 클릭합니다.
  2. 다음 이미지에서 볼 수 있는 것처럼, 트리뷰에서 Sites 노드를 마우스 오른쪽 버튼으로 클릭하고 Add FTP Site 메뉴를 클릭하거나, Actions 패인에서 Add FTP Site 링크를 클릭합니다.
  3. Add FTP Site 마법사가 나타나면:
    1. FTP site name 텍스트 박스에는 "My New FTP Site"라고 입력하고, Contents Directory에는 전제조건 섹션에서 미리 생성해놨던 "%SystemDrive%\inetpub\ftproot" 폴더를 지정합니다.

      노트: 만약, Contents Directory의 물리적 경로를 직접 타이핑해서 입력하면, "%SystemDrive%\inetpub\ftproot" 같이 경로에 환경 변수를 사용할 수도 있습니다.

    2. 작업을 모두 마쳤으면, Next 버튼을 클릭합니다.
  4. 마법사의 다음 페이지에서는:
    1. FTP 사이트의 IP 주소를 지정하려면 일반적으로 IP Address 드롭다운 목록 상자에서 주소를 선택하거나 기본적으로 선택되어 있는 "All Unassigned."를 그대로 사용하면 됩니다. 그러나, 이 따라하기에서는 나중에 관리자 계정으로 로그인을 해 볼 것이므로, 서버에 대한 접근을 확실하게 제한하고 싶다면 IP Address에 "127.0.0.1"을 입력하여 로컬 루프백 IP 주소를 지정하십시오.
    2. FTP 사이트의 포트를 지정하기 위해 Port 텍스트 박스에 TCP/IP 포트를 입력합니다. 이 따라하기에서는 기본 포트인 21번 포트를 사용합니다.
    3. 이 따라하기에서는 가상 호스트 이름을 사용하지 않으므로 Virtual Host 텍스트 박스는 공란으로 비워둡니다.
    4. Certificates 드롭다운 목록 상자의 값을 "Not Selected"로 지정하고, Require SSL 옵션의 체크를 해제합니다.
    5. 작업을 모두 마쳤으면, Next 버튼을 클릭합니다.
  5. 마법사의 다음 페이지에서는:
    1. Authentication 설정에서 Anonymous를 체크합니다.
    2. Authorization 설정에서 Allow access to 드롭다운 목록 상자의 값을 "Anonymous users"로 지정하고 Permissions 옵션은 Read만 체크합니다.
    3. 작업을 모두 마쳤으면, Finish 버튼을 클릭합니다.
  6. 인터넷 정보 서비스 관리자에서 여러분들이 만든 FTP 사이트 노드를 클릭합니다. 그러면, 모든 FTP 기능 아이콘들이 출력됩니다.
  7. 먼저 사용자들이 로그인을 할 수 있게 해주는 기본 인증을 추가합니다. 이를 위해 FTP Authentication 아이콘을 더블 클릭해서 FTP 인증 기능 페이지를 엽니다.
  8. FTP Authentication 페이지가 나타나면, Basic Authentication을 선택하고 Actions 패인에서 Enable 링크를 클릭합니다.
  9. 인터넷 정보 서비스 관리자에서 FTP 사이트 노드를 클릭하면 다시 모든 FTP 기능 아이콘들이 출력됩니다.
  10. 관리자 계정으로 로그인 할 수 있도록 권한 규칙을 추가해야 합니다. FTP Authorization Rules 아이콘을 더블 클릭하여 FTP 권한 규칙 기능 페이지를 엽니다.
  11. FTP Authorization Rules 페이지가 출력되면, Actions 패인에서 Add Allow Rule 링크를 클릭합니다.
  12. Add Allow Authorization Rule 대화 상자가 나타나면
    1. Specified users 라디오 버튼을 선택하고, "administrator"를 텍스트 박스에 입력합니다.
    2. Permissions에서 Read와 Write를 모두 선택합니다.
    3. 작업을 모두 마쳤으면, OK 버튼을 클릭합니다.

요약

이번 단계에서 살펴본 내용들을 다시 정리해보면:

  • "My New FTP Site"라는 이름으로 새로운 FTP 사이트를 생성했으며, 이 FTP 사이트의 컨텐츠 루트는 "%SystemDrive%\inetpub\ftproot" 폴더로 지정했습니다.
  • FTP 사이트를 컴퓨터 로컬 루프백 주소 및 21번 포트에 바인딩하고, FTP 사이트에 대한 보안 소켓 계층(SSL)은 사용하지 않도록 설정했습니다.
  • 익명 사용자에게 파일에 대한 "읽기" 접근을 허용하는 FTP 사이트 기본 규칙을 생성했습니다.
  • 관리자 계정에 FTP 사이트에 대해 읽기와 쓰기를 허용하는 권한 규칙을 추가했습니다.
  • FTP 사이트에 기본 인증을 추가했습니다.

단계 2: 새로운 FTP 사용자 격리를 적용해보기

  1. 인터넷 정보 서비스 관리자를 실행하고 단계 1에서 생성한 FTP 사이트 노드를 클릭합니다. 그러면, 모든 FTP 기능 아이콘들이 출력됩니다.
  2. FTP User Isolation 아이콘을 더블 클릭하여 FTP User Isolation 기능을 엽니다.
  3. FTP User Isolation 기능 페이지에는 다섯 가지 옵션이 존재합니다.
  4. 이 다섯 가지 옵션의 의미는 다음과 같습니다:
    • Do not isolate users. Start users in:
      • FTP root directory
        • 이 옵션은 모든 FTP 세션이 FTP 사이트의 루트 디렉터리에서 시작되도록 지정합니다.

          노트: 이 옵션은 이 버전의 FTP 서버에서 새로 지원되는 기능으로, 모든 사용자 격리 로직이나 시작 폴더 로직을 간단하게 무효화시킵니다.

      • User name directory
        • 이 옵션은 현재 로그인한 사용자의 이름과 동일한 이름의 물리적 디렉터리나 가상 디렉터리가 존재하는 경우 해당 폴더에서 모든 FTP 세션이 시작되도록 지정합니다. 만약, 동일한 이름의 물리적 또는 가상 디렉터리가 존재하지 않으면 FTP 사이트의 루트 디렉터리에서 FTP 세션이 시작됩니다.

          노트: 이 옵션은 IIS 6.0 FTP 서버의 "사용자를 격리하지 않음" 모드와 동일합니다. 이 모드에 대한 추가적인 정보는, Hosting Multiple FTP Sites with FTP User Isolation (IIS 6.0) 토픽의 "Do Not Isolate Users Mode" 섹션을 참고하시기 바랍니다.

    • Isolate users. Restrict users to the following directory:
      • User name directory (disable global virtual directories)
        • 이 옵션은 FTP 사용자 계정의 이름과 동일한 물리적 디렉터리나 가상 디렉터리에 FTP 사용자 세션을 격리하고자 할 때 사용합니다. 사용자는 오직 자신의 FTP 루트만 읽거나 사용할 수 있으며, 물리적 디렉터리나 가상 디렉터리 트리의 상위 경로로 이동이 불가능합니다. 만약, 전역 가상 디렉터리가 존재한다 하더라도 모두 무시됩니다.

          노트: 이 옵션은 이 버전의 FTP 서버에서 새로 지원되는 기능입니다.

      • User name physical directory (enable global virtual directories)
        • 이 옵션은 FTP 사용자 계정의 이름과 동일한 물리적 디렉터리에 FTP 사용자 세션을 격리하고자 할 때 사용합니다. 사용자는 오직 자신의 FTP 루트만 보고 사용할 수 있으며, 물리적 디렉터리 트리의 상위 경로로 이동이 불가능합니다. 만약, 전역 가상 디렉터리가 존재하는 경우 모든 사용자에게 전역 가상 디렉터리가 적용됩니다.

          노트: 이 옵션은 IIS 6.0 FTP 서버의 "사용자 격리" 모드와 동일합니다.

      • FTP home directory configured in Active Directory
        • 이 옵션은 각각의 FTP 사용자의 Active Directory 계정 설정에 지정된 홈 디렉터리에 FTP 사용자 세션을 격리하고자 할 때 사용합니다.

          노트: 이 옵션은 IIS 6.0 FTP 서버의 "Active Directory 를 사용하여 사용자 격리" 모드와 동일합니다. 이 모드에 대한 추가적인 정보는, Hosting Multiple FTP Sites with FTP User Isolation (IIS 6.0) 토픽의 "Isolate Users Using Active Directory Mode" 섹션을 참고하시기 바랍니다.

단계 3: 물리적 디렉터리에 의한 사용자 격리 설정 구성하기

물리적 디렉터리에 의한 사용자 격리를 설정하면, 모든 FTP 사용자 세션은 FTP 사용자 계정의 이름과 동일한 물리적 디렉터리로 접근이 제한됩니다. 그러나, 전역 가상 디렉터리가 존재하는 경우, 모든 사용자에게 전역 가상 디렉터리가 나타납니다.

  1. 인터넷 정보 서비스 관리자를 실행하고 단계 1에서 만든 FTP 사이트 노드를 클릭합니다. 그러면, 모든 FTP 기능 아이콘들이 출력됩니다.
  2. FTP User Isolation 아이콘을 더블 클릭해서 FTP User Isolation 기능을 엽니다.
  3. FTP User Isolation 기능 페이지가 나타나면, User name physical directory (enable global virtual directories) 옵션을 선택하고, Actions 패인의 Apply 링크를 클릭합니다.

FTP 사이트에 로그인하기

이제 사용자 격리가 설정된 FTP 사이트에 로그인 할 수 있습니다. 그러나, 다음과 같은 사항들이 적용됩니다:

  • FTP 사이트에 익명 사용자로 로그인하면 필수조건 섹션에서 생성했던 "LocalUser\Public" 폴더로만 접근이 제한됩니다.
  • FTP 사이트에 로컬 관리자로 로그인하면 로그인 요청은 거부됩니다. 그 이유는 로컬 관리자의 홈 디렉터리가 정의되지 않았기 때문입니다. 로컬 관리자가 로그인 할 수 있으려면 로컬 관리자 계정의 홈 디렉터리인 "%SystemDrive%\inetpub\ftproot\LocalUser\Administrator" 폴더를 생성해야 합니다. 그런 다음, 로컬 관리자 계정으로 FTP 사이트에 로그인하면 방금 생성한 "LocalUser\Administrator" 폴더로 접근이 제한됩니다.

요약

이번 단계에서 살펴본 내용들을 정리해보면, User name physical directory (enable global virtual directories) 옵션을 사용해서 FTP 사용자 격리를 구성해 봤습니다. 이 사용자 격리 모드에서 모든 FTP 사용자 세션은 FTP 사용자 계정의 이름과 동일한 물리적 디렉터리로 접근이 제한되고, 전역 가상 디렉터리는 모든 사용자에게 제공됩니다.

각각의 사용자들을 위한 홈 디렉터리를 생성하려면, FTP 서버의 루트 디렉터리 하위에 도메인 이름이나 로컬 사용자를 위한 LocalUser라는 이름의 물리적 디렉터리를 먼저 생성해야 합니다. 그리고, 이 디렉터리 하위에 FTP 서버에 접속하는 각각의 사용자 계정을 위한 물리적 디렉터리를 생성해야 합니다. 다음 표는 FTP 서비스의 인증 제공자가 인식할 수 있는 홈 디렉터리 문법을 보여줍니다:

사용자 계정 유형 물리적 홈 디렉터리 문법
익명 사용자 %FtpRoot%\LocalUser\Public
로컬 Windows 사용자 계정 (기본 인증 필수) %FtpRoot%\LocalUser\%UserName%
Windows 도메인 계정 (기본 인증 필수) %FtpRoot%\%UserDomain%\%UserName%
IIS 관리자 또는 ASP.NET 사용자 정의 인증 사용자 계정 %FtpRoot%\LocalUser\%UserName%

노트: 이 표에서 %FtpRoot%는 FTP 사이트의 루트 디렉터리를 의미합니다. 가령, C:\Inetpub\Ftproot 등을 의미합니다.

중요: 이 옵션에서는 전역 가상 디렉터리들이 활성화됩니다. 적절한 권한이 존재하는 경우 FTP 사이트의 루트-레벨에 설정된 모든 가상 디렉터리에 모든 FTP 사용자들이 접근할 수 있습니다.

단계 4: 모든 디렉터리 유형에 대한 사용자 격리 설정 구성하기

모든 디렉터리 유형에 대한 사용자 격리를 설정하면, FTP 사용자 세션은 FTP 사용자 계정의 이름과 동일한 물리적 또는 가상 디렉터리로 접근이 제한되며, 전역 가상 디렉터리들도 무시됩니다. 이번 단계에서는 모든 디렉터리 유형에 대한 사용자 격리를 설정해보고, 로컬 관리자를 위한 가상 디렉터리를 추가해 볼 것입니다.

  1. 인터넷 정보 서비스 관리자를 실행하고 단계 1에서 만든 FTP 사이트 노드를 클릭합니다. 그러면, 모든 FTP 기능 아이콘들이 출력됩니다.
  2. FTP User Isolation 아이콘을 더블 클릭하여 FTP User Isolation 기능을 엽니다.
  3. FTP User Isolation 기능 페이지가 나타나면, User name directory (disable global virtual directories) 옵션을 선택하고, Actions 패인의 Apply 링크를 클릭합니다.
  4. FTP 사이트의 트리 노드를 확장하고, LocalUser 폴더를 마우스 오른쪽 버튼으로 클릭한 다음 Add Virtual Directory 메뉴를 클릭합니다.

    노트: 이 예제에서 "LocalUser" 폴더는 물리적 디렉터리지만 가상 디렉터리도 사용이 가능합니다.

  5. Add Virtual Directory 대화 상자가 나타나면
    1. Alias 텍스트 박스에 "administrator"를 입력합니다.
    2. Physical path 텍스트 박스에 "%SystemDrive%\inetpub\adminfiles"를 입력합니다.
    3. 모든 작업을 마쳤으면 OK 를 클릭합니다.

FTP 사이트에 로그인하기

이제 사용자 격리가 설정된 FTP 사이트에 로그인 할 수 있습니다. 그러나, 다음과 같은 사항들이 적용됩니다:

  • 단계 3과 동일하게 FTP 사이트에 익명 사용자로 로그인하면 FTP 세션은 필수조건 섹션에서 미리 생성했던 "LocalUser\Public" 폴더로만 접근이 제한됩니다.
  • FTP 사이트에 로컬 관리자로 로그인하면 세션은 방금 생성한 "/LocalUser/administrator" 가상 디렉터리로만 접근이 제한됩니다.

요약

이번 단계에서 살펴본 내용들을 정리해보면, User name directory (disable global virtual directories) 옵션을 사용해서 FTP 사용자 격리를 구성해봤습니다. 이 사용자 격리 모드에서 모든 FTP 사용자 세션은 FTP 사용자 계정의 이름과 동일한 물리적 디렉터리나 가상 디렉터리로 접근이 제한되고 생성된 전역 가상 디렉터리는 무시됩니다.

각각의 사용자들을 위한 홈 디렉터리를 생성하려면, FTP 서버의 루트 디렉터리 하위에 도메인 이름이나 로컬 사용자를 위한 LocalUser라는 이름의 물리적 디렉터리를 먼저 생성해야만 합니다. 그리고 이 디렉터리 하위에 FTP 서버에 접속하는 각각의 사용자 계정을 위한 물리적 디렉터리나 가상 디렉터리를 생성해야 합니다. 다음 표는 FTP 서비스의 인증 제공자가 인식할 수 있는 홈 디렉터리 문법을 보여줍니다:

사용자 계정 유형 물리적 홈 디렉터리 문법
익명 사용자 %FtpRoot%\LocalUser\Public
로컬 Windows 사용자 계정 (기본 인증 필수) %FtpRoot%\LocalUser\%UserName%
Windows 도메인 계정 (기본 인증 필수) %FtpRoot%\%UserDomain%\%UserName%
IIS 관리자 또는 ASP.NET 사용자 정의 인증 사용자 계정 %FtpRoot%\LocalUser\%UserName%

노트: 이 표에서 %FtpRoot%는 FTP 사이트의 루트 디렉터리를 의미합니다. 가령, C:\Inetpub\Ftproot 등을 의미합니다.

중요: 이 옵션에서 전역 가상 디렉터리는 무시되며 모든 FTP 사용자가 루트-레벨에 설정된 가상 디렉터리에 접근할 수 없습니다. 모든 가상 디렉터리는 반드시 사용자의 물리적 디렉터리나 가상 디렉터리 경로 하위에 명시적으로 정의되어야만 합니다.

IIS 구성 설정 파일을 편집하여 FTP 사용자 격리 설정하기

직접 IIS 구성 설정 파일을 편집해서 새로운 FTP 서비스의 사용자 격리를 설정할 수도 있습니다. 다음의 단계들에서는 각각의 다른 사용자 격리 모드를 설정하기 위해 필요한 전체 과정을 보여줍니다.

  1. 메모장 등의 텍스트 편집기를 사용해서 %SystemRoot%\System32\inetsrv\config 폴더에 존재하는 applicationHost.config 파일을 엽니다.
  2. <sites> 섹션으로 이동합니다. 이 섹션에는 여러분들의 기본 웹 사이트에 대한 설정이 포함되어 있으며, 대부분 다음과 같은 내용으로 구성되어 있을 것입니다:
    <sites>
        <site name="Default Web Site" id="1">
            <application path="/">
                <virtualDirectory path="/" physicalPath="%SystemDrive%\inetpub\wwwroot" />
            </application>
            <bindings>
                <binding protocol="http" bindingInformation="*:80:" />
            </bindings>
        </site>
  3. 기본 웹 사이트에 대한 전체 섹션을 복사해서 </site> 태그 바로 다음 줄에 붙여 넣습니다.
  4. 새로운 FTP 사이트를 생성하기 위해서 붙여 넣은 사이트 섹션의 설정을 변경합니다:
    • name과 id 속성을 각각 "Default FTP Site"와 "2"로 수정합니다.

      노트: 만약, 다른 사이트에서 이미 사이트 식별자로 "2"를 사용하고 있다면 사이트 ID를 "2" 이외의 다른 번호로 지정해야 할 수도 있습니다. *

    • binding 요소의 protocol 속성값을 "ftp"로 수정합니다.
    • physicalPath 속성을 "%SystemDrive%\inetpub\ftproot"로 변경합니다.
    • bindingInformation 속성의 port 값을 "21"로 변경합니다.
  5. 닫기 bindings 태그 바로 아래에 인증과 사용자 격리 설정을 위한 <ftpServer> 섹션을 추가합니다.
    <ftpServer>
        <security>
            <authentication>
                <anonymousAuthentication enabled="true" userName="IUSR" />
                <basicAuthentication enabled="true" />
            </authentication>
        </security>
        <userIsolation mode="None" />
    </ftpServer>

    노트: URL 기반으로 구성되는 웹 사이트의 인증과는 달리 FTP 사이트의 인증 설정은 사이트 기반으로 구성됩니다.

  6. 이제 여러분들의 <sites> 섹션은 다음과 비슷하게 구성되어 있을 것입니다:
    <sites>
        <site name="Default Web Site" id="1">
            <application path="/">
                <virtualDirectory path="/" physicalPath="%SystemDrive%\inetpub\wwwroot" />
            </application>
            <bindings>
                <binding protocol="http" bindingInformation="*:80:" />
            </bindings>
        </site>
        <site name="Default FTP Site" id="2">
            <application path="/">
                <virtualDirectory path="/" physicalPath="%SystemDrive%\inetpub\ftproot" />
            </application>
            <bindings>
                <binding protocol="ftp" bindingInformation="*:21:" />
            </bindings>
            <ftpServer>
                <security>
                    <authentication>
                        <anonymousAuthentication enabled="true" userName="IUSR" />
                        <basicAuthentication enabled="true" />
                    </authentication>
                </security>
                <userIsolation mode="None" />
            </ftpServer>
        </site>
  7. 이제 applicationHost.config 파일의 가장 마지막 부분으로 이동하여 기본 FTP 사이트의 권한을 설정하기 위한 <location> 섹션을 추가합니다.
    <location path="Default FTP Site">
        <system.ftpServer>
            <security>
                <authorization>
                    <add accessType="Allow" users="*" permissions="Read" />
                    <add accessType="Allow" users="administrator" permissions="Read, Write" />
                </authorization>
            </security>
        </system.ftpServer>
    </location>

    노트: 이 예제에서 볼 수 있는 것처럼 FTP 사이트에 대한 권한 설정은 URL 기반으로 구성됩니다. 여기에서는 모든 사용자들에게 읽기 권한을 허용하고, 관리자 계정에게 읽기/쓰기 권한을 허용하고 있습니다.

  8. applicationHost.config 파일을 저장합니다.

단계 1: 사용자의 홈 디렉터리에서 시작하기

각각의 사용자들이 자신의 홈 디렉터리에서 시작하도록 사용자 격리를 구성합니다:

  1. 로컬 관리자의 홈 디렉터리를 지정하기 위해서 "%SystemDrive%\inetpub\ftproot\administrator" 폴더를 생성합니다.
  2. 먼저, userIsolation 요소의 mode 속성의 값을 "StartInUsersDirectory"로 지정합니다. 그러면 여러분들의 userIsolation 요소는 다음 예제와 비슷하게 되어 있을 것입니다.
    <site name="Default FTP Site" id="2">
        <application path="/">
            <virtualDirectory path="/" physicalPath="%SystemDrive%\inetpub\ftproot" />
        </application>
        <bindings>
            <binding protocol="ftp" bindingInformation="*:21:" />
        </bindings>
        <ftpServer>
            <security>
                <authentication>
                    <anonymousAuthentication enabled="true" userName="IUSR" />
                    <basicAuthentication enabled="true" />
                </authentication>
            </security>
            <userIsolation mode="StartInUsersDirectory" />
        </ftpServer>
    </site>

    노트: 만약 사용자 디렉터리가 존재하지 않으면, 사용자 세션은 FTP 사이트의 루트 폴더에서 시작됩니다. 이 예제에서는 "%SystemDrive%\inetpub\ftproot" 폴더가 이에 해당됩니다. 사용자의 홈 디렉터리가 존재하더라도 사용자는 여전히 FTP 사이트의 루트 폴더로 이동할 수 있습니다.

  3. applicationHost.config 파일을 저장합니다.
  4. FTP 사이트에 로그인을 하면:
    • 로컬 관리자 계정으로 FTP 사이트에 로그인하면 방금 생성한 administrator 폴더에서 시작됩니다.
    • 익명 사용자로 FTP 사이트에 로그인하면 FTP 사이트의 루트 폴더에서 시작됩니다. 익명 사용자를 위한 홈 디렉터리를 지정하려면 "%SystemDrive%\inetpub\ftproot\anonymous" 폴더를 생성하십시오. 그 뒤에 다시 익명 사용자로 FTP 사이트에 로그인하면 이번에는 방금 생성한 anonymous 폴더에서 세션이 시작됩니다.

단계 2: 루트 디렉터리에 대한 사용자 격리

이번 단계에서는 모든 사용자를 각 사용자에 대해 생성된 물리적 폴더로만 접근을 제한하는 "IsolateRootDirectoryOnly" 사용자 격리 모드를 설정하는 방법에 대해서 살펴봅니다. "IsolateRootDirectoryOnly" 사용자 격리 모드를 설정하기 위해서는:

  1. 익명 사용자를 위한 "%SystemDrive%\inetpub\ftproot\LocalUser\Public" 폴더를 생성합니다.
  2. 그리고, userIsolation 요소의 mode 속성의 값을 "IsolateRootDirectoryOnly"로 지정합니다. 이제 userIsolation 요소는 다음 예제와 비슷하게 되어 있을 것입니다.
    <site name="Default FTP Site" id="2">
        <application path="/">
            <virtualDirectory path="/" physicalPath="%SystemDrive%\inetpub\ftproot" />
        </application>
        <bindings>
            <binding protocol="ftp" bindingInformation="*:21:" />
        </bindings>
        <ftpServer>
            <security>
                <authentication>
                    <anonymousAuthentication enabled="true" userName="IUSR" />
                    <basicAuthentication enabled="true" />
                </authentication>
            </security>
            <userIsolation mode="IsolateRootDirectoryOnly" />
        </ftpServer>
    </site>

    노트: 만약, 사용자의 홈 디렉터리가 존재하지 않으면 그 사용자는 로그인이 불가능합니다. 로그인 한 뒤에도 사용자는 자신의 홈 디렉터리로만 제한되고 FTP 사이트의 루트 디렉터리로 이동할 수도 없습니다.

  3. applicationHost.config 파일을 저장합니다.
  4. FTP 사이트에 로그인을 하면
    • 익명 사용자로 FTP 사이트에 로그인하면 방금 생성한 "LocalUser\Public" 폴더에서 시작됩니다.
    • 로컬 관리자로 FTP 사이트에 로그인하면 홈 디렉터리가 존재하지 않기 때문에 로그인이 거부됩니다. 로컬 관리자가 로그인할 수 있게 하려면:
      • 로컬 관리자 계정의 홈 디렉터리인 "%SystemDrive%\inetpub\ftproot\LocalUser\Administrator" 폴더를 생성합니다.
      • 다시 로컬 관리자로 FTP 사이트에 로그인하면 방금 생성한 "LocalUser\Administrator" 폴더로 접근이 제한됩니다.

    노트: FTP 사이트에서 로그아웃 한 뒤, "%SystemDrive%\inetpub\ftproot\LocalUser\Administrator" 폴더를 삭제하십시오.

단계 3: 모든 유형의 디렉터디에 대한 사용자 격리

이번에는 모든 사용자의 세션을 각 사용자별로 생성된 가상 디렉터리나 물리적 폴더로만 접근을 제한하는 "IsolateAllDirectories" 사용자 격리 모드를 설정하는 방법에 대해서 살펴봅니다. "IsolateAllDirectories" 사용자 격리 모드를 설정하기 위해서는:

  1. 로컬 관리자의 홈 디렉터리를 지정하기 위해서 "%SystemDrive%\inetpub\ftproot\administrator" 폴더를 생성합니다.
  2. userIsolation 요소의 mode 속성의 값을 "IsolateAllDirectories"로 지정합니다.
  3. application 섹션에 방금 생성한 "%SystemDrive%\inetpub\adminfiles" 폴더를 가르키는 "/LocalUser/administrator" 가상 디렉터리를 추가합니다.
  4. 그러면 여러분들의 userIsolation 요소는 다음 예제와 비슷하게 되어 있을 것입니다.
    <site name="Default FTP Site" id="2">
        <application path="/">
            <virtualDirectory path="/" physicalPath="%SystemDrive%\inetpub\ftproot" />
            <virtualDirectory path="/LocalUser/administrator" 
                                       physicalPath="%SystemDrive%\inetpub\adminfiles" />
        </application>
        <bindings>
            <binding protocol="ftp" bindingInformation="*:21:" />
        </bindings>
        <ftpServer>
            <security>
                <authentication>
                    <anonymousAuthentication enabled="true" userName="IUSR" />
                    <basicAuthentication enabled="true" />
                </authentication>
            </security>
            <userIsolation mode="IsolateAllDirectories" />
        </ftpServer>
    </site>

    노트: 사용자의 가상 디렉터리나 물리적 디렉터리가 존재하지 않으면 그 사용자는 로그인이 불가능합니다. 로그인 한 뒤에는 사용자는 자신의 홈 디렉터리로만 접근이 제한되고 FTP 사이트의 루트 디렉터리로 이동할 수도 없습니다.

  5. applicationHost.config 파일을 저장합니다.
  6. FTP 사이트에 로그인을 하면:
    • 익명 사용자로 FTP 사이트에 로그인하면 "IsolateRootDirectoryOnly" 사용자 격리를 설정할 때 생성한 "LocalUser\Public" 폴더로 접근이 제한됩니다.
    • 로컬 관리자로 FTP 사이트에 로그인하면 방금 생성한 "/LocalUser/administrator" 가상 디렉터리로 접근이 제한됩니다.

요약

이번 단계에서는 IIS 구성 설정 파일을 직접 편집해서 FTP 사용자 격리를 설정했습니다. 이번 단계에서 살펴본 내용들을 다시 정리해보면:

  • 기본 웹 사이트를 템플릿으로 삼아 새로운 FTP 사이트를 생성했습니다.
  • 다음과 같이 FTP 사이트에 대한 권한 규칙을 구성했습니다:
    • 모든 사용자는 읽기 권한을 갖고 있습니다.
    • 관리자 계정은 읽기/쓰기 권한을 갖고 있습니다.
  • 다음과 같은 세 가지 사용자 격리 모드를 설정했습니다:
    • 사용자의 홈 디렉터리에서 시작
    • 루트 디렉터리에 대한 사용자 격리
    • 모든 유형의 디렉터디에 대한 사용자 격리

* 사이트 ID에 대한 보다 상세한 개념은 이 문서에서 설명하고 있는 사이트 인덱스의 개념을 참고하시기 바랍니다.