Яркая реальность многих — файлы не ложатся на место сами по себе: то клиент просит выложить архив, то коллеги не могут принять логи, то бекап надо периодически отправлять на удаленный сервер. FTP кажется простым и знакомым решением, но при попытке настроить сервер возникают вопросы: какой софт выбрать, как открыть пассивные порты, что с безопасностью, чем отличается FTPS от SFTP и зачем вообще смотреть логи. В этом тексте мы разберем все от базовой установки до продвинутой безопасности — пошагово, без воды, с примерами и реальными командами, чтобы вы могли запустить FTP-сервер и не бояться, что кто-то случайно откроет доступ ко всему диску.
- Коротко о различиях FTP, FTPS и SFTP
- Что потребуется перед началом
- Выбор программного обеспечения
- Пошаговая установка vsftpd на Ubuntu
- Настройка пользователей и права доступа
- Системные пользователи
- Виртуальные пользователи (пример для vsftpd + db)
- Порты и сетевые нюансы — таблица портов
- Безопасность: что обязательно сделать
- Настройка FTPS в FileZilla Server на Windows
- Тестирование и отладка
- Частые ошибки и способы их решения
- Клиент подключается, но не может перечислить директорию в пассивном режиме
- Клиент получает ошибку TLS или не удается установить защищенное соединение
- Пользователь застрял в корне или видит пустую директорию
- Контроль и автоматизация
- Краткая чек-лист инструкция перед запуском в прод
- Заключение
Коротко о различиях FTP, FTPS и SFTP

