FTP를 통해 데이터를 제공해야 하거나, 서비스를 이용할 때, 항상 Windows에서 계정을 생성하고, 이를 통해 사용자는 로그온을 해야 했었습니다. 종종 FTP를 통해 접근해야 할 사용자가 실제 Windows 계정 정보까지는 가질 필요가 없는데, 이를 부여해준다는 게 찜찜하셨을 수 있습니다.

Windows Server 2008의 IIS 7에 추가할 수 있는 IIS 7용 FTP를 이용하여, IIS 내에서 계정을 생성하고 이를 통해 서비스를 제공할 수 있습니다. 영어로 표기하자면 Non-Windows Authentication이라고 표현해야 하겠습니다.

Windows Server 2008 RC0용 FTP for IIS 7.0의 패키지는 아래에서 다운로드하셔서 설치하실 수 있습니다. 참고로 기존의 IIS 6.0 스타일의 FTP가 설치되어져 있다면, 설치시 에러가 발생합니다.

FTP for IIS 7.0 (x64)

FTP for IIS 7.0 (x86)

인증 확장을 위해서, Network Service 계정은 COM 프로세스를 사용합니다. 이를 위해 Network Service 계정에 대해서 몇가지 권한을 부여할 필요가 있습니다.

1. IIS Config 폴더에 Read 권한을 부여해야 합니다.
- 명령어 프롬프트에서 CACLS "%SystemDrive%\Windows\System32\Inetsrv\Config" /T /G "Network Service":R /E

2. "Temporary ASP.NET Files" 폴더에 Change 권한을 부여해야 합니다.
- 명령어 프롬프트에서 CACLS "%SystemDrive%\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files" /G "Network Service":C /E /T (x86)
- 명령어 프롬프트에서 CACLS "%SystemDrive%\Windows\Microsoft.NET\Framework64\v2.0.50727\Temporary ASP.NET Files" /G "Network Service":C /E /T (x64)

3. 실제 서비스를 제공하는 FTP 폴더(해당 포스팅에서는 \Inetpub\ftproot 라고 하겠습니다.
- 명령어 프롬프트에서 CACLS "%SystemDrive%\inetpub\ftproot" /G "Network Service":C /T /E

위의 사항 반영을 하지 않아서, 최초 설정시 무진장 고생을 했었습니다. 자 이제 실제로 FTP 서비스의 구성을 알아보겠습니다. 많은 부분이 47편에서 작성했던 관리자 권한 설정과 유사합니다. 해당 사이트의 관리자 권한을 주는 것이 아니라, FTP Authorization을 이용하여 Read,Write를 설정할 수 있습니다.

IIS 관리 도구를 여시고, 서버 노드에서 IIS Manager Users 아이콘을 클릭합니다.

 

Add User를 이용하여 사용자를 추가합니다.

 

생성한 FTP 사이트 또는 21번 포트를 바인딩한 웹 사이트로 찾아갑니다. 그리고 FTP Authentication을 클릭합니다. Anonymous 인증과 기본 인증은 기존에 보셨던 인증 방식입니다만, 추가적으로 IISManagerAuth와 ASPNetAuth를 사용할 수 있습니다. 이는 IIS 7에서 새롭게 생긴 인증 방식이죠. 통합 파이프라인을 사용하기 때문에 이러한 방식은 FTP뿐만 아니라, 웹에서도 사용할 수 있습니다.

 

 

그 후, 이제 해당 사용자에게 권한을 부여해야겠죠? 해당 FTP 사이트에 대한 권한과, 실제 작업의 권한을 연속적으로 부여합니다.

 

 

그림을 잘 보시면, 원리는 간단합니다. 인증을 위한 권한을 부여한 후, 허가를 위한 권한은 Read만 줘서 실제는 쓰기가 불가능하게 만드는 것입니다. 이제 로그온을 해보겠습니다.

 

로그온을 할 때는 "FTP 서버의 호스트헤더 | 계정"의 형태로 입력하시면 됩니다. 사전에 FTP 사이트에 꼭 호스트 헤더를 붙여주셔야 합니다.

 

그림이 많아서 내용이 좀 길어졌습니다만, IIS 7에 관련된 세미나나 스터디를 하면 할수록 IIS 7은 정말 매력적인 것 같습니다. IIS 6에서 필요했던 기능들을 거의 대부분 수용해서 가능하게 만들어놓았으니까요 :)