Własny web server na IIS7.5 cz.3 FTP

Jak dotąd wszystkie pliki i narzędzia wgrywaliśmy „ręcznie” na serwer np. poprzez pod mapowany dysk sieciowy. W dzisiejszej części mam zamiar zaprezentować jak skonfigurować własny serwer FTP w celu bardziej przystępnego zarządzania plikami. 

Do tego celu musimy doinstalować kolejny moduł roli IISserwer FTP.

start /w ocsetup IIS-FTPServer
start /w ocsetup IIS-FTPSvc

Gdy posiadamy już doinstalowany moduł serwera FTP przechodzimy do konsoli PowerShell’a i ładujemy przystawkę WebAdministration.

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
Import-Module WebAdministration
Get-Command -pssnapin WebAdministration

Ilość możliwych podejść do skonfigurowania serwera jest niestety multum. Starałem się wybrać takie, które pozwoli raz w łatwy sposób skonfigurować serwer FTP, a dwa pokaże jak najwięcej możliwości jakie możemy zastosować.

Zanim jednak rozpoczniemy konfigurację sprawdzamy stan opublikowanych stron:

Get-Website

W naszym przypadku skupiamy się na utworzeniu do naszej domyślnej strony dowiązania protokołu FTP:

New-WebBinding -Name "Default Web Site" -IPAddress "*" -Port 21 -protocol ftp 
Get-WebBinding

Następnym krokiem będzie przygotowanie własnego certyfikatu potrzebnego do włączenia szyfrowania SSL. Niestety jeśli chodzi o obsługę certyfikatów to PowerShell jest dość ubogi, w sensie iż nie posiada on (lub przynajmniej takowej nie spotkałem) gotowej przystawki do ich obsługi. Dlatego do tego celu wykorzystamy aplikację Makecert z pakietu Windows SDK.

Najpierw jednak musimy odczytać nazwę naszego komputera.

Get-Content env:computername

Znając nazwę komputera możemy przystąpić do generowania certyfikatu

C:\makecert -r -pe -n "CN=WIN-8NA7M1SIGIS" -b 01/11/2010 -e 01/11/2012 -eku 1.3.6.1.5.5.7.3.1 -ss My -sr LocalMachine -sky exchange -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12 c:\mojcert.cer

Nie będę opisywał wykorzystanych parametrów, gdyż są one w dość przystępny sposób przedstawione na stronie MSDN wraz z przykładami. Jeśli zajdzie jednak taka potrzeba to może opiszę to kiedyś w osobnym artykule.

Sprawdzamy czy nasz certyfikat został poprawnie utworzony

dir cert:\LocalMachine\My

Następnie wypadałoby przenieść go do certyfikatów zaufanych. Niestety domyślnie w PowerShellu nie da się tego zrobić przy pomocy jednej komendy. Konieczne jest stworzenie obiektu zawierającego nasz certyfikat.

$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2("c:\mojcert.cer")

Następnie tworzymy obiekt kontenera z zaufanymi certyfikatami.

$store = New-Object System.Security.Cryptography.X509Certificates.X509Store("Root","LocalMachine")

Otwieramy kontener w trybie do odczytu i zapisu.

$store.Open([System.Security.Cryptography.X509Certificates.OpenFlags]::ReadWrite)

Dodajemy nasz certyfikat i następnie zamkamy kontener.

$store.add($cert)
$store.close()

Ostatecznie sprawdzamy czy katalog z certyfikatami zaufanymi zawiera już nasz certyfikat.

dir cert:\LocalMachine\Root

W kolejnym etapie przechodzimy do konfiguracji serwera FTP. Włanczamy tryb prostej autentykacji:

Set-WebConfiguration "/system.applicationHost/sites/site[@name='Default Web Site']/ftpServer/security/authentication/basicAuthentication" -value @{enabled="true"}

Podpinamy nasz certyfikat oraz konfigurujemy parametry połączenia SSL.

Set-WebConfiguration "/system.applicationHost/sites/site[@name='Default Web Site']/ftpServer/security/ssl" -value @{serverCertHash="B5D47FAAC51418EF381F339D4C5390E35EB97EA8";ssl128="false";controlChannelPolicy="SslRequireCredentialsOnly";dataChannelPolicy="SslAllow"}

