MAATRIX / Блог / FTP-сервер на сервере: частые ошибки и решения

FTP-сервер на сервере: частые ошибки и решения

FTP-сервер на сервере: частые ошибки и решения

MAATRIX

FTP настраивается быстро, но именно на нём новички теряют больше всего времени: соединение вроде есть, а список файлов не грузится, вход не проходит или передача обрывается на середине. Разберём частые ошибки FTP-сервера на сервере — по симптому, причине и точному решению с командами. Почти все они сводятся к пассивному режиму, правам на каталоги и настройке TLS.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Клиент подключается, но список файлов не загружается

Это ошибка номер один. В логе клиента вы видите успешный вход, затем команду LIST — и зависание с последующим тайм-аутом. Причина всегда одна: не работает пассивный режим передачи данных. FTP использует два соединения, и для канала данных сервер открывает порт из пассивного диапазона. Если диапазон не задан в конфиге или закрыт фаерволом, командный канал работает, а данные — нет.

Проверьте, что в /etc/vsftpd.conf заданы пассивные порты и внешний адрес, затем убедитесь, что диапазон открыт в фаерволе.

grep pasv /etc/vsftpd.conf
ufw status | grep 40000

Если пассивные директивы отсутствуют, добавьте их: включите пассивный режим, задайте узкий диапазон и внешний IP. После этого откройте диапазон в UFW и перезапустите демон. Отдельный коварный случай — FTPS за фаерволом: при шифровании фаервол не может подсмотреть в командный канал номер пассивного порта и открыть его на лету, поэтому диапазон обязательно должен быть фиксированным и заранее разрешённым. Без явного диапазона FTPS будет вечно висеть на листинге.

Ошибка 530 Login incorrect

Симптом понятен: правильные логин и пароль, а сервер отвечает 530 и не пускает. Причин несколько, и они не всегда очевидны. Первая — пользователь есть в системе, но его оболочка не входит в список разрешённых в /etc/shells. Vsftpd по умолчанию проверяет оболочку через PAM, и если у аккаунта стоит /usr/sbin/nologin, вход по FTP блокируется. Решается это либо добавлением оболочки в разрешённые, либо настройкой PAM.

Вторая причина — включён список разрешённых пользователей, а ваш аккаунт в него не попал. Проверьте userlist_enable и содержимое файла списка.

grep userlist /etc/vsftpd.conf
cat /etc/vsftpd.user_list

Тут кроется ловушка: параметр userlist_deny меняет логику на противоположную. Когда он в YES, файл работает как чёрный список, когда в NO — как белый. Люди часто путают эти режимы и сами себе закрывают вход. Третья причина — банальная блокировка от SELinux или AppArmor, которые могут запрещать демону читать домашние каталоги. Загляните в системный лог, если первые две гипотезы не подтвердились.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.

Арендовать VPS

500 OOPS: refusing to run with writable root

Эта ошибка появляется при старте или при входе пользователя с включённым chroot. Vsftpd намеренно отказывается запирать пользователя в каталог, в который тот может писать, потому что это дыра в безопасности. Быстрое, но грубое решение — разрешить запись в корень заглушки.

allow_writeable_chroot=YES

Правильное решение аккуратнее и безопаснее: сделайте сам каталог-тюрьму недоступным на запись, а обмен файлами ведите через вложенный подкаталог, куда у пользователя полные права. Такая раскладка снимает ошибку без ослабления защиты.

chown nobody:nogroup /home/ftpuser/ftp
chmod a-w /home/ftpuser/ftp
mkdir -p /home/ftpuser/ftp/files
chown ftpuser:ftpuser /home/ftpuser/ftp/files

После этого пользователь запирается в каталог ftp, но пишет в files — и vsftpd больше не ругается. Это предпочтительный вариант для рабочего сервера.

Передача файлов обрывается на середине

Файл начинает заливаться, доходит до какого-то процента и рвётся. Если это происходит на определённом размере — почти наверняка виноват тайм-аут или переполнение диска. Проверьте свободное место первым делом, потому что забитый диск даёт самые загадочные симптомы.

