Несмотря на то, что протоколу FTP, являющемуся одним из старейших протоколов, уже исполнилось больше 40 лет, он продолжает использоваться повсеместно там, где требуется простой протокол передачи файлов. Сервер FTP можно установить на всех операционных системах Microsoft. Последняя глубокая модернизация этой службы была произведена в Windows 7 / Server 2008 R2 (по сути код сервиса был переписан заново). Была существенно улучшена безопасность службы, и появился ряд новых возможностей. В частности, в FTP сервере на Windows появилась возможность настроить изоляцию FTP пользователей, позволяющая разграничить доступ множества пользователей к собственным папкам на одном FTP сервере.
Благодаря возможности изоляции пользователи могут работать только со своими ftp каталогами, и не могут подняться выше по дереву каталогов, т.к. каталог верхнего уровня пользователя отображается для него, как корень службы FTP. Таким образом можно предотвратить доступ пользователей к чужим файлам на FTP сервере. Изоляция FTP пользователей широко применяется хостинг-провайдерами, когда нужно предоставить индивидуальный доступ различным пользователям к одному файловому хранилищу.
Как и в предыдущих версиях Windows, служба FTP (не путайте с sFTP и TFTP) в Windows Server 2016/2012 R2 основана и глубоко интегрирована в сервис IIS, и имеет единый административный интерфейс управления. В этой статье мы покажем, как установить сервер FTP на базе IIS в Windows Server 2016 / 2012 R2 и настроить на нем изоляцию пользователей (инструкция также применима и к Windows 10 / 8.1).
- Установка роли FTP сервера в Windows Server 2016/ 2012 R2
- Настройка FTP сайта в Windows Server, предоставление прав пользователям
- Настройка изоляции FTP пользователей в Windows Server 2016/2012 R2
- Настройка правил брандмауэра Windows для доступа к FTP серверу
- Проверка подключения к FTP серверу с Windows клиента
Установка роли FTP сервера в Windows Server 2016/ 2012 R2
Установить сервис FTP можно через консоль Server Manager, отметив в разделе Web Server(IIS) -> FTP Server опции FTP Service и FTP Extensibility.
Также можно установить роль FTP сервера одной командой PowerShell:
Install-WindowsFeature Web-FTP-Server
Чтобы установить консоль управления FTP сервером выполните команду:
Install-WindowsFeature -Name "Web-Mgmt-Console"
Настройка FTP сайта в Windows Server, предоставление прав пользователям
Запустите Server Manager и откройте консоль управления IIS (Internet Information Service Manager).
Создайте новый FTP сайт (Sites ->Add FTP Site).
Имя FTP сайта: MyTestSite
Корневой каталог FTP сайта: C:\inetpub\ftproot
Для защиты передаваемых по сети ftp-данных возможно настроить SSL (в этом случае все передаваемые по сети данные и пароли/учетки ftp-пользователей будут зашифрованы), но в нашей демонстрации это не обязательно. Все остальные настройки оставляем стандартными.
Import-Module WebAdministration
#Задаем имя FTP сайта
$FTPSiteName = 'New FTP Site'
#Каталог FTP сайта
$FTPRoot = 'E:\www\FTPRoot'
#порт FTP сайта
$FTPPort = 21
New-WebFtpSite -Name $FTPSiteName -PhysicalPath $FTPRoot -Port $FTPPort
Выберите новый FTP сайт и в секции FTP Authentication (Аутентификация) отключите анонимную аутентификацию Anonymous Authentication. Basic Authentication должна быть включена.
FTP служба на Windows Server 2016 / 2012 R2 может использовать два типа учетных записей: доменные или локальные. В зависимости от типа учетной записи есть различия в структуре каталогов FTP и настройках изоляции пользователей. Мы будем использовать локальные учетные записи Windows.
Создайте FTP пользователей, допустим, это будут учетные записи ftp_user1, ftp_user2 и ftp_user3. Также создайте группу ftp_users, в которую включим этих пользователей. Создать пользователей можно в разделе Local Users and Groups консоли Computer Management.
Также можно создать пользователей и группы из командной строки (или с помощью PowerShell). Создайте локальную группу:
net localgroup ftp_users /add
Создайте нового локального пользователя:
net user ftp_user1 /add *
Добавьте пользователя в группу:
net localgroup ftp_users ftp_user1 /add
Точно так же создайте еще двух пользователей.
Предоставьте созданной группе ftp_users права (RW) на каталог C:\inetpub\ftproot.
Внутри каталога C:\inetpub\ftproot создадйте каталог с именем LocalUser (имя должно полностью соответствовать, это важно!!!). Затем внутри C:\inetpub\ftproot\LocalUser создайте три каталога с именами созданных вами пользователей: ftp_user1, ftp_user2, ftp_user3.
Тип учетной записи | Синтаксис именования домашних каталогов |
Анонимные пользователи | %FtpRoot%\LocalUser\Public |
Локальная учетная запись Windows | %FtpRoot%\LocalUser\%UserName% |
Доменная учетная запись Windows | %FtpRoot%\%UserDomain%\%UserName% |
Специальные учетки IIS Manager или ASP.NET | %FtpRoot%\LocalUser\%UserName% |

