В сфере информационных технологий существует множество способов передачи файлов. Одним из них является FTP — специальный протокол, созданный для обмена данными между устройствами. В этой статье мы разберем, как работает FTP, его основные особенности и альтернативные методы передачи файлов.
Назначение и основные принципы
FTP относится к сетевым протоколам прикладного уровня и предназначен для обмена файлами через интернет или локальную сеть.
Протокол функционирует по модели «клиент-сервер», где обмен данными осуществляется с помощью специальных запросов.
Одна из ключевых особенностей FTP — многоканальность соединений. Обычно одно соединение служит для передачи управляющих команд, а другое — для пересылки файлов.
Ещё одна важная черта — отсутствие шифрования: все данные, включая учётные данные пользователей, передаются в открытом виде.
FTP является одним из старейших прикладных протоколов — его разработали еще в 1971 году. Официальное описание протокола можно найти в RFC 959.
Протокол применяется в таких ситуациях, как:
-
Передача файлов. Можно использовать для загрузки или скачивания больших файлов (изображений, видеозаписей, программ и прочего).
-
Управление файлами на сервере. Позволяет удаленно управлять файлами на сервере, перемещать их, переименовывать, удалять и т. д.
Обычно FTP используется в сочетании с программами-клиентами, такими как FileZilla или WinSCP, которые упрощают работу с протоколом.
Принцип работы
Для работы необходимо наличие FTP-сервера, который обрабатывает входящие запросы.
Основные этапы работы:
-
Установка управляющего соединения. Клиент подключается к серверу и проходит аутентификацию (логин, пароль, либо анонимный доступ).
-
Передача команд. Клиент отправляет запросы, например, на просмотр списка файлов или загрузку данных.
FTP работает в двух режимах — активный режим (Active Mode) и пассивный режим (Passive Mode).
Достоинства и недостатки FTP
Как и любой другой прикладной протокол, FTP обладает преимуществами и недостатками. Рассмотрим их.
Преимущества
- Простота использования. FTP легко настраивается и не требует сложных конфигураций. Для работы со стороны клиента достаточно ввести IP-адрес сервера, логин и пароль.
- Поддержка больших файлов. FTP позволяет передавать файлы любого размера. Также присутствует возможность возобновления загрузки после обрыва соединения.
- Гибкость при работе с файлами и директориями. FTP позволяет создавать, удалять, переименовывать файлы и директории прямо на сервере прямо в процессе установления сессии, если у пользователя есть соответствующие права.
- Поддержка безопасных расширений (FTPS, SFTP). Хотя классическая версия протокола не является безопасной, существуют расширения, которые обеспечивают шифрование данных.
Недостатки
- Проблемы безопасности. Классическая версия протокола не шифрует данные. FTP также восприимчив к атакам типа Brute-force, MITM, DDoS. Для решения первой проблемы можно использовать FTPS или SFTP, а для второй — дополнительную защиту при помощи использования брандмауэров, программ наподобие fail2ban, а также встроенных функций FTP-сервера.
- Отсутствие встроенной проверки целостности файлов. В классической версии протокола FTP не предусмотрен встроенный механизм для проверки файла на целостность. Это означает, что при передаче данных через FTP нет гарантии, что файл не был поврежден или изменен в процессе передачи.
- Ограниченная поддержка современных технологий. FTP не поддерживает сжатие данных во время передачи, что может замедлить процесс загрузки и выгрузки файлов. Кроме того, в протоколе отсутствует встроенный функционал для работы с символическими ссылками.
Что такое FTP-сервер
FTP-сервер — это программное обеспечение, работающее на физическом или виртуальном сервере и обеспечивающее возможность хранения и передачи файлов. Он предоставляет клиентам доступ к файлам и позволяет управлять ими.
Основные функции FTP-сервера:
- Передача файлов
- Управление файлами
- Управление доступом и безопасностью
Подключиться к FTP-серверу можно при помощи консольного клиента FTP (по умолчанию предустановлен в актуальных версиях Windows и Windows Server, а также в большинстве дистрибутивов Linux) или сторонней утилиты. Среди последних можно выделить lftp — консольный FTP-клиент с поддержкой множества протоколов (FTPS, HTTP, HTTPS, FISH SFTP) и расширенного функционала.
Получить доступ до FTP-сервера можно при помощи браузера. Однако часть браузеров (в частности Google Chrome, Microsoft Edge) полностью убрали поддержку FTP в связи с проблемами безопасности протокола. Но несмотря на существующие проблемы, Safari, Opera, Mozilla Firefox всё еще позволяют использовать протокол через браузер.
Также существуют программы с графическим интерфейсом. Среди таких программ можно выделить FileZilla, WinSCP и SmartFTP.
Популярные FTP-серверы
Чтобы организовать свой собственный FTP-сервер, можно воспользоваться одной из популярных программ: FileZilla Server, ProFTPD, vsftpd. Рассмотрим их более подробно.
FileZilla Server
FileZilla Server — это бесплатное программное обеспечение для организации FTP-сервера, разработанное в рамках проекта FileZilla.
Среди дополнительных функций можно выделить создание пользователей и групп, а также их гибкую настройку, включая настройку прав доступа к файлам и директориям. Все действия на сервере логируются, также присутствует встроенный мониторинг. Настройка и администрирование FileZilla Server осуществляется исключительно при помощи графического интерфейса, что отличает программу от других (преимущественно настраиваемых через интерфейс командной строки). Это делает ее удобной и доступной для широкого круга пользователей.
ProFTPD
ProFTPD (Professional FTP Daemon) — это мощный, гибкий и безопасный FTP-сервер для Linux-/Unix-систем. Он поддерживает протоколы FTP, FTPS и SFTP, а также предлагает гибкую настройку, интеграцию с MySQL/PostgreSQL и поддержку механизма Chroot для изоляции пользователей в их директориях. ProFTPD работает в нескольких режимах — Standalone и xinetd.
vsftpd
vsftpd — еще один популярный FTP-сервер для Linux/Unix. Он известен своей высокой производительностью, минимальным потреблением ресурсов и безопасностью. vsftpd использует строгие меры безопасности, такие как разделение привилегированных и непривилегированных процессов, поддержка Chroot, ограничение количества одновременных подключений и защита от брутфорс-атак.
Сравнительная таблица FTP-серверов
Для наглядного сравнения приведем характеристики рассмотренных решений в таблице:
FileZilla Server |
ProFTPD |
vsftpd |
|
Стоимость |
Бесплатно. |
Бесплатно |
Бесплатно |
Поддерживаемые операционные системы |
Windows, macOS, Linux |
Linux/Unix |
Linux/Unix |
Наличие графического интерфейса (GUI) |
Да |
Нет |
Нет |
Поддерживаемые протоколы |
FTP, FTPS (FTP over TLS), SFTP |
FTP, FTPS (FTP over TLS), SFTP |
FTP, FTPS |
Настройка пользователей и групп |
Присутствует |
Присутствует |
Присутствует |
Шифрование и безопасность |
Поддержка TLS для протокола FTPS. |
Поддержка TLS для протокола FTPS. Поддержка Chroot. |
Поддержка TLS для протокола FTPS. Поддержка Chroot. Ограничение количества одновременных подключений. |
Дополнительные возможности |
Встроенный веб-интерфейс. Поддержка облачных сервисов (только в платной версии): OneDrive, OneDrive for Business, SharePoint, OpenStack Swift and WebDAV. |
Аутентификация пользователей с помощью СУБД (MySQL, PostgreSQL). Встроенный мониторинг при помощи протоколов SNMPv1 и SNMPv2. |
Поддержка многопоточной обработки. Возможность создания виртуальных пользователей (без системных аккаунтов). |
FTP-клиенты
Для подключения к FTP-серверу необходимо воспользоваться специальной программой — FTP-клиентом. Например, на скриншоте ниже представлен типичный сеанс использования стандартного ftp клиента в Ubuntu.
Однако для удобства использования существуют программы с графическим интерфейсом. FileZilla — одна из самых популярных программ, которая помимо стандартного протокола FTP также поддерживает FTPS и SFTP. FileZilla является кроссплатформенной программой.
Еще одной популярной программой с графическим интерфейсом для подключения к FTP является WinSCP. Особенностью WinSCP является поддержка протоколов SFTP и SCP поверх протоколов SSH-1 и SSH-2.
Создание FTP-сервера
Для создания своего FTP-сервера при помощи ProftPD или FileZilla Server нам понадобится следующее:
-
Один сервер или одна виртуальная машина с любым предустановленным дистрибутивом Linux. Мы будем использовать дистрибутив Ubuntu версии 22.04.
-
Один сервер или одна виртуальная машина с предустановленным дистрибутивом Windows. В данной статье мы будем использовать дистрибутив Windows Server 2022.
cloud
Создание облачного сервера
После того, как учетная запись была создана и активирована, можно арендовать облачный сервер.
- Переходим на страницу авторизации и входим в аккаунт при помощи логина или адреса электронной почты и пароля или при помощи Passkey, ВКонтакте, GitHub, Google.
- После успешной авторизации отобразится панель управления текущего проекта. Переходим в раздел «Облачные серверы» и нажимаем «Создать» или «Добавить».
- Выбираем операционную систему, которая будет установлена на сервер. В нашем случае нам необходима Ubuntu версии 22.04.
- Выбираем регион, в котором будет находиться наш сервер. Выбирать рекомендуется тот регион, который ближе всего находится к вам физически. У каждого доступного региона справа вверху отображается ping, т.е. время, необходимое для передачи данных с вашего компьютера на сервер. Чем меньше указанное время, тем быстрее будет осуществляться передача данных.
- Далее выбираем необходимую конфигурацию для сервера. Так как в данной статье будет рассмотрена только установка и базовая настройка ProFTPD без реальной нагрузки, то для конфигурации сервера можно выбрать минимальную доступную конфигурацию, включающую в себя одноядерный процессор, 1 ГБ оперативной памяти и 15 ГБ места на NVMe-диске. В реальности вам необходимо выбирать именно ту конфигурацию, которая будет удовлетворять вашим потребностям при работе с FTP-сервером. Выбираем соответствующий тариф:
- Далее необходимо решить, будет ли сервер доступен из внешний сети или же только из приватной (частной) сети. Если не уверены в настройках, оставьте эти параметры без изменений.
- По желанию можно оформить дополнительные услуги, включая резервные копии и защиту от DDoS-атак (последняя доступна только в Санкт-Петербурге и в Москве).
- Также заранее можно загрузить SSH-ключ, чтобы не входить на север при помощи пароля.
- Можно задать необходимое имя для сервера которое будет отображаться в панели управления, а также выбрать проект.
- Для создания сервера необходимо нажать на кнопку «Заказать»:
Если на вашем аккаунте недостаточно средств, то будет выведено предупреждение о необходимости пополнить баланс. После оплаты и создания сервера откроется Дашборд сервера, где можно будет найти IP-адрес, логин и пароль для подключения.
FTP-сервер на Ubuntu на базе ProftPD
В этой главе мы развернем собственный FTP-сервер на Ubuntu при помощи программы ProFTPD.
Перед установкой и настройкой FTP-сервера создадим нового пользователя:
adduser alex
Переключаемся на него:
su alex
Далее в домашнем каталоге пользователя создадим тестовый файл и запишем в него фразу «This file was downloaded using FTP»:
echo "This file was downloaded using FTP" > file-from-ftp.txt
- Обновляем индекс репозиториев и устанавливаем пакет
proftpd
:
apt update && apt -y install proftpd
- Далее открываем на редактирование основной конфигурационный файл
proftpd.conf
при помощи любого текстового редактора:
nano /etc/proftpd/proftpd.conf
Нас интересуют следующие параметры:
ServerName
— используется для задания имени FTP-сервера, которое будет отображаться клиентам при подключении.DefaultRoot
— ограничивает пользователей их домашними или указанными каталогами, запрещая им выходить за пределы этой директории (так называемый «chroot jail»).UseIPv6
— включает или выключает использование протокола IPv6. В нашем случае мы отключим использование IPv6, так ка это ускоряет соединение к FTP-серверу.UseReverseDNS
— управляет использованием обратного DNS (reverse DNS lookup) для входящих подключений. При включенном UseReverseDNS, если DNS-сервер отвечает медленно или неправильно настроен, подключение может зависать на 10 секунд и более. Отключение ускоряет работу FTP-сервера.
Значения параметров будут следующими:
UseIPv6 off
ServerName "MyFTPServer!"
DefaultRoot ~
UseReverseDNS off
Сохраняем изменения и выходим из файла.
- Проверяем конфигурационный файл на наличие ошибок при помощи команды:
proftpd -t
Если ошибок нет, будет выведена фраза «Syntax check complete». При наличии ошибок вы увидите описание ошибки и номер строки.
- Перезапускаем сервис
proftpd
и проверяем его статус:
systemctl restart proftpd.service && systemctl status proftpd.service
Если в статусе будет отображаться active (running)
, то proftpd
успешно запущен и готов принимать соединения.
- Произведем подключение к FTP-серверу, например, с другого сервера или с клиентского компьютера. Воспользуемся вторым сервером с Ubuntu и стандартной клиентской утилитой
ftp
, введя в качестве FTP-адреса IP-адрес сервера:
ftp 147.45.254.179
Выведем список всех файлов, которые есть в домашнем каталоге пользователя alex
:
Как можно увидеть на скриншоте выше, в домашнем каталоге пользователя находится только один файл file-from-ftp.txt
, который был создан ранее.
- Скачаем файл себе на сервер:
get file-from-ftp.txt
Выводим содержимое файла при помощи команды cat
:
- Теперь загрузим новый файл на FTP-сервер. Создаем файл:
touch uploaded-file.txt
Для загрузки файла подключаемся к FTP-серверу, проходим аутентификацию при помощи ранее созданного пользователя и используем команду put
:
put uploaded-file.txt
При помощи команды ls
на FTP-сервере проверяем, что файл был загружен:
Мы получили полноценный работающий FTP-сервер на Ubuntu.
FTP-сервер на Windows на базе FileZilla Server
Для развертывания FTP-сервера на ОС Windows воспользуемся FileZilla Server.
- Переходим на сайт проекта и скачиваем установочный файл для Windows:
Выбираем обычное издание:
- На этапе установочного процесса выбираем тип установки Full:
При желании можно выбрать тип запуска — вместе с загрузкой Windows (Install as service, started with Windows), используемый по умолчанию, или каждый раз запускать вручную (Install as service, start manually).
Также можно выбрать, из-под какой учетной записи будет запущен сервис FileZilla Server — под системной учетной записью (Run service under the SYSTEM Windows user account) или под другой, доступной в системе (Run service under a different Windows user account):
- Далее необходимо выбрать любой незанятой порт в диапазоне от 1025-65535 и задать пароль для администратора:
- После завершения установки откроется окно «Administration interface». Для подключения к FTP-серверу нажимаем на кнопку «Connect to Server»:
- Вводим IP-адрес хоста (127.0.0.1 или localhost), порт и пароль администратора, который был задан на этапе установки:
- Теперь создадим нового пользователя. В меню выбираем «Server»→ «Configure»:
- В открывшемся окне переходим в раздел «Rights management», далее в «Users». Создаем нового пользователя с именем
newusr
, нажав на кнопку «Add». Справа выбираем «Require a password to log in» и задаем пароль для пользователя:
- Также необходимо задать путь до директории пользователя, где будут располагаться файлы.
В FileZilla Server есть два понятия пути:
- Virtual path (виртуальный путь) — это путь, который видит клиент FTP при подключении. Он абстрагирует реальное расположение файлов на сервере. Например, можно создать виртуальный путь
/files
, который будет ссылаться на реальную папкуC:\FTP\Public
, но клиент со своей стороны увидит только/files
. - Native path (реальный путь) — это фактическое местоположение папки на сервере. Это путь в файловой системе, который соответствует виртуальному пути. Например, если виртуальный путь
/backup
указывает наD:\Backups
, тоD:\Backups
— это и есть native path.
В качестве Virtual path зададим несуществующую директорию — /srv
, а в Native path реальную — C:\newusr
(предварительно ее необходимо создать):
- Также включим пассивный режим в разделе «Protocols settings» → «FTP and FTP over TLS (FTPs)» → «Passive mode»:
- В качестве теста создаем в ранее созданной директории файл с именем
newusr-file
:
- Подключаемся к FTP-серверу и видим наш файл:
Разверните FTP на собственном сервере
Заключение
Мы подробно рассмотрели протокол FTP и программы, которые можно использовать для организации собственного FTP-сервера. На сегодняшний день существуют более безопасные и функциональные альтернативы FTP, такие как FTPS и SFTP, которые решают основные недостатки оригинального протокола и могут быть использованы как в личных проектах, так и в коммерческой деятельности.