df -h
tail -n 30 /var/log/vsftpd.log

Если места достаточно, увеличьте тайм-ауты простоя и передачи данных в конфиге — на медленном канале дефолтные значения слишком короткие для крупных файлов. Ещё одна причина обрывов — нестабильный пассивный диапазон: если часть портов диапазона закрыта, часть соединений будет срываться случайным образом, создавая ощущение плавающей проблемы. Убедитесь, что весь диапазон открыт целиком, а не частично.

Отдельно про ресурсы: если сервер захлёбывается при нескольких параллельных передачах, дело может быть в слабом VPS. FTP сам по себе нетребователен, но узкий канал и малый объём RAM под дисковый кэш заметно замедляют работу. Если упираетесь в это регулярно, разумнее перейти на VPS помощнее с широким каналом — у MAATRIX можно подобрать сервер в нужной локации и оплатить из России картой, СБП или криптой, не жертвуя скоростью отдачи файлов.

TLS-соединение не устанавливается

После включения FTPS клиент выдаёт ошибку сертификата или разрывает соединение сразу после приветствия. Частая причина — самоподписанный сертификат, которому клиент не доверяет. FileZilla обычно предлагает принять его вручную, но автоматизированные клиенты и скрипты просто рвут связь. Правильное решение — использовать валидный сертификат Let's Encrypt вместо самоподписи.

Вторая причина — рассинхрон требований. Если на сервере включён force_local_logins_ssl=YES, а клиент пытается зайти обычным нешифрованным FTP, сервер справедливо его отвергает. Убедитесь, что в клиенте выбран именно явный FTP через TLS, а не простой FTP. Проверить, что демон слушает и отвечает по TLS, можно напрямую.

openssl s_client -connect ВАШ_IP:21 -starttls ftp

Если команда показывает цепочку сертификата и рукопожатие проходит — сервер настроен верно, и проблема на стороне клиента. Если рукопожатие падает, перепроверьте пути к файлам сертификата и ключа в конфиге: типичная ошибка — указать несуществующий или недоступный демону файл.

FTP-сервис не поднимается после перезагрузки

Вы всё настроили, но после ребута FTP недоступен. Первым делом проверьте, включён ли автозапуск демона и что показывает журнал.

systemctl is-enabled vsftpd
systemctl status vsftpd
journalctl -u vsftpd -n 30

Если демон не стартует, чаще всего в логе будет прямая причина: синтаксическая ошибка в конфиге после ручной правки, недоступный файл сертификата или занятый порт 21. Ошибку в конфиге легко внести опечаткой — vsftpd не прощает неизвестных директив и отказывается запускаться. Держите резервную копию рабочего конфига и сверяйтесь с ней. Если порт 21 занят другим процессом, найдите и остановите его. После устранения причины включите автозапуск, чтобы FTP-сервер стабильно поднимался при каждой загрузке сервера.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.

Арендовать VPS

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Частые вопросы

Почему через FTPS не грузится список файлов, а по обычному FTP всё работает?

При шифровании фаервол не видит номер пассивного порта в командном канале и не открывает его автоматически. Нужен фиксированный пассивный диапазон, заранее открытый в фаерволе.

Логин и пароль верные, но сервер отвечает 530 — в чём дело?

Чаще всего оболочка пользователя не в /etc/shells либо аккаунт не проходит по списку userlist. Проверьте userlist_deny — он инвертирует логику белого и чёрного списка.

Как убрать ошибку refusing to run with writable root правильно?

Сделайте корневой каталог пользователя недоступным на запись, а файлы принимайте в подкаталоге с полными правами. Это безопаснее, чем просто разрешать запись в корень заглушки.

Передача больших файлов обрывается — куда смотреть?

Проверьте свободное место на диске, увеличьте тайм-ауты в конфиге и убедитесь, что весь пассивный диапазон портов открыт целиком, а не частично.

Нужны сами нейросети для контента?

Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.