Несмотря на то, что протоколу FTP, являющемуся одним из старейших протоколов, уже исполнилось больше 40 лет, он продолжает использоваться повсеместно там, где требуется простой протокол передачи файлов. Сервер FTP – возможно установить на всех операционных системах Microsoft. Последняя глубокая модернизация этой службы была произведена в Windows 7 / Server 2008 R2 (по сути код сервиса был переписан заново). Была существенно улучшена безопасность службы, и появился ряд новых возможностей. В частности, в FTP сервере на Windows появилась возможность настроить изоляцию FTP пользователей, позволяющая разграничить доступ множества пользователей к собственным папкам на одном FTP сервере.
Благодаря возможности изоляции пользователи могут работать только со своими каталогами, и не могут подняться выше по дереву каталогов FTP, т.к. каталог верхнего уровня пользователя отображается для него как корень службы FTP. Таким образом можно предотвратить доступ пользователей к чужим данным на FTP сервере. Изоляция FTP пользователей широко применяется ISP/ASP провайдерами, когда нужно предоставить индивидуальный доступ различным пользователям к одному файловому хранилищу.
Как и в предыдущих версиях Windows, служба FTP в Windows Server 2012 R2 основана и глубоко интегрирована в сервис IIS, и имеет единый административный интерфейс управления.
В этой статье мы покажем, как установить сервер FTP на базе IIS 8 в Windows Server 2012 R2 и настроить на нем изоляцию пользователей (инструкция также применима и к Windows 8).
Установка сервиса FTP в Windows Server 2012 R2
Установить сервис FTP можно через консоль Server Manager, отметив опции FTP Service и FTP Extensibility в разделе Web Server(IIS) -> FTServer.
Также можно установить роль FTP сервера одной командой Powershell:
Install-WindowsFeature Web-FTP-Server
Создаем FTP сайт, заводим пользователей, настраиваем права
Откроем консоль управления IIS (Internet Information Service Manager).
И создадим новый FTP сайт (Sites ->Add FTP Site).
Имя FTP сайта: MyTestSite
Корневой каталог FTP сайта: C:\inetpub\ftproot
Для защиты передаваемых данных возможно настроить SSL (в этом случае все передаваемые по сети данные и пароли/учетки ftp-пользователей будут зашифрованы), но в нашей демонстрации это не обязательно. Все остальные настройки оставляем стандартными.
Выберем наш FTP сайт и в секции FTP Authentication (Аутентификация) отключим анонимную аутентификацию Anonymous Authentication. Basic Authentication должна быть включена.
FTP сервис на Windows 2012 R2 может использовать два типа учетных записей: доменные или локальные. В зависимости от типа учетной записи есть различия в структуре каталогов FTP и настройках изоляции. С целью упрощения описания мы будем использовать локальные учетные записи Windows.
Создадим пользователей FTP, допустим, это будут учетные записи ftp_user1, ftp_user2 и ftp_user3. Также создадим группу ftp_users , в которую включим этих пользователей . Создать пользователей можно в разделе Local Users and Groups консоли Computer Management.
Или из командной строки:
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%\ подразумевается корень сайта FTP, в нашем случае это C:\inetpub\ftproot\):
Тип учетной записи | Синтаксис именования домашних каталогов |
Анонимные пользователи | %FtpRoot%\LocalUser\Public |
Локальная учетная запись Windows | %FtpRoot%\LocalUser\%UserName% |
Доменная учетная запись Windows | %FtpRoot%\%UserDomain%\%UserName% |
Специальные учетки IIS Manager или ASP.NET | %FtpRoot%\LocalUser\%UserName% |
Вернемся в консоль IIS и в разделе сайта FTP Authorization Rules создадим новое правило (Add AllowRules), в котором укажем, что группа ftp_users должна иметь права на чтение и запись (разрешения Read и Write).
Настройка изоляции FTP пользователей в Windows Server 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 сайту с помощью любого клиента FTP или непосредственно из Explorer (в адресной строке указав ftp://yourservername/.
Укажите имя и пароль пользователя
И мы получим доступ к домашнему каталогу с данными пользователя (являющимся для пользователя корнем FTP сайта). Как мы видим, сессия пользователя является изолированной и пользователь видит только свои данные.
Итак, мы рассмотрели, как настроить FTP сайт с изоляцией пользователей на базе Windows Server 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 сервера:
http://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 авторизацию. Могу, ошибаться. Попробуйте по аналогии со статьей настроить http://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 соедиенния в конкретную папку.