Настраиваем FTP из командной строки (IIS)

в 6:04, , рубрики: iis, системное администрирование

Продолжая изучение командной строки IIS, начатое тут, предлагаю ознакомится с тем как в IIS можно настроить FTP.
Начиная с версии 7, в IIS появился ftp сервер. И теперь можно создавать, настраивать, и пользоваться FTP службами точно так же, как это можно делать с веб-сайтами. А раз так, то и средством для автоматизации создания FTP сервера будет средство командной строки — AppCmd, входящее в состав поставки IIS.

Устанавливаем FTP

Для начала нужно установит необходимые компоненты. Предположим что у нас уже есть предустановленный IIS и нам не хватает только служб FTP. Воспользуемся диспетчером пакетов pkgmgr:

pkgmgr /iu:IIS-FTPServer;IIS-FTPSvc;IIS-FTPExtensibility;

Настраиваем FTP

Теперь IIS готов к настройке первого FTP. Что бы воспользоваться AppCmd надо использовать полный путь до команды: %windir%system32inetsrvappcmd.exe, или же прописать путь в переменную окружения PATH. Нам же будет достаточно запускать appcmd прямо из ее каталога:

cd %windir%system32inetsrv 
set ftproot=%systemdrive%inetpubftproot
set ftpsite=MyFtp
if not exist "%ftproot%" (mkdir "%ftproot%") 
appcmd add site /name:%ftpsite% /bindings:ftp://*:21 /physicalpath:"%ftproot%" 
appcmd set config -section:system.applicationHost/sites /[name='%ftpsite%'].ftpServer.security.authentication.AnonimouseAuthentication.enabled:true 
appcmd set config -section:system.applicationHost/sites /[name='%ftpsite%'].ftpServer.security.ssl.controlChannelPolicy:"SslAllow" 
appcmd set config -section:system.applicationHost/sites /[name='%ftpsite%'].ftpServer.security.ssl.dataChannelPolicy:"SslAllow" 
appcmd set config -section:system.applicationHost/sites /[name='%ftpsite%'].ftpServer.directoryBrowse.showFlags:DisplayVirtualDirectories 
appcmd set config -section:system.applicationHost/sites /[name='%ftpsite%'].ftpServer.userIsolation.mode:StartInUsersDirectory 
appcmd set config %ftpsite% /section:system.ftpserver/security/authorization /+[accessType='Allow',permissions='Read',roles='',users='*'] /commit:apphost

Этот скрипт создаст папку inetpubftproot на системном диске, и привяжет ее к корневой папке нашего сайта «MyFtp». Так же мы настроили наш сайт на использование анонимной аутентификации. И перевели SSL в режим allow (по умолчанию он require). Последней строчкой мы раздали права на чтение всем пользователям. Теперь нам осталось добавить виртуальных папок нашему сайту и можно пользоваться, а параметр showFlags:DisplayVirtualDirectories позволит видеть не только корневой каталог, но и виртуальные каталоги тоже.
И так, добавляем каталоги:

appcmd add vdir /app.name:"%ftpsite%/" /path:/path1 /physicalPath:D:path1
appcmd add vdir /app.name:"%ftpsite%/" /path:/path2 /physicalPath:\MEDIASERVERpath2

Проверяем

Для проверки тоже воспользуемся командной строкой и командой ftp:

c:UsersUser>ftp server
Connected to SERVER.domain.corp.
220 Microsoft FTP Service
User (SERVER.domain.corp:(none)): anonymous
331 Anonymous access allowed, send identity (e-mail name) as password.
Password:
230-User logged in.
 Win32 error:   The operation completed successfully.
 Error details: File system returned an error.
230 End
ftp> dir
200 EPRT command successful.
125 Data connection already open; Transfer starting.
06-01-12  04:33PM       <DIR>          path1
06-01-12  04:33PM       <DIR>          path2
226 Transfer complete.
ftp: 93 bytes received in 0,00Seconds 93000,00Kbytes/sec.
ftp>

Почему не PowerShell

Для того что бы написать скрипт для powershell потребуется небольшие косметические изменения.
Так для того что бы установить сервисы FTP надо выполнить:

Add-WindowsFeature Web-Ftp-Server,Web-Ftp-Service,Web-Ftp-Ext

Что бы создать FTP-сайт:

$ftproot="$env:systemdriveinetpubftproot"
$ftpsite="MyFtp"
if (-not (test-path $ftproot)){ new-item -path $ftproot -type directory }
new-item -path IIS:/sites/$ftpsite -type site -bindings @{protocol='ftp';bindingInformation=':21:'} -physicalpath:$ftproot

Аналогично можно добавить виртуальные каталоги:

new-item -path IIS:/sites/$ftpsite/path1 -type virtualdirectory -physicalpath d:share

А вот про работу с конфигурацией внятных решения я не нашел. Все что нашел тут и тут. Последнее меня не вдохновило в свете того что некоторые изменения надо вносить на уровне APPHOST.
Так что если будут предложения и замечания — всегда пожалуйста. С удовольствием дополню.

Автор: xSus

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js