Начнем с ясности: когда говорят «FTP», обычно имеют в виду классический протокол на порту 21, передающий данные в открытом виде. FTPS — это обертка над FTP с использованием TLS для шифрования, иногда называют FTP-SSL. SFTP — совсем другой протокол, он работает поверх SSH и не имеет ничего общего с FTP по реализации, но по смыслу выполняет те же задачи обмена файлами с защитой. Выбирайте SFTP, если важна безопасность и простая настройка через OpenSSH. FTPS применим, если клиентская инфраструктура требует именно FTP-совместимости и TLS.
Что потребуется перед началом
- Сервер с Linux (Ubuntu/CentOS) или Windows, куда будете ставить FTP-сервер.
- Права администратора (root) на сервере.
- Публичный IP или корректно проброшенные порты через роутер/NAT.
- Понимание, какие пользователи будут получать доступ: системные, виртуальные или анонимные.
Выбор программного обеспечения
Популярные варианты для Linux: vsftpd, ProFTPD, Pure-FTPd. Для Windows — FileZilla Server или встроенный IIS FTP. Для простоты и безопасности многие предпочитают SFTP через OpenSSH, так как он уже есть почти везде и не требует дополнительного демона. Ниже таблица с кратким сравнением.
| Софт | Плюсы | Минусы | Когда выбрать |
|---|---|---|---|
| vsftpd | Легкий, безопасный по умолчанию, хорошо документирован | Ограниченная гибкость конфигурации по сравнению с ProFTPD | Стандартный FTP/FTPS на Linux |
| ProFTPD | Мощный, похож на Apache по конфигу, гибкие модули | Сложнее в настройке | Сложные сценарии с виртуальными хостами |
| Pure-FTPd | Удобен для виртуальных пользователей, простой в настройке | Меньше опций, чем ProFTPD | Хостинг с виртуальными аккаунтами |
| OpenSSH (SFTP) | Безопасен, простая авторизация ключами, встроен в систему | Не совместим с FTP-клиентами без SFTP | Если нужна простая и безопасная передача файлов |
| FileZilla Server (Windows) | Графическая настройка, FTPS поддерживается | Только для Windows | Пользовательский Windows-сервер |
Пошаговая установка vsftpd на Ubuntu
Если вы хотите классический FTP с опцией FTPS и предпочитаете проверенное решение, начнем с vsftpd. Привожу команды и объясняю ключевые настройки.
- Установка пакета:
sudo apt update sudo apt install vsftpd
- Создание резервной копии конфигурации и открытие файла для редактирования:
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orig sudo nano /etc/vsftpd.conf
- Основные опции, которые стоит задать (пояснения ниже):
listen=YES anonymous_enable=NO local_enable=YES write_enable=YES chroot_local_user=YES allow_writeable_chroot=YES pasv_enable=YES pasv_min_port=30000 pasv_max_port=30100 pasv_address=ВАШ.ПУБЛИЧНЫЙ.IP
- Если нужен FTPS, добавьте:
ssl_enable=YES rsa_cert_file=/etc/ssl/private/vsftpd.pem force_local_data_ssl=YES force_local_logins_ssl=YES
Сгенерировать самоподписанный сертификат:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
- Открытие портов в файрволе (пример ufw):
sudo ufw allow 21/tcp sudo ufw allow 30000:30100/tcp sudo ufw reload
- Перезапуск сервиса:
sudo systemctl restart vsftpd sudo systemctl enable vsftpd
Пояснения: pasv_address указывайте если сервер доступен по публичному IP иначе клиенты не смогут подключиться в пассивном режиме за NAT. Диапазон пассивных портов нужен для передачи данных — открывайте соответствующие порты на роутере и в файрволе.
Настройка пользователей и права доступа
Есть два подхода: использовать системных пользователей или виртуальных. Системные проще — юзер создается командой useradd и получает домашнюю папку. Но в проде безопаснее создавать виртуальных пользователей, чтобы не давать shell-доступ. Ниже кратко о каждом варианте.
Системные пользователи
- Создать пользователя и задать домашнюю папку:
sudo adduser ftpuser sudo mkdir -p /srv/ftpuser sudo chown ftpuser:ftpuser /srv/ftpuser
- Ограничить доступ в корень домашней директории через chroot (в конфиге vsftpd chroot_local_user=YES).
Виртуальные пользователи (пример для vsftpd + db)
Virtual users часто хранятся в базе или файле, маппятся на системного пользователя, у которого ограниченные права. Конфигурация больше шагов, но дает гибкость и безопасность. Описание выходит за краткий пример, но основной принцип — использовать pam и файл пар логин:пароль, затем преобразовать в Berkeley DB.
Порты и сетевые нюансы — таблица портов
| Служба | Порт | Примечание |
|---|---|---|
| FTP командный канал | 21/tcp | Обязателен для классического FTP |
| FTP данные (активный режим) | 20/tcp | Клиент открывает порт для приема данных |
| FTP пассивный диапазон | Задается, например 30000-30100/tcp | Нужно пробросить через NAT |
| FTPS (TLS для FTP) | 21/tcp (или 990 для implicit) | Дополнительно требует passive ports |
| SFTP (SSH) | 22/tcp | Шифруется через SSH, отдельный протокол |
Безопасность: что обязательно сделать
- Откажитесь от анонимного доступа, если он не нужен.
- Используйте SFTP или FTPS для шифрования трафика, особенно паролей.
- Ограничьте домашние каталоги через chroot, чтобы пользователи не могли ходить по всей файловой системе.
- Открывайте минимально необходимый диапазон пассивных портов и пробрасывайте их в роутере.
- Используйте сильные пароли и, по возможности, ключи SSH для SFTP.
- Включите логирование и собирайте логи для аудита и расследований.
- Ограничьте доступ по IP, если есть статические клиенты.
Настройка FTPS в FileZilla Server на Windows
FileZilla Server удобен для Windows-администраторов. После установки откройте GUI, создайте пользовательские аккаунты, укажите домашнюю папку и права. Для включения FTPS зайдите в Edit — Settings — SSL/TLS settings, создайте или загрузите сертификат и включите «Allow explicit FTP over TLS». Не забудьте настроить пассивный порт-диапазон и пробросить его на роутере.
Тестирование и отладка
После настройки важно проверить все сценарии. Несколько полезных команд и проверок:
- Проверка доступа по FTP:
ftp your.server.ip
- Проверка FTPS (explicit):
openssl s_client -connect your.server.ip:21 -starttls ftp
- Проверка SFTP:
sftp user@your.server.ip
- Загрузка файла через curl:
curl -T localfile ftp://user@your.server.ip/ --ftp-create-dirs
- Просмотр логов vsftpd:
tail -f /var/log/vsftpd.log tail -f /var/log/auth.log
Частые ошибки и способы их решения
Клиент подключается, но не может перечислить директорию в пассивном режиме
Чаще всего проблема в пассивных портах. Проверьте, что вы указали pasv_min_port и pasv_max_port в конфиге, и что эти порты проброшены на роутере и открыты в файрволе. Также убедитесь, что pasv_address указывает публичный IP сервера, если он за NAT.
Клиент получает ошибку TLS или не удается установить защищенное соединение
Проверьте сертификат, его права и путь в конфиге. Для FTPS с self-signed сертификатом клиент может потребовать подтверждение. Логи openssl или vsftpd помогут понять причину.
Пользователь застрял в корне или видит пустую директорию
Убедитесь, что права на файловой системе установлены корректно и пользователь имеет доступ к своей домашней папке. Для chroot-пользователей каталог не должен быть записываемым для root-пользователя в старых версиях vsftpd — добавьте allow_writeable_chroot=YES при необходимости.
Контроль и автоматизация
Неплохо настроить ротацию логов и мониторинг. Используйте logrotate для логов FTP, интегрируйте оповещения через систему мониторинга (Prometheus, Zabbix) по метрикам доступности сервиса. Для регулярных задач можно использовать скрипты на bash для бекапов и rsync поверх SFTP, чтобы не упростить себе режимы восстановления.
Краткая чек-лист инструкция перед запуском в прод
- Выбрали протокол: SFTP или FTPS/FTP.
- Установили и настроили демона.
- Ограничили пользователей и права через chroot или виртуальные аккаунты.
- Настроили пассивный диапазон портов и пробросили их на роутере.
- Включили шифрование (SFTP или FTPS), проверили сертификаты.
- Открыли только необходимые порты в файрволе.
- Настроили логирование и мониторинг.
- Провели тесты подключения и передачи файлов.
Заключение
FTP-сервер — это не магия и не костыль, а инструмент. Правильно настроенный сервер служит долго и предсказуемо, а ошибки обычно связаны с сетью, портами и правами. Если нужна максимальная безопасность и простота, начните с SFTP через OpenSSH. Если клиентов много и требуется совместимость с классическими FTP-клиентами, ставьте vsftpd или FileZilla Server и обязательно включайте FTPS. Следуйте чек-листу выше, тестируйте, и тогда обмен файлами перестанет быть источником раздражения и превратится в надежный рабочий процесс.












