
Флешки постепенно уходят в прошлое, а облачные хранилища не всегда подходят для домашних проектов и экспериментов. Иногда хочется простого и предсказуемого способа обмена файлами — без подписок, лимитов и лишней инфраструктуры.
FTP-сервер — один из самых простых вариантов для решения этой задачи. Он не требует сложной инфраструктуры, минимально нагружает систему и поддерживается практически любыми клиентами.
В этой статье вы найдёте пошаговый гайд по развёртыванию FTP-сервера на VPS UltraVDS под управлением Debian 12 с использованием vsftpd (Very Secure FTP Daemon).
Что такое домашний FTP
FTP (File Transfer Protocol) — протокол передачи файлов, разработанный ещё в 1971 году, но даже сейчас он достаточно актуален, несмотря на появление современных альтернатив, таких как SFTP. FTP-сервер — это программное обеспечение, которое работает на компьютере или выделенном сервере и обеспечивает доступ к файлам через сеть с использованием этого протокола. FTP по-прежнему используют из-за лёгкости настройки и поддержки практически всеми ОС.
Из этого и следуют преимущества — итак, тезисно:
поддержка возобновления прерванных загрузок;
высокая скорость передачи данных;
возможность гибкой настройки прав доступа;
кроссплатформенность;
нет ограничений на размер передаваемых файлов;
полный контроль над данными — ваши файлы остаются на вашем оборудовании.
Современному домашнему серверу или NAS достаточно пары сотен мегабайт на диск под софт и нескольких мегабайт RAM под сам демон, основная нагрузка упрётся в диск и канал, а не в CPU. Протокол старый и неудобный с точки зрения безопасности, но по-прежнему жив.
Как работает FTP
Для работы по FTP клиент и сервер сначала находят друг друга в сети и устанавливают связь. Чтобы «войти внутрь», пользователю нужно либо предъявить свой логин и пароль, либо зайти через анонимный FTP.
Главное отличие FTP от привычных нам сервисов в том, что для работы ему нужно сразу два отдельных соединения. Одно — для команд, другое — для самих файлов. Первое — это командный канал. Требуется для передачи сообщений о тех или иных действиях и ответов между клиентом и сервером (и наоборот).
Протокол FTP работает по логике тех же «старичков», вроде TELNET и SMTP, для связи посредством управляющего соединения. Для этого используется набор символов NVT ASCII. Управляющий канал по умолчанию использует порт 21 и служит для служебного диалога. А вот порт 20 используется только для активного режима (сервер стучится к клиенту), в пассивном клиент сам подключается к серверу. Клиент принимает URL ftp://user@host/path, но на уровне протокола FTP (RFC 959) адресной строки не существует. Надо парсить URL и переводить его в цепочку ASCII-команд: USER/PASS для входа, CWD для навигации и RETR для файла поверх TCP-соединения.
Доступ к серверу может быть свободным, если администратор разрешил вход без личного логина и пароля. Такой режим называется «анонимным FTP». В этом случае на стороне сервера живёт специальная учётная запись (созданная раньше), которой всё равно, что вы напишете в поле пароля. Сервер формально проверяет ваши данные и выдаёт разрешение или запрет на действия с данными. После обмена нужными файлами происходит выход из соединения.
Как работают FTPS и SFTP
FTPS работает по той же двухканальной схеме, что и обычный FTP, но добавляет к ней защиту на базе сертификатов — по аналогии с протоколом HTTPS. Модель клиент-сервер использует канал управления и канал передачи данных для обмена командами FTP и данными во время клиентского сеанса FTPS.
Для входа здесь нужны не только логин и пароль, но и проверка сертификата сервера. Инструменты, такие как OpenSSL, позволяют запрашивать и создавать сертификаты и ключи. При соединении с сервером FTPS клиент сначала проверяет надёжность сертификата сервера, после чего выполняет подключение. Если сертификат подписан доверенным центром (CA), это гарантирует защиту от атак посредника и ещё от ряда атак. Если же используется самозаверяющий сертификат, клиент выдаст предупреждение, и пользователю придётся подтверждать подключение вручную.
FTPS (через SSL) работает на базе сертификатов X.509 для аутентификации. Эти цифровые сертификаты содержат в себе открытый ключ шифрования и информацию о том, кто является его владельцем. У этого ключа две задачи: подтвердить, что вы подключились именно к своему серверу, а не к мошенникам, и зашифровать всю передаваемую информацию.
Для защиты данных ещё есть SFTP (или SSH FTP). Несмотря на схожее название, технически он не имеет отношения к обычному FTP и работает как часть протокола SSH. Главное удобство SFTP в том, что всё общение происходит через один единственный порт (обычно 22). В отличие от FTPS, которому для каждого нового файла нужно открывать отдельный порт, SFTP упаковывает и команды, и сами данные в один зашифрованный туннель. Для входа здесь можно использовать не то��ько привычные логин и пароль, но и SSH-ключи.
Как можно использовать FTP
Обмен большими файлами с друзьями и коллегами
Можно отдать знакомому образ на 50–100 ГБ, какие-то видео в 4K или тяжёлый проект. Пытаться залить это через Google Drive или мессенджеры встанет в лимиты или в черепашью скорость, к тому же бесплатное место имеет свойство заканчиваться. Вот как это можно решить через домашний FTP: создаётся отдельный пользователь или анонимный доступ в одну папку, и человеку отдаётся временная ссылка и креды, после чего по окончании загрузки учётку можно удалить.
Но для такого сценария уже нужен публичный IP или проброс портов на роутере, хранилище хотя бы 500 ГБ–2 ТБ, исходящий трафик и шифрование желательно хотя бы на уровне FTPS. Конечно, это путь энтузиаста-мазохиста, но почему бы и нет. Проще говоря, его можно использовать как хранилище и файлообменник.
Прошивки и образы для ретро‑железа
Как вариант, можно использовать FTP для всей техники, что застряла во времени, то есть всего ретро‑железа, что иначе не обновляется. Требования по ресурсам смешные: памяти достаточно под прошивки и образы, публичный IP не нужен, если обновление идёт из локальной сети, исходящий трафик мизерный, шифрование часто невозможно из‑за ограничений самого клиента, а одновременных подключений — обычно один, максимум два.
Это сценарий из разряда «настроил один раз и забыл», но когда вам в очередной раз понадобится оживить старый гаджет (принт-сервер, старую консоль), этот костыль окажется незаменимым.
Временное хранилище артефактов CI для личных проектов
Представим, вы разработчик или девопсер, в домашних проектах возникает задача: куда-то скинуть результат сборки (бинарник, архив или прошивку), а потом забрать его с другой машины. Настраивать ради этого S3-хранилище или реестры в облаке это тумач. В этом случае FTP сработает как dumb-storage. Простой скрипт после компиляции закидывает файл на сервер без токенов и настройки прав доступа.
Конечно, речь только о домашнем пользовании. Обычно всё работает внутри локальной сети или через VPN. Но так как пересылаться могут ключи или готовый софт, здесь уже крайне желательно использовать зашифрованный SFTP. Не самое лучшее решение, зато оно поднимается за пять минут и работает как промежуточный буфер.
Сценарий использования | Преимущества FTP-решения |
Малый бизнес | Экономия по сравнению с коммерческими SaaS-решениями за счёт отсутствия подписок и ограничений на объём данных. |
Образование | Удобная база для централизованного обмена учебными материалами. |
Веб-разработка | Оперативное обновление контента и скриптов напрямую на сервере. |
Домашняя сеть | Личная медиатека с доступом со всех устройств без облачных лимитов. |
Разработка ПО | Локальный обмен билдами и исходным кодом внутри команды. |
Создание виртуального сервера под FTP
Для начала развернём отдельный виртуальный сервер UltraVDS. Откройте главную страницу нашего сайта. По классике мы попадаем на экран с горящими предложениями. Обращаем внимание на блок «Сконфигурировать и заказать». В центре страницы расположена большая тёмная карточка с конфигуратором и выбором тарифа «Стандарт» или «Премиум» сверху.