Вернитесь в консоль IIS и в разделе сайта FTP Authorization Rules создайте новое правило (Add Allow Rule), в котором укажите, что группа ftp_users должна иметь права на чтение и запись (разрешения Read и Write).
Настройка изоляции FTP пользователей в Windows Server 2016/2012 R2
Перейдем к настройке изоляции пользователей FTP. Изоляция FTP пользователей настраивается на уровне сайта FTP, а не всего сервера и позволяет организовать собственный домашний каталог для каждого пользователя. В настройках FTP сайта откройте пункт FTP User Isolation.
В этом разделе имеются несколько настроек. Первые две не предполагают изоляции пользователей:
- FTP root directory (ftp‑сессия пользователя начинается с корневого каталога ftp-сайта);
- User name directory (пользователь начинает работу с физического/виртуального каталога с именем пользователя. Если каталог отсутствует, сессия начинается с корневого каталога ftp-сайта).
Следующие 3 опции представляют различные режимы работы изоляции пользователей:
- User name directory (disable global virtualdirectories) – предполагает, что ftp-сессия пользователя изолирована физическим или виртуальным каталогом имя которого соответствует имени пользователя ftp. Пользователи видят только собственный каталог (для них он является корневым) и не могут выйти за его рамки (в вышестоящий каталог дерева FTP). Любые глобальные виртуальные каталоги игнорируются;
- User name physical directory (enable global virtual directories) – предполагается, что FTP-сессия пользователя ограничена (изолирована) физическим каталогом с именем учетной записи пользователя FTP. Пользователь не может перейти выше своего каталога по структуре FTP. Однако пользователю доступны все созданные глобальные виртуальные каталоги;
- FTP home directory configured in Active Directory – FTP-пользователь изолируется в рамках своего домашнего каталога, заданного в настройках его учетной записи Active Directory (свойства FTPRoot и FTPDir).
Выберите нужный режим изоляции (я использую второй вариант изоляции ftp пользователей).
Настройка правил брандмауэра Windows для доступа к FTP серверу
При установке роли FTP сервера в настройках Windows Firewall автоматически активируются все необходимые правила, которые нужна для доступа пользователей к FTP.
Для корректной работы FTP севера в пассивном режиме FTP пользователям нужно подключаться к RPC диапазону портов (1025-65535). Чтобы не открывать все эти порты на внешнем файерволе, вы можете ограничить диапазон динамических TCP портов, используемых для передачи данных.
- Для этого в настройках FTP сайта в IIS откройте пункт FTP Firewall Support и в поле Data Channel Port Range укажите диапазон портов, который вы хотите использоваться для FTP подключений. Например – 50000-50100;
- Сохраните изменения и перезапустите IIS (iisreset);
- Откройте панель управления и перейдите в Control Panel\System and Security\Windows Firewall\Allowed apps;
- Убедитесь, что в списке приложении, которым разрешен доступ через брандмауэр присутствуют разрешения для FTP Server.
Затем в настройках Windows Firewall with Advanced Security проверьте, что включены следующие правила:
- FTP Server (FTP Traffic-In) – протокол TCP, порт 21;
- FTP Server Passive (FTP Passive Traffic-In) – адрес локального порта 1024-65535 (либо 50000-50100 как в нашем примере);
- FTP Server Secure (FTP SSL Traffic-In) – (при использовании FTP с SSL) порт 990;
- FTP Server (FTP Traffic-Out) – порт 20;
- FTP Server Secure (FTP SSL Traffic-Out) – (при использовании FTP с SSL) порт 989.
Соответственно эти порты нужно открыть на шлюзе (межсетевом экране) для подключения внешних FTP пользователей.
Проверка подключения к FTP серверу с Windows клиента
Вы можете проверить доступность портов на FTP сервере с помощью командлета Test-NetConnection:
Test-NetConnection -ComputerName yourftpservername -Port 21
Или с помощью команды ftp:
ftp yourftpservername
Попробуйте подключиться к своему FTP сайту с помощью любого клиента FTP или непосредственно из Explorer (в адресной строке указав ftp://yourservername/.
Укажите имя и пароль пользователя.
В результате у вас откроется содержимое домашнего каталога с файлами пользователя (являющимся для пользователя корнем FTP сайта). Как вы видите, сессия пользователя является изолированной и пользователь видит на ftp сервера только свои файлы.
Для просмотра информации о доступе пользователей к FTP серверу можно использовать журналы FTP, которые по умолчанию хранятся в каталоге c:\inetpub\logs\logfiles в файлах формата u_exYYMMDD.log.
Для просмотра текущих подключений пользователей к вашему серверу можно пользоваться значениями счетчиками пользователей IIS через PowerShell или функцией «Текущие сеансы FTP» в консоли IIS. В этой консоли можно посмотреть информацию об имени и IP адресе FTP пользователя и отключить сессию при необходимости.
Итак, мы рассмотрели, как настроить FTP сайт с изоляцией пользователей на базе Windows Server 2016 / 2012 R2. В режиме изоляции пользователи аутентифицируются на FTP под своими локальным или доменным учетными записями, после чего они получают доступ к своему корневому каталогу, соответствующему имени пользователя.
Подскажите как такой ftp сервер опубликовать в интернете? что бы не только локальные пользователи могли пользоваться но и внешние. спасибо
Все зависит от типа подключения к интернету и имеющийся сетевого оборудования. У вас есть белый IP адрес?
Здравствуйте, есть выделенный ip от провайдера, сервер подключен к интернету через роутер. Нужна помощь именно в публикации ftp в интернет. С локальной справился на ура, спасибо!
Вся настройка сводится в переконфигурированию роутера, чтобы он перенаправлял FTP трафик на адрес вашего локального сервера.
“Внутри каталога C: \ inetpub \ ftproot создадим каталог с именем LocalUser (имя должно полностью соответствовать, это важно !!!).” — Обязательно должно быть имя «LocalUser» — это какая то привязка, к чему?
LocalUser — означает, что будут использоваться домашние fTP каталоги локальных (не доменных) пользователей. Система при подключении по ftp локального пользователя ищет и подключает его папку из каталога LocalUser.
Просто я настраиваю FTP на Windows Server 2008 r2 и разделе Local Users and Groups нет, пользователей создавать в ACTIVE Direrory?
Похоже вы разворачиваете FTP сервер на контроллере домена Active Directory — скажем, не самое удачное решение. Если же других серверов нет, то авторизации придется использовать доменные учетные записи AD, формат пути к каталогу пользователя должен быть такой: %FtpRoot%\%UserDomain%\%UserName%
Скажите пожалуйста, не самое хорошее решение это имеется виду когда сервер FTP и контроллер домена в одном месте или просто на серверных операционных системах лучше не разворачивать FTP? У нас на предприятии есть один Windows Server 2008R2 остальное 250 клиентских машин на которых установлены Windows 7 и Windows XP, лучше будет если развернуть FTP сервер на одной из клиентских машин? Да и еще одно, что означает «% FtpRoot% \% UserDomain% \% UserName%» это имеется виду маршрут С: \\ FtpRoot \ UserDomain \ UserName \ где в папке UserName создать папки для каждого пользователя который будет создан для FTP?
Нежелательно совмещать роль FTP и контроллера домена Active Directory на одном сервере.
Думаю, в вашем случае, все-таки разворачивать FTP-сервер на Windows Server 2008R2.
По поводу пути. Например, для пользователя admin домена winitpro.ru путь к домашнему FTP каталогу может выглядеть так:
C:\ftproot\winitpro\admin
А нельзя на втором диске сделать хранилище только на диске С? (а то как-то не хочется забывать этот диск, тем больше у меня 250 пользователей)
2Дмитрий
Конечно можно, просто измените путь к домашнему каталогу в настройках FTP сайта на IIS
«Корневой каталог FTP сайта: C:\inetpub\ftproot» -то есть этот маршрут, при первоначальной настройке??
Да, это и есть корневой каталог FTP сервера
Подскажите пожалуйста, есть ли возможность как то автоматически (например из файла или каким либо другим образом) создать 20000 пользователей и создать для них изоляцию?
У меня задача для 20000 контрагентов создать ftp ресурс с которого они могли бы забирать свои файлы. Ручками создавать все 20000 очень долго. Программно могу создать файловые папки, м.б этого достаточно будет, но не понимаю как задать им сгенерированные пароли.
Учетные записи пользователей локальные или доменные?
Технически самих пользователей и их каталоги можно создать несложным скриптом на Powershell, который на входе принимает csv файл с именем пользователя и его паролем. Скрипт должен создать учетку пользователя с указанным паролем и каталог с именем пользователя.
Большое спасибо за ответы! При помощи вашей переписки понял почему после поднятия контроллера домена слетел доступ к ftp серверу.
А sFTP можно поднять на Win 2012 R2 ??
Насколько я помню, именно sFTP (FTP over SSH) штатными средствами не поддерживается. Но сам трафик FTP можно зашифровать с помощью FTPS (FTP over SSL).
Написал мануал по разворачиванию SFTP сервера:
https://winitpro.ru/index.php/2016/03/31/sftp-ssh-ftp-na-windows-server-2012-r2/
Здравствуйте.
Прошу помочь разобраться с проблемой доступа к ftp-серверу.
Поднял на хостовой системе windows server 2012 r2 ftp-сервер с изоляцией на уровне локальных пользователей. В брандмауэре автоматически создались соответствующие правила. Но доступа к ftp-серверу нет. Отключаю брандмауэр — все работает.
Правила в брандмауэре созданы автоматически. На всякий случай посмотрел их. По моему разумению они правильные.
При раскопках обнаружил что автоматически созданное правило брандмауэра блокирует 21 порт. Создал аналогичное правило в котором указал применение правила не к службе FTPSVC, а ко всем службам. После этого стал отвечать telnet на 21 порт. Но дальше не идет.
220 Microsoft FTP Service
user
501 Invalid number of parameters.
pass
503 Login with USER first.
USER
501 Invalid number of parameters.
quit
221 Goodbye.
Может проблема вызвана тем, что все поднята на хосте с активированной ролью Hyper-V?
Маловероятно, что Hyper-V тут может как то мешать, если только есть какие-то правила перенаправления входящего FTP трафика внутрь какой-то ВМ на Hyper-V.
Соединение проверяете руками или клиентом? Может следует настройки клиента перепроверить?
Добрый день!
Подскажите пожалуйста, вот есть корневой каталог FTP в котором имеются 2 каталога: LocalUser (каталог с папками пользователей) и Info (в нем хранятся разные файлы)
Всё настроил по вашей статье, четко работает, каждый пользователь видит только свой каталог.
Как сделать так, что бы каталог Info был доступен всем пользователям, помимо их личных каталогов?
Нужно включить уровень изоляции User name physical directory (enable global virtual directories).
Затем создать на корневом уровне FTP сервера виртуальный каталог Info и дать соответствующие NTFS права доступа пользователям.
Доброе время суток. Есть сеть с поднятой AD, и FTP на отдельном сервере, входящем в домен. ПОльзователи используют ресурсы FTP вводя свои имя пользователя и пароль. Возможно ли настроить авторизацию на FTP так, чтобы подхватывались учетные данные залогинившегося пользователя, и автоматом осуществлялся вход на FTP?
Приветствую!
Как я помню, Windows IIS FTP сервер поддерживает Kerberos авторизацию. Могу, ошибаться. Попробуйте по аналогии со статьей настроить https://winitpro.ru/index.php/2016/05/18/nastrojka-kerberos-avtorizacii-na-sajte-iis/
Если получится — поделитесь опытом
Здравствуйте!
Подскажите решение вопроса. Настроил всё по Вашей инструкции, всё работает идеально, но требуется иное решение изоляции, т.е. имеем три вида юзеров — 1 тип это админ «дороги» (права — чтение, запись, удаление на свою папку), 2 тип это юзер «дороги» (права — чтение, запись на свою папку), и третья учетка админ фтп (права — чтение, запись, удаление всего контента изолированных).
Задача: Чтобы админ дороги и юзер дороги (всего админов и юзеров дорог 16) видели одну и туже папку (т.е. юзер1 при входе видит свою папку юзер1 с правами чтение, запись, и админ1 видит этуже папку юзер1 при входе, но права уже чтение, запись, удаление), а при входе под админ фтп видим все папки с правами чтение, запись, удаление.
Прошу подсказать пути решения?
Вам нужен режим User name physical directory (enable global virtual directories) , а разные права на каталоги нужно раздать нужным группам пользователей через разрешения NTFS
Спасибо за ответ, с правами понятно.
Не понятно только, как изоляцию сделать
т.е. …/LocalUser/User1
…/LocalUser/User2
…
…./LocalUser/User16
Заходим под User1 видим свои папки с файлами, а вот заходим под Admin1 я тоже должен видеть только содержимое папки User1, и т.д. User2 видит своё и Admin2 видит только содержимое папки User2 и т.д.
Не представляю как именно в таком виде настроить изоляцию пользователей. Скорее всего такую схему на Windows FTP реализовать не получится. В любом случае настройка будет очень трудоемкой и конфигурироваться под каждого пользователя руками.
Как вариант можно для админа создать собственный FTP сайт, который указывает на каталог с домашними каталогами пользователя.
Добрый день настроил всё как у вас, но не могу менять права на папки через клиент filezilla
У пользователя достаточно полномочий на сервере? Проверьте, подключившись по ftp под администратором.
Установил компоненту иис и фтп, создал папки s_ftp/LocalUser/ftp где ftp — имя пользователя. s_ftp — корень. при попытке зайти на фтп — просит логин и пароль, но авторизация не проходит. Пользователь локальный, обычная аутентификация
Проверьте что включен только один тип аутентификации, а у пользователя есть NTFS разрешения на каталог.
Я делал все как было показано, только как сделать чтобы пользователь Administrator попадал не в личную папку, а в коренной каталок где мы создавали папку LocalUser?
Я сделал так:
1. Создал личную папку для администратора, в ней создал пустую папку admin(к примеру)
2. Создал виртуальную папку с именем admin указал путь к коренной папке и разрешил доступ к ней только администратору.
Теперь зайдя на ftp при переходе в папку admin мы попадаем не в пустую папку, а в корень.
Желательно указать имя виртуальной папки такое которые не придет в голову создать пользователям.
Добрый день, у меня домен. На одном из серверов IIS8, я сделал FTP сервер, завел локального пользователя (он не доменный), сделал изолированное подключение. Но мне нужно, чтобы этот пользователь подключался через FTP к папке, лежащей на другом сервере. Я сделал виртуальную папку со ссылкой на другой сервер, в диспетчере IIS содержимое папки выводится нормально, а вот при подключении к FTP пользователь видит только пустой родительский каталог, даже, если я в пути указываю название виртуальной папки.
Вопрос по привязке АД.
Вот если пользователи по возрасту и подъезду уже в группах, как внутри «FTPROOT» папки , на папку «18+» дать разрешение только взрослым ? группа «oldman»
то есть привязку делать не пользователя к папке… а к уже существующей папке ГРУППУ
Хм, админская учетная запись работает, а все остальные не срабатывают.
Сеть с поднятым Доменом, отдельно на серваке, ФТП на другой машине, что еще требуется из ролей прицепить чтобы подхватывало группу Пользователи домена к примеру?
Не понял конфигурацию вашего FTP сервера. Не обязательно подниать сервер на контролллере домена, подойдет любой рядовой сервер.
Вы хотите, чтобы у каждого пользователя домена была собвтенная ftp папка (%FtpRoot%\%UserDomain%\%UserName%) ?
Добрый день. Возникла проблема. стоит Windows Server 2008 r2,был развернут ftp, структура папок такова c:/_ext/ftp (сам ftp) и подпапки с именами 09,10,11 и.т.д.,все работало, но недавно с неделю где то назад перестал работать внешний доступ под любым пользователем (вход под данным логином и паролем невозможен),выяснилось что при включении любого параметра isolate users доступ пропадает,но если включить любой параметр do not isolate users доступ появляется,но тогда при входе на ftp под любым пользователем открывается корневая директория. Можно ли как то изолировать пользователя в одну папку без использования ftp isolation users?или как то исправить данную проблему?
Почему у вас перестала работать изоляция сказать сложно — смотрите журналы безопасности, проверьте разрешения на папки. Пользователи локальные или доменные? Какова структура папок?
Можете сделать доступ без FTP излоляции в корневую папку, а на каждой папке выставить соотвествующие NTFS разрешения, чтобы пользователи не могли открывать чужие каталоги. Можете раздать пользователям ярлыки для ftp соедиенния в конкретную папку.
Здравствуйте!
Нужно настроить FTP сервер на вирт. машине (win serv 2012) но данные (каталоги пользователей) располагаются на шаре на другом сервере входящем в домен. Два вопроса:
1) FTP сервер доступен из интернета, поэтому не хочется вводит ВМ в домен ( ВМ имеет собственное выделенное подключение в интернет). Вторым интерфейсом ВМ во внутренней сети, и видит шару. Можно ли настроить фтп сервер не вводя ВМ в домен?
2) Если ответ на первый вопрос отрицательный, то как прикрутить UNC пути?
Я в шоке. Вся учебная программа в моей шараге построена на ваших гайдах
То есть они просто копировали все скрины и текст, а потом вставляли в вордовский документ.
Они это называют своими собственными учебными разработками…
Здравствуйте, подскажите пожалуйста!
Настроен ftp с выходом в глобалку, всё работает. Появилась необходимость сделать доступ к xml файлу для чтения, без какой либо авторизации, т.к. К нему обращаться будут любые пользователи в интернете. Это возможно? Из возможностей увидел только «анонимный вход» — просит ввести почту, и «все пользователи» — я так понял, имеется ввиду все пользователи сервера.
Для анонимного входа можно указать произвольный email адрес. Доступ делайте для
Все
.Все пользователи
— это все аутентфицированные пользователю, анонимы/гости туда не попадают.Здравствуйте.
Такой вопрос: организовал на сервере 2016 иерархию через нтфс папки, поднял роль фтп сервера, в фтп сайт добавляю эти самые нтфс папки, а они не отображаются, можно это как ни будь исправить?
Под кем подключаетесь к северу? У этого пользователя есть NTFS права на папки?
Наверное поздно, но мало ли кому пригодится — проблема решается использованием симлинков. Надо создать симлинки командой MKLINK на нужные папки и разместить их в папке пользователя фтп.