Как установить и настроить FTP‑сервер на Ubuntu

Введение
FTP (File Transfer Protocol) — протокол для передачи файлов между системой и сервером. На Ubuntu чаще всего в роли FTP‑демона используют vsftpd: лёгкий, безопасный и быстрый. В этой инструкции мы пройдём весь путь: от установки до базовой жёсткой настройки и тестирования. Если вам важна максимальная безопасность и удобство — в блоке «Альтернативы» описаны варианты лучше FTP.
Важно: FTP по умолчанию передаёт данные в открытом виде. Для шифрования используйте FTPS или — ещё лучше — SFTP (через SSH).
Предварительные требования
- Ubuntu (Desktop или Server) с доступом к sudo.
- Рабочая сеть: доступ к SSH или локальный терминал.
- Установленные средства для редактирования файлов, например nano.
Что такое vsftpd
vsftpd — «Very Secure FTP Daemon», демон FTP, ориентированный на безопасность и производительность. Он поддерживает chroot, ограничение пользователей, и настройку SSL/TLS для FTPS.
Шаг 1. Установка vsftpd
Откройте терминал и обновите списки пакетов:
sudo apt updateПроверьте, установлен ли vsftpd:
sudo apt list --installed | grep vsftpdЕсли нет — установите:
sudo apt install vsftpdСделайте резервную копию файла конфигурации перед изменениями:
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf_defaultЗапустите и включите демон, чтобы он стартовал при загрузке:
sudo systemctl start vsftpd
sudo systemctl enable vsftpdПроверьте статус:
systemctl status vsftpdЕсли демон активен — можно переходить к настройке.
Шаг 2. Создание FTP‑пользователя
Создайте системного пользователя с домашней директорией:
sudo useradd -m usernameЗадайте пароль для пользователя:
sudo passwd usernameСоздайте тестовый файл в домашней папке пользователя, чтобы подтвердить доступ:
sudo -i -u username bash
cd ~
nano testfile.txtЗапишите что‑нибудь в testfile.txt, сохраните и выйдите. При подключении через FTP вы должны увидеть этот файл.
Шаг 3. Открытие портов в брандмауэре
По умолчанию FTP использует порты 20 и 21 (командный и данные). Если в системе активирован ufw, разрешите их:
sudo ufw allow 20/tcp
sudo ufw allow 21/tcpЕсли вы используете пассивный режим, потребуется открыть диапазон портов для пассивных соединений — его задают в конфиге vsftpd (см. ниже).
Если используется другой фаервол (firewalld, cloud firewall), откройте те же порты согласно документации.
Шаг 4. Базовая конфигурация vsftpd
Откройте файл конфигурации для редактирования:
sudo nano /etc/vsftpd.confРекомендуемые параметры (пояснения ниже):
listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES
# Паспортный (пасивный) диапазон:
pasv_min_port=30000
pasv_max_port=31000
pasv_address=YOUR_SERVER_PUBLIC_IP
# Логирование
xferlog_enable=YESПояснения:
- anonymous_enable=NO отключает анонимный доступ.
- local_enable=YES позволяет локальным пользователям входить в систему.
- write_enable=YES разрешает запись (upload) для пользователей.
- chroot_local_user=YES закрепляет пользователя в домашней директории.
- Пасcивный диапазон нужен для NAT/защищённых сетей — диапазон портов должен быть открыт на фаерволе.
Сохраните изменения (Ctrl+X, затем Y и Enter в nano).
Управление списком chroot для нескольких пользователей
Если вы хотите применить chroot только к списку пользователей, отредактируйте или добавьте следующие строки в /etc/vsftpd.conf:
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_listСоздайте файл списка и добавьте в него имена пользователей, по одному на строку:
sudo nano /etc/vsftpd.chroot_list
# пример содержания:
# user1
# user2После изменений перезапустите сервис:
sudo systemctl restart vsftpd.serviceШаг 5. Включение FTPS (SSL/TLS)
Чтобы зашифровать управление и/или передачу данных, включите SSL/TLS в конфиге:
sudo nano /etc/vsftpd.confДобавьте или измените:
ssl_enable=YES
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
ssl_ciphers=HIGH
force_local_data_ssl=YES
force_local_logins_ssl=YESПримечание: snakeoil‑сертификат является самоподписанным и годится только для тестов. Для production используйте сертификат от доверенного CA или собственный с корректным CN/SubjectAltName.
Перезапустите сервис:
sudo systemctl restart vsftpd.serviceВ FTP‑клиенте выбирайте FTPS (обычно TLS) и при необходимости указывайте порт 21 и включённое шифрование.
Шаг 6. Подключение с клиента
Подключиться можно из терминала Linux:
ftp hostname_or_ipДля графического клиента рекомендуем FileZilla (клиент). Настройка в FileZilla:
- Откройте FileZilla > Site Manager (Файл > Менеджер сайтов).
- Создайте новый сайт.
- В поле Protocol выберите FTP.
- Для FTPS выберите Encryption > Require explicit FTP over TLS.
- Укажите Host (хостнейм или IP) и Port (обычно 21).
- В Logon Type выберите Normal и введите User и Password.
- Нажмите Connect.
Перетаскивайте файлы для передачи (put/get).
Тестирование и критерии приёмки
Критерии приёмки:
- Пользователь успешно входит по локальным учётным данным.
- Тестовый файл отображается в корне домашней папки пользователя.
- Загрузка и скачивание файлов работают в обоих направлениях.
- При включённом FTPS трафик шифруется (проверяется через клиент и сетевой трафик).
- При chroot пользователь не может выйти за пределы домашней директории.
Мини‑тесты (acceptance):
# вход
ftp> open YOUR_SERVER_IP
Name (YOUR_SERVER_IP:username): username
Password: ********
# список файлов
ftp> ls
# загрузка файла
ftp> put localfile.txt
# скачивание файла
ftp> get testfile.txtБезопасность и лучшие практики
Important: FTP без шифрования передаёт пароли в открытом виде. Рассмотрите SFTP как главный вариант для защищённых переносов.
Рекомендации по усилению безопасности:
- Отключите анонимный доступ.
- Разрешайте запись только там, где необходимо.
- Используйте chroot для ограничения пользователей.
- Ограничьте права файлов и папок (уменьшайте привилегии): chown и chmod.
- Используйте FTPS с сертификатом от CA либо SFTP через SSH (лучше).
- Введите аудит входов и логирование передач.
- Ограничьте исходящие и входящие диапазоны пассивных портов и откройте их в фаерволе.
- Настройте fail2ban для защиты от перебора паролей.
Пример базовой интеграции fail2ban (в общих чертах):
- Создайте правило для мониторинга логов vsftpd.
- Настройте блокировку IP после N неудачных попыток.
Альтернативы
- SFTP (SSH File Transfer Protocol)
- Работает поверх SSH, использует один порт (22), шифрование включено по‑умолчанию.
- Часто предпочтительнее FTPS, проще в администрировании и безопаснее.
- SCP
- Подходит для простых одноразовых переносов из командной строки.
- WebDAV
- Альтернатива для интеграции с HTTP/HTTPS.
Когда FTP подходит:
- Легаси‑сценарии, интеграция со старым ПО, необходимость совместимости с клиентами, которые поддерживают только FTP.
Когда FTP не подходит:
- Везде, где требуется безопасность по‑умолчанию или соответствие нормативам — используйте SFTP или HTTPS.
Ролевые чеклисты
Для администратора:
- Установлен vsftpd и выполнена резервная копия конфигурации.
- Открыты минимально необходимые порты в фаерволе.
- Настроено логирование и мониторинг.
- Настроен chroot или chroot‑список.
- Проверено шифрование FTPS или внедрён SFTP.
Для разработчика/контент‑менеджера:
- Имеется тестовый учёт и тестовые файлы.
- Проверено права доступа на запись/чтение.
Для пользователя:
- Доступ к FileZilla или командному ftp подтверждён.
- Понимает, как указать FTPS/TLS в клиенте.
Мини‑методология внедрения (план на 1 день)
- Установка и резервная копия конфигурации.
- Создание тестового пользователя и проверка доступа.
- Включение пассивного режима и открытие портов.
- Настройка chroot и прав доступа.
- Подключение клиента и проведение тестов.
- Включение TLS/FTPS и перепроверка работы.
- Внедрение мониторинга и fail2ban.
Decision flowchart
flowchart TD
A[Нужно передать файлы] --> B{Требуется шифрование?}
B -- Да --> C{Есть SSH доступ?}
C -- Да --> D[SFTP 'рекомендуется']
C -- Нет --> E[FTPS с TLS]
B -- Нет --> F[FTP 'legacy']
D --> G[Настроить пользователей и права]
E --> G
F --> GТестовые сценарии
- TC1: Вход по локальному пользователю — ожидаемый результат: успешный логин.
- TC2: Загрузка файла 10 МБ — ожидаемый результат: файл передан без ошибок.
- TC3: Попытка выхода из домашней директории при chroot — ожидаемый результат: доступ запрещён.
- TC4: Подключение по FTPS — ожидаемый результат: установлено шифрованное соединение.
1‑строчный глоссарий
- FTP — протокол передачи файлов.
- FTPS — FTP поверх SSL/TLS (шифрует FTP).
- SFTP — безопасный протокол передачи файлов через SSH.
- chroot — ограничение процесса в заданной директории.
Часто задаваемые вопросы
Q: Чем отличается FTPS от SFTP?
A: FTPS — это FTP с TLS/SSL, использует FTP‑команды и отдельные порты для пассивного режима; SFTP работает внутри SSH и обычно безопаснее и проще в настройке (один порт).
Q: Нужно ли открывать порт 20 для FTPS?
A: Для активного FTP используется порт 20, но в большинстве современных конфигураций рекомендуется пассивный режим и открытие диапазона пассивных портов; FTPS при пассивном режиме всё равно использует данные порты.
Q: Могу ли я использовать FileZilla Server на Ubuntu?
A: Официального FileZilla Server для Linux нет; на Linux используют vsftpd, ProFTPD или Pure‑FTPd. FileZilla предоставляет клиент для всех ОС.
План восстановления и отката
Если после изменений сервер перестал работать:
- Верните резервную копию конфигурации:
sudo cp /etc/vsftpd.conf_default /etc/vsftpd.conf
sudo systemctl restart vsftpd- Откат изменений в файле /etc/hosts, в правилах ufw и проверьте логи:
sudo journalctl -u vsftpd -b
sudo tail -n 200 /var/log/vsftpd.logИтог
Вы установили и настроили базовый FTP‑сервер на Ubuntu с vsftpd, узнали, как создать пользователя, включить chroot, настроить FTPS и протестировать соединение. Рекомендуется, когда это возможно, переходить на SFTP для лучшей безопасности.
Ключевые действия на будущее: поддерживать актуальность сертификатов, мониторить логи и ограничивать доступ по IP и портам.
Похожие материалы
Интерфейсы Airtable: создать и поделиться
Создать шаблон страницы в Notion
Как защитить данные на ноутбуке при краже
Как установить Microsoft Office на Linux
Slack‑бот для приветствия новых участников