В этой карточке нас интересуют четыре блока: «CPU», «RAM», «Disk» и «IP». CPU — это количество и частота виртуальных ядер и мозги всего сервера. Слайдер уже выставлен в положение «2×2.2 ГГц» — этого более чем достаточно для домашнего FTP‑проекта, менять не будем.
Ниже аналогичный блок RAM, то есть объём оперативной памяти, который используется системой и запущенными сервисами для работы без тормозов. Там по умолчанию выбрано «2 Гб» оперативной памяти, этого тоже хватит для vsftpd и небольших фоновых задач (например, логирования).
Дальше смотрим на блок Disk — это наш жёсткий диск на виртуальном сервере, тот самый объём, куда встанет система, FTP‑сервер и все файлы, которые вы будете заливать. 60 гигов хватит, чтобы установить Ubuntu/Debian, самого vsftpd и приличного набора файлов: пару десятков бэкапов, конфиги, образы и прочий рабочий мусор.
Последний блок — IP. Это количество выделенных вам публичных IPv4‑адресов, через которые к серверу будут подключаться FTP‑клиенты. Да‑да, в 2025 году (почти в 2026) есть и IPv6, но он в первую очередь нужен, если вы сознательно строите инфраструктуру с поддержкой обоих стеков, тестируете современные сервисы или хотите, чтобы сервер был доступен напрямую из чистых IPv6‑сетей. Если брать FTP‑сервер для себя одного, IPv4 вполне хватает. Так что используем один адрес, один сервер, никаких дополнительных сложностей с маршрутизацией и лишними IP. Всё, что будет происходить дальше — установка Linux, настройка vsftpd и открытие нужных портов — уже будет завязано именно на этот адрес, так что тут тоже без изменений.

