В сфере информационных технологий существует множество способов передачи файлов. Одним из них является FTP — специальный протокол, созданный для обмена данными между устройствами. В этой статье мы разберем, как работает FTP, его основные особенности и альтернативные методы передачи файлов.
FTP относится к сетевым протоколам прикладного уровня и предназначен для обмена файлами через интернет или локальную сеть.
Протокол функционирует по модели «клиент-сервер», где обмен данными осуществляется с помощью специальных запросов.
Одна из ключевых особенностей FTP — многоканальность соединений. Обычно одно соединение служит для передачи управляющих команд, а другое — для пересылки файлов.
Ещё одна важная черта — отсутствие шифрования: все данные, включая учётные данные пользователей, передаются в открытом виде.
FTP является одним из старейших прикладных протоколов — его разработали еще в 1971 году. Официальное описание протокола можно найти в RFC 959.
Протокол применяется в таких ситуациях, как:
Передача файлов. Можно использовать для загрузки или скачивания больших файлов (изображений, видеозаписей, программ и прочего).
Управление файлами на сервере. Позволяет удаленно управлять файлами на сервере, перемещать их, переименовывать, удалять и т. д.
Обычно FTP используется в сочетании с программами-клиентами, такими как FileZilla или WinSCP, которые упрощают работу с протоколом.
Для работы необходимо наличие FTP-сервера, который обрабатывает входящие запросы.
Основные этапы работы:
Установка управляющего соединения. Клиент подключается к серверу и проходит аутентификацию (логин, пароль, либо анонимный доступ).
Передача команд. Клиент отправляет запросы, например, на просмотр списка файлов или загрузку данных.
FTP работает в двух режимах — активный режим (Active Mode) и пассивный режим (Passive Mode).
Как и любой другой прикладной протокол, 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-сервер, можно воспользоваться одной из популярных программ: FileZilla Server, ProFTPD, vsftpd. Рассмотрим их более подробно.
FileZilla Server — это бесплатное программное обеспечение для организации FTP-сервера, разработанное в рамках проекта FileZilla.
Среди дополнительных функций можно выделить создание пользователей и групп, а также их гибкую настройку, включая настройку прав доступа к файлам и директориям. Все действия на сервере логируются, также присутствует встроенный мониторинг. Настройка и администрирование FileZilla Server осуществляется исключительно при помощи графического интерфейса, что отличает программу от других (преимущественно настраиваемых через интерфейс командной строки). Это делает ее удобной и доступной для широкого круга пользователей.
ProFTPD (Professional FTP Daemon) — это мощный, гибкий и безопасный FTP-сервер для Linux-/Unix-систем. Он поддерживает протоколы FTP, FTPS и SFTP, а также предлагает гибкую настройку, интеграцию с MySQL/PostgreSQL и поддержку механизма Chroot для изоляции пользователей в их директориях. ProFTPD работает в нескольких режимах — Standalone и xinetd.
vsftpd — еще один популярный FTP-сервер для Linux/Unix. Он известен своей высокой производительностью, минимальным потреблением ресурсов и безопасностью. vsftpd использует строгие меры безопасности, такие как разделение привилегированных и непривилегированных процессов, поддержка Chroot, ограничение количества одновременных подключений и защита от брутфорс-атак.
Для наглядного сравнения приведем характеристики рассмотренных решений в таблице:
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 клиента в Ubuntu.
Однако для удобства использования существуют программы с графическим интерфейсом. FileZilla — одна из самых популярных программ, которая помимо стандартного протокола FTP также поддерживает FTPS и SFTP. FileZilla является кроссплатформенной программой.
Еще одной популярной программой с графическим интерфейсом для подключения к FTP является WinSCP. Особенностью WinSCP является поддержка протоколов SFTP и SCP поверх протоколов SSH-1 и SSH-2.
Для создания своего FTP-сервера при помощи ProftPD или FileZilla Server нам понадобится следующее:
Один сервер или одна виртуальная машина с любым предустановленным дистрибутивом Linux. Мы будем использовать дистрибутив Ubuntu версии 22.04.
Один сервер или одна виртуальная машина с предустановленным дистрибутивом Windows. В данной статье мы будем использовать дистрибутив Windows Server 2022.
cloud
После того, как учетная запись была создана и активирована, можно арендовать облачный сервер.
Если на вашем аккаунте недостаточно средств, то будет выведено предупреждение о необходимости пополнить баланс. После оплаты и создания сервера откроется Дашборд сервера, где можно будет найти IP-адрес, логин и пароль для подключения.
В этой главе мы развернем собственный 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
, введя в качестве FTP-адреса IP-адрес сервера:ftp 147.45.254.179
Выведем список всех файлов, которые есть в домашнем каталоге пользователя alex
:
Как можно увидеть на скриншоте выше, в домашнем каталоге пользователя находится только один файл file-from-ftp.txt
, который был создан ранее.
get file-from-ftp.txt
Выводим содержимое файла при помощи команды cat
:
touch uploaded-file.txt
Для загрузки файла подключаемся к FTP-серверу, проходим аутентификацию при помощи ранее созданного пользователя и используем команду put
:
put uploaded-file.txt
При помощи команды ls
на FTP-сервере проверяем, что файл был загружен:
Мы получили полноценный работающий FTP-сервер на Ubuntu.
Для развертывания FTP-сервера на ОС Windows воспользуемся FileZilla Server.
Выбираем обычное издание:
При желании можно выбрать тип запуска — вместе с загрузкой 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):
newusr
, нажав на кнопку «Add». Справа выбираем «Require a password to log in» и задаем пароль для пользователя:В FileZilla Server есть два понятия пути:
/files
, который будет ссылаться на реальную папку C:\FTP\Public
, но клиент со своей стороны увидит только /files
./backup
указывает на D:\Backups
, то D:\Backups
— это и есть native path.В качестве Virtual path зададим несуществующую директорию — /srv
, а в Native path реальную — C:\newusr
(предварительно ее необходимо создать):
newusr-file
:Разверните FTP на собственном сервере
Мы подробно рассмотрели протокол FTP и программы, которые можно использовать для организации собственного FTP-сервера. На сегодняшний день существуют более безопасные и функциональные альтернативы FTP, такие как FTPS и SFTP, которые решают основные недостатки оригинального протокола и могут быть использованы как в личных проектах, так и в коммерческой деятельности.