관리 코드(C#)를 사용하여 간단한 FTP 홈 디렉터리 공급자를 만드는 방법

작성자: 로버트 맥머레이

Microsoft는 Windows Server® 2008용으로 완전히 다시 작성된 새 FTP 서비스를 만들었습니다. 이 새로운 FTP 서비스는 웹 작성자가 이전보다 더 쉽게 콘텐츠를 게시할 수 있는 많은 새로운 기능을 통합하고 웹 관리자에게 더 많은 보안 및 배포 옵션을 제공합니다.

새 FTP 7.5 서비스는 FTP 서비스에 포함된 기본 제공 기능을 확장할 수 있는 확장성을 지원합니다. 특히 FTP 7.5는 사용자 고유의 인증 및 권한 부여 공급자 만들기를 지원합니다. 사용자 지정 FTP 로깅 및 FTP 사용자의 홈 디렉터리 정보를 결정하는 공급자를 만들 수도 있습니다.

이 연습에서는 관리 코드를 사용하여 간단한 FTP 홈 디렉터리 공급자를 만드는 단계를 안내합니다.

필수 조건

이 문서의 절차를 완료하려면 다음 항목이 필요합니다.

  1. IIS 7.0 이상은 Windows Server 2008 서버에 설치해야 하며 IIS(인터넷 정보 서비스) 관리자도 설치해야 합니다.

  2. 새 FTP 7.5 서비스를 설치해야 합니다.

  3. FTP 게시를 위한 루트 폴더를 만들어야 합니다.

  4. Visual Studio 2008을 사용해야 합니다.

    참고 항목

    이전 버전의 Visual Studio를 사용하는 경우 이 연습의 일부 단계가 올바르지 않을 수 있습니다.

  5. 각 사용자에 대한 홈 디렉터리를 만들어야 합니다. 코드 샘플에서 사용 C:\Ftpusers\%*UserName*%하지만 필요에 따라 변경할 수 있습니다.

1단계: 프로젝트 환경 설정

이 단계에서는 데모 공급자용 Visual Studio 2008에서 프로젝트를 만듭니다.

  1. Microsoft Visual Studio 2008을 엽니다.

  2. [파일] 메뉴를 클릭한 다음 [새로 만들기], [프로젝트]를 차례로 클릭합니다.

  3. 새 프로젝트 대화 상자에서 다음을 수행합니다.

    • 프로젝트 형식으로 Visual C#을 선택합니다.
    • 템플릿으로 클래스 라이브러리를 선택합니다.
    • 프로젝트의 이름으로 FtpHomeDirectoryDemo를 입력합니다.
    • 확인을 클릭합니다.
  4. 프로젝트가 열리면 FTP 확장성 라이브러리에 참조 경로를 추가합니다.

    • 프로젝트를 클릭한 다음 FtpHomeDirectoryDemo 속성을 클릭합니다.

    • 참조 경로 탭을 클릭합니다.

    • Windows 버전에 대한 FTP 확장성 어셈블리 경로를 입력합니다. 여기서 C: 운영 체제 드라이브는 다음과 같습니다.

      • Windows Server 2008 및 Windows Vista의 경우: C:\Windows\assembly\GAC\_MSIL\Microsoft.Web.FtpServer\7.5.0.0\_\_31bf3856ad364e35
      • Windows 7의 경우: C:\Program Files\Reference Assemblies\Microsoft\IIS
    • 폴더 추가를 클릭합니다.

  5. 프로젝트에 강력한 이름 키를 추가합니다.

    • 프로젝트를 클릭한 다음 FtpHomeDirectoryDemo 속성을 클릭합니다.
    • 시그니처 탭을 클릭합니다.
    • 어셈블리 검사 서명 상자를 선택합니다.
    • 강력한 키 이름 드롭다운 상자에서 새로> 만들기를 선택합니다<.
    • 키 파일 이름으로 FtpHomeDirectoryDemoKey를 입력합니다.
    • 원하는 경우 키 파일의 암호를 입력합니다. 그렇지 않으면 암호 검사 상자로 내 키 파일 보호의 선택 취소합니다.
    • 확인을 클릭합니다.
  6. 선택 사항: 사용자 지정 빌드 이벤트를 추가하여 DLL을 개발 컴퓨터의 GAC(전역 어셈블리 캐시)에 자동으로 추가할 수 있습니다.

    • 프로젝트를 클릭한 다음 FtpHomeDirectoryDemo 속성을 클릭합니다.

    • 빌드 이벤트 탭을 클릭합니다.

    • 빌드 후 이벤트 명령줄 대화 상자에 다음을 입력합니다.

      net stop ftpsvc
      call "%VS90COMNTOOLS%\vsvars32.bat">null
      gacutil.exe /if "$(TargetPath)"
      net start ftpsvc
      
  7. 프로젝트를 저장합니다.

2단계: 확장성 클래스 만들기

이 단계에서는 데모 공급자에 대한 확장성 인터페이스를 구현합니다.

  1. 프로젝트의 FTP 확장성 라이브러리에 대한 참조를 추가합니다.

    • 프로젝트를 클릭한 다음 참조 추가를 클릭합니다.
    • .NET 탭에서 Microsoft.Web.FtpServer를 클릭합니다.
    • 확인을 클릭합니다.
  2. 프로젝트에 대한 System.Web에 대한 참조를 추가합니다.

    • 프로젝트를 클릭한 다음 참조 추가를 클릭합니다.
    • .NET 탭에서 System.Web을 클릭합니다.
    • 확인을 클릭합니다.
  3. 인증 클래스에 대한 코드를 추가합니다.

    • 솔루션 탐색기 Class1.cs 파일을 두 번 클릭합니다.

    • 기존 코드를 제거합니다.

    • 다음 코드를 편집기에 붙여 넣습니다.

      using System;
      using Microsoft.Web.FtpServer;
       
      namespace FtpHomeDirectory
      {
          public class FtpHomeDirDemo : BaseProvider,
              IFtpHomeDirectoryProvider
          {
              string IFtpHomeDirectoryProvider.GetUserHomeDirectoryData(
                  string sessionId,
                  string siteName,
                  string userName)
              {
                  // Note: You would add your own custom logic here.
                  // Return the user's home directory based on their user name.
                  return @"C:\Ftpusers\" + userName;
              }
          }
      }
      
  4. 프로젝트를 저장하고 컴파일합니다.

참고 항목

선택적 단계를 사용하여 GAC에 어셈블리를 등록하지 않은 경우 수동으로 어셈블리를 IIS 컴퓨터에 복사하고 Gacutil.exe 도구를 사용하여 GAC에 어셈블리를 추가해야 합니다. 자세한 내용은 Gacutil.exe(전역 어셈블리 캐시 도구) 문서를 참조하세요.

3단계: FTP에 홈 디렉터리 공급자 추가

이 단계에서는 FTP 서비스 및 기본 웹 사이트에 데모 공급자를 추가합니다.

  1. 확장성 공급자에 대한 어셈블리 정보를 확인합니다.

    • Windows 탐색기에서 C: 운영 체제 드라이브인 경로를 엽니다 C:\Windows\assembly .
    • FtpHomeDirectoryDemo 어셈블리를 찾습니다.
    • 어셈블리를 마우스 오른쪽 단추로 클릭한 다음 속성을 클릭합니다.
    • 문화권 값을 복사합니다(예: 중립).
    • 버전 번호(예: 1.0.0.0)를 복사합니다.
    • 공개 키 토큰 값을 복사합니다(예: 426f62526f636b73).
    • 취소를 클릭합니다.
  2. 확장성 공급자를 FTP 공급자의 전역 목록에 추가합니다.

    • IIS(인터넷 정보 서비스) 관리자를 엽니다.

    • 커넥트 창에서 컴퓨터 이름을 클릭합니다.

    • 기본 창에서 FTP 인증을 두 번 클릭합니다.

    • 작업 창에서 사용자 지정 공급자클릭합니다.

    • 등록을 클릭합니다.

    • 공급자 이름에 FtpHomeDirectoryDemo를 입력합니다.

    • 관리되는 공급자(.NET)를 클릭합니다.

    • 이전에 복사한 정보를 사용하여 확장성 공급자에 대한 어셈블리 정보를 입력합니다. 예시:

      FtpHomeDirectory.FtpHomeDirDemo,FtpHomeDirectoryDemo,version=1.0.0.0,Culture=neutral,PublicKeyToken=426f62526f636b73
      
    • 확인을 클릭합니다.

    • 공급자 목록에서 FtpHomeDirectoryDemo 검사 상자를 지웁니다.

    • 확인을 클릭합니다.

  3. 사이트에 사용자 지정 공급자를 추가합니다.

    • 현재 사이트에 사용자 지정 기능을 추가할 수 있는 UI가 없으므로 다음 명령줄을 사용해야 합니다.

      AppCmd set site "Default Web Site" /+ftpServer.customFeatures.providers.[name='FtpHomeDirectoryDemo',enabled='true']
      
  4. 사용자 지정 공급자를 사용하도록 사용자 격리를 구성합니다.

    • 현재 사용자 격리에 대한 사용자 지정 기능을 지정할 수 있는 UI가 없으므로 다음 명령줄을 사용해야 합니다.

      AppCmd set site "Default Web Site" /ftpServer.userIsolation.mode:Custom
      

요약

이 연습에서는 다음을 실행하는 방법을 알아보았습니다.

  • 사용자 지정 FTP 홈 디렉터리 공급자를 위한 프로젝트를 Visual Studio 2008에서 만듭니다.
  • 사용자 지정 FTP 홈 디렉터리 조회에 대한 확장성 인터페이스를 구현합니다.
  • FTP 서비스에 사용자 지정 홈 디렉터리 공급자를 추가합니다.

사용자가 FTP 사이트에 연결할 때 FTP 서비스는 각 사용자의 홈 디렉터리를 데모 공급자에 지정한 경로로 설정합니다.