Выбираем операционную систему. Например, есть Windows разных лет или один линуксоид — Debian 12. Остановимся на Debian 12. Помимо того, что это вкусовщина и кому что удобнее, это современная стабильная система, в которой vsftpd есть в стандартных репозиториях и ставится одной командой через пакетный менеджер.
После настройки нажимаем «Завершить» и попадаем на страницу, где находятся все ваши серверы.

Так, сервер у нас уже есть, а данные, которые мы видим, используются для первого входа на машину по SSH. Что дальше?
На сайте нужно открыть карточку нужного сервера и скопировать IP‑адрес из строки «IP‑адрес (доступен для подключения)». Там же нажать «Показать пароль» в блоке «Авторизация по умолчанию» и записать пароль root (или оставить вкладку открытой, чтобы вернуться к нему).
На своём компьютере открыть терминал (Linux/macOS) и выполнить команду:
ssh root@IP_СЕРВЕРАГде вместо IP_СЕРВЕРА используйте адрес из панели. Для Windows укажите, что можно взять любой SSH‑клиент и в поле Host ввести тот же IP, логин — root, пароль — тот, что из панели.

При первом подключении подтвердите предупреждение о новом сервере (надо написать — yes), затем введите пароль root и дождитесь появления приглашения командной строки вида:
root@debian:~#Сразу после входа приведите систему в актуальное состояние одной строкой:
apt update && apt upgrade -yДождитесь окончания установки обновлений и возвращения к приглашению root@debian:~#.
Затем перезагрузите сервер командой reboot, подождите 30–60 секунд и снова зайдите по SSH, чтобы продолжить настройку уже на обновлённой системе.
Но тут может возникнуть нюанс. Если при попытке входа по SSH вы вводите пароль, а в ответ видите Permission denied, это не обязательно значит, что пароль неверный. Часть провайдеров по умолчанию запрещает вход по паролю для root из соображений безопасности. В таком случае можно воспользоваться веб-консолью в панели управления (кнопка вроде «VNC» или «Консоль»), зайти туда под root и работать уже в этой встроенной консоли.
Тогда можно выполнять ту же команду обновления — и процесс пошел. Но тут может появиться интерактивное меню (синий фон поверх консоли). Система спрашивает, что делать с файлом конфигурации SSH, который мы, возможно, меняли, и который конфликтует с новым.
Выбираем «keep the local version currently installed» (сохранить текущую версию), нажимаем Tab и Enter. Система установила все паке��ы, включая загрузчик GRUB. Главное — внизу мы видим заветное приглашение:

Ставим демона vsftpd
Дальше по плану — поставить сам FTP‑движок. Благо в Debian 12 это делается буквально парой команд, без плясок с бубном.
Так как систему мы обновили, остаётся поставить сам демон:
apt install vsftpdМенеджер пакетов подтянет все нужные зависимости и развернёт vsftpd в системе. Никаких внешних репозиториев добавлять не нужно: в Debian 12 он идёт «в базе».
После установки имеет смысл сразу включить службу и запустить её, чтобы не забыть про автозапуск при следующей перезагрузке:
systemctl enable --now vsftpdКоманда enable --now добавляет сервис в автозагрузку и одновременно запускает его. vsftpd будет подниматься при старте системы и начинать слушать 21-й порт.
systemctl status vsftpdВидим зелёное active (running), значит демон жив и готов к дальнейшей настройке: созданию пользователя, правке конфига и выставлению правил файрвола.