Control Channel Policy
– Allow – Obsługiwany jest tryb SSL lecz nie jest on wymagany.
– Require – Wymagany tryb SSL.
– Require only for credentials – Tryb SSL wykorzystywany tylko do uwierzytelniania.
Data Channel Policy
– Allow – Obsługiwany jest tryb SSL lecz nie jest on wymagany.
– Require – Wymagany tryb SSL.
– Deny – Zabroniony tryb SSL

Kilka przydatnych schematów:
Brak szyfrowania chyba że uda się wynegocjować:
controlChannelPolicy=” SslAllow”;dataChannelPolicy=”SslAllow”

Szyfrowanie tylko przy uwierzytelnianiu:
controlChannelPolicy=”SslRequireCredentialsOnly”;dataChannelPolicy=”SslAllow”

Zawsze wymagane szyfrowanie:
controlChannelPolicy=”Require”;dataChannelPolicy=”Require” 

Dla celów prezentacji utworzymy lokalne konto użytkownika, które będzie przypisane do zarządzania plikami phpMyAdmina.

NET USER db P@ssw0rd /ADD

Nadajemy uprawnienia odczytu oraz zapisu w ramach naszego serwera FTP.

Add-WebConfiguration "/system.ftpServer/security/authorization" -value @{accessType="Allow";users="db";permissions="Read,Write"} -PSPath IIS:\ -location "Default Web Site"

Włączamy tryb izolacji tak aby każdy użytkownik po zalogowaniu się miał dostęp tylko do swojego katalogu domowego.

Rozróżniamy kilka trybów izolacji, ale najbardziej interesujące to:
None – nie izoluj użytkownika oraz rozpocznij w katalogu głównym
StartInUsersDirectory – nie izoluj użytkownika, lecz rozpocznij w jego katalogu domowym
IsolateRootDirectoryOnly (Isolate users name physical directory)– izoluj oraz ustaw fizyczny katalog jako katalog użytkowika. Ważne, aby katalogiem nadrzędnym wtedy był katalog localuser, np. C:\inetpub\ftproot\localuser\db
IsolateAllDirectories – (Isolate user name directory) – izoluj oraz ustaw wirtualny katalog jako katalog użytkownika, np. samo db z przekierowaniem na dowolny katalog. Również jak w/w przypadku ważne jest, aby katalogiem nadrzędnym (fizycznym lub wirtualnym) był katalog localuser.

W naszym przypadku wykorzystamy ostatnią opcję, czyli Isolate user name directory.

Set-WebConfiguration "/system.applicationHost/sites/site[@name='Default Web Site']/ftpServer/userIsolation" -value @{mode="IsolateAllDirectories"}

Tworzymy katalog wirtualny localuser i przypisujemy go np. do C:\inetpub\ftproot

New-Item IIS:\Sites\"Default Web Site"\localuser -type VirtualDirectory -physicalPath C:\inetpub\ftproot

Następnie tworzymy kolejny wirtualny katalog o nazwie takiej samej jak nazwa użytkownika, np. db i przekierowujemy go na katalog jaki chcemy obsługiwać poprzez to konto.

New-Item IIS:\Sites\"Default Web Site"\localuser\db -type VirtualDirectory -physicalPath C:\inetpub\wwwroot\phpmyadmin

Przy takiej konfiguracji będziemy wykorzystywali połączenie szyfrowane tylko podczas autoryzacji, a po zalogowaniu się na serwer będziemy mieli dostęp tylko i wyłącznie do katalogu użytkownika jakim będzie C:\inetpub\wwwroot\phpmyadmin.

W celu sprawdzenia posłużymy się darmową aplikacją WinSCP.

Ważne, aby menu Połączenie ustawić tryb pasywny.

W przeciwnym wypadku otrzymamy komunikat:

Czas minął.
Nie można odzyskiwać zawartości katalogu
Opening ASCII mode data connection.
Błąd podczas listowania katalogu ‚/’.

Po podłączeniu się do serwera widzimy jako nasz domowy katalog folder ze źródłami phpMyAdmin’a.

Źródła:
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=c17ba869-9671-4330-a63e-1fd44e0e2505&displaylang=en
http://msdn.microsoft.com/en-us/library/bfsktky3(VS.80).aspx
http://learn.iis.net/page.aspx/492
http://winscp.net/

Reklamy

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Wyloguj / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Wyloguj / Zmień )

Connecting to %s