Настройка FTP-сервера
Сначала нужен пользователь, под которым клиенты будут заходить на FTP‑сервер.
Пускать всех под root — себе дороже, поэтому заводим отдельную учётку с минимальными правами. Пусть будет your-ftp-user:
useradd your-ftp-user
passwd your-ftp-userПервая команда создаёт нового пользователя в системе, вторая просит ввести и подтвердить пароль. Именно этот логин и пароль потом будут использоваться в FTP‑клиенте. Так что не делайте пароль банальным и не раздавайте его кому попало, лучше вообще никому не раздавайте.
Затем создайте каталог, который будет использоваться для доступа к FTP-серверу:
mkdir /your-ftp-catalogДанный каталог установите для ранее созданного пользователя в качестве домашней директории:
usermod -d /your-ftp-catalog your-ftp-userПосле чего измените владельца и группу каталога /your-ftp-catalog на пользователя your-ftp-user и группу your-ftp-user:
chown your-ftp-user:your-ftp-user /your-ftp-catalogТеперь очередь самого vsftpd. У него один главный конфигурационный файл — /etc/vsftpd.conf. Открываем его любым удобным редактором, например:
nano /etc/vsftpd.confИ приводим ключевые настройки к понятному и безопасному виду:
listen=YES
listen_ipv6=NO
anonymous_enable=NO
local_enable=YES
write_enable=YES
dirmessage_enable=YES
connect_from_port_20=YES
use_localtime=YES
xferlog_enable=YES
xferlog_std_format=YES
chroot_local_user=YES
allow_writeable_chroot=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
Разберём это на человеческом:
listen=YES — включает работу FTP-сервера в режиме автономного демона;
listen_ipv6=NO — отключает использование IPv6;
anonymous_enable=NO — отключает доступ анонимных пользователей;
local_enable=YES — разрешает подключение локальных учётных записей системы;
write_enable=YES — разрешает операции записи на сервере;
dirmessage_enable=YES — включает отображение сообщений из файла .message при входе в каталог;
connect_from_port_20=YES — включает использование порта 20 для передачи данных в режиме активного FTP;
use_localtime=YES — активирует использование локального времени системы вместо UTC для отметок времени в логах и файлах;
xferlog_enable=YES — включает ведение логов загрузок и скачиваний;
xferlog_std_format=YES — включает стандартный формат логов для xferlog;
chroot_local_user=YES — изолирует локальных пользователей в их домашних каталогах;
allow_writeable_chroot=YES — разрешает использовать каталоги, доступные для записи, в качестве корневых;
secure_chroot_dir=/var/run/vsftpd/empty — указывает на директорию, которая используется демоном vsftpd для безопасного выполнения операций, требующих chroot, прежде чем пользователь будет авторизован;
pam_service_name=vsftpd — указывает имя службы PAM (Pluggable Authentication Module), используемой для аутентификации. Другими словами, сервер будет использовать настройки из файла /etc/pam.d/vsftpd для управления аутентификацией пользователей.
Чтобы FTP нормально переживал NAT и фаерволы, стоит заранее зафиксировать узкий диапазон портов для пассивного режима. В конец того же файла добавляем:
pasv_enable=YES
pasv_min_port=59000
pasv_max_port=60000После всех правок остаётся сохранить файл и перезапустить демон vsftpd, чтобы он подхватил новые настройки:
systemctl restart vsftpdНастройка безопасности
Дальше по-хорошему нужно объяснить системе, что наш FTP‑сервер — не злоумышленник, а обычный пользователь, и открыть ему нужные двери в брандмауэре.
Если у вас на Debian уже включён UFW, делаем три простых шага. Сначала разбираемся с «классическими» FTP‑портами:
ufw allow 20/tcp
ufw allow 21/tcpНапоминаем, что порт 21 — это канал управления: по нему клиент стучится на сервер, логинится, отправляет команды вроде LIST или STOR.
А порт 20 нужен для передачи данных в активном режиме FTP: именно с него сервер поднимает отдельное соединение, когда начинается заливка или скачивание файла. Поэтому оба порта попадают в список разрешённых.
Дополнительно добавим разрешающее правило для TCP-портов, используемых для установления пассивных FTP-соединений. Мы включили пассивный режим и заранее зафиксировали узкий диапазон 59000–60000 в конфиге vsftpd.
ufw allow 59000:60000/tcpВместо вывода
Получилось дёшево и сердито. Путь от чистой Debian 12 до рабочего vsftpd и настройки UFW себя оправдал. Теперь для хранения гигабайтов образов и видеоконтента есть место.
FTP без TLS — это уже моветон: пароли передаются в открытом виде. И если FTPS — маст-хэв, то дальше стоит смотреть в сторону бэкапов и fail2ban для защиты от ботов.
А если нужен веб-доступ и поудобнее — можно развернуть Nextcloud на том же VPS от UltraVDS (но об этом у нас уже была отдельная статья).

