15%

Сэкономьте 15% на всех хостинговых услугах

Проверьте свои навыки и получите скидку на любой тарифный план

Используйте код:

Skills
Начать
09.10.2024

Как загружать файлы через FTP: полное техническое руководство

File Transfer Protocol (FTP) — это сетевой протокол, работающий по модели клиент-сервер, который обеспечивает двунаправленную передачу файлов между локальной машиной и удалённым хостом через TCP/IP. Он использует два отдельных канала — канал управления (порт 21) для команд и канал данных (порт 20 или согласованный эфемерный порт) для фактической передачи файлов, что является фундаментальной архитектурной особенностью, объясняющей большинство проблем с брандмауэром и пассивным режимом, с которыми сталкиваются специалисты.

Для всех, кто управляет веб-сервером, развёртывает код приложений или администрирует среду VPS Hosting, освоение FTP и его защищённых преемников является обязательным. Это руководство охватывает полный рабочий процесс: выбор протокола, настройку клиента, навигацию по каталогам, пакетную передачу файлов, управление правами доступа и профессиональное устранение неполадок — включая крайние случаи, которые упускают типовые руководства.

Понимание архитектуры FTP и вариантов протокола

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

Активный и пассивный режим

Двухканальная конструкция FTP создаёт критическое различие в поведении:

  • Активный режим: Сервер инициирует подключение к каналу данных обратно к клиенту на порт, указанный клиентом. Это почти всегда не работает через NAT-маршрутизаторы или строгие брандмауэры, поскольку входящее соединение от сервера блокируется.
  • Пассивный режим (PASV): Клиент инициирует оба соединения. Сервер открывает случайный высокий порт и сообщает клиенту, к какому порту подключиться. Это правильный режим по умолчанию практически для каждого современного развёртывания.

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

Таблица сравнения протоколов

ХарактеристикаFTPFTPS (FTP over TLS)SFTP (SSH File Transfer)SCP
ШифрованиеОтсутствуетTLS/SSLSSHSSH
Порт канала управления2121 (явный) / 990 (неявный)2222
Канал данныхОтдельный (20/эфемерный)Отдельный (с TLS-шифрованием)Единый мультиплексированный каналЕдиный канал
Совместимость с брандмауэромНизкаяНизкаяОтличнаяОтличная
Возобновление передачиДа (команда REST)ДаДаНет
Просмотр каталоговДаДаДаНет
Требуется сертификатНетДа (минимум на стороне сервера)Нет (ключ или пароль)Нет
Рекомендуется для рабочей средыНетВ отдельных случаяхДаДа (массовое копирование)

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

Предварительные требования и сбор учётных данных

Перед открытием любого клиента соберите следующую информацию у своего хостинг-провайдера или администратора сервера:

  • Имя хоста или IP-адрес — например, ftp.yourdomain.com или 203.0.113.45
  • Протокол — FTP, FTPS (явный или неявный) или SFTP
  • Порт — 21 для FTP/FTPS-явного, 990 для FTPS-неявного, 22 для SFTP
  • Имя пользователя и пароль — или закрытый SSH-ключ для аутентификации SFTP на основе ключей
  • Удалённый корневой путь — обычно /public_html, /var/www/html или /home/username/public_html в зависимости от серверного стека

Если вы работаете с VPS с cPanel, учётные данные FTP создаются в разделе cPanel > FTP Accounts, где вы также можете ограничить область действия каждой учётной записи определённым каталогом — это мера безопасности, которая ограничивает ущерб в случае компрометации учётных данных.

Шаг 1: Установка и настройка FileZilla

FileZilla остаётся наиболее широко используемым кроссплатформенным FTP-клиентом благодаря поддержке FTP, FTPS и SFTP, встроенному менеджеру сайтов и очереди передачи с возможностью возобновления.

Загрузка: Получите FileZilla Client (не Server) по адресу filezilla-project.org. Перед запуском установщика проверьте контрольную сумму SHA-512, опубликованную на странице загрузки — этот шаг большинство руководств пропускает, однако атаки на цепочку поставок популярных утилит задокументированы.

После установки откройте FileZilla и перейдите в Edit > Settings > Transfers > File Types. Установите тип передачи по умолчанию на Binary, а не Auto. Автоопределение может незаметно повредить двоичные файлы (изображения, архивы, исполняемые файлы), применяя преобразование окончаний строк, когда эвристика неверно классифицирует файл.

Шаг 2: Создание записи в менеджере сайтов

Использование панели Quickconnect допустимо для разовых задач, однако она хранит учётные данные в открытом виде в recentservers.xml. Для любого регулярного подключения используйте менеджер сайтов.

  1. Откройте File > Site Manager (или нажмите Ctrl+S).
  2. Нажмите New Site и дайте ему описательное имя.
  3. Настройте вкладку General:
  • Protocol: Выберите SFTP для серверов на основе SSH или FTP с явным TLS для FTPS.
  • Host: Введите имя хоста или IP-адрес сервера.
  • Port: Оставьте пустым для использования порта по умолчанию для протокола или укажите явно.
  • Logon Type: Выберите Normal для аутентификации по паролю или Key file для SFTP на основе SSH-ключей.
  • User / Password: Введите учётные данные.
  1. На вкладке Advanced установите Default remote directory в корневой каталог вашего веб-сайта (например, /public_html), а Default local directory — в папку вашего проекта. Это устраняет необходимость навигации при каждом сеансе.
  2. Нажмите Connect.

Для SFTP с аутентификацией на основе ключей — рекомендуемый подход для Dedicated Servers — укажите в поле Key file путь к вашему закрытому ключу (формат .pem или .ppk). FileZilla использует собственный формат ключей; при необходимости конвертируйте ключи OpenSSH с помощью PuTTYgen.

Шаг 3: Навигация в интерфейсе с двумя панелями

После подключения FileZilla отображает разделённый вид:

  • Левая панель (Local Site): Ваша локальная файловая система. Перейдите в каталог, содержащий файлы, которые вы хотите загрузить.
  • Правая панель (Remote Site): Файловая система сервера. Перейдите в целевой каталог — обычно /public_html для веб-контента.
  • Нижние панели очереди: Отображают очередь передачи, неудавшиеся передачи и успешные передачи с временными метками и количеством байт.

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

Шаг 4: Загрузка файлов

Одиночный файл или ручной выбор

Щёлкните правой кнопкой мыши на любом файле в локальной панели и выберите Upload, или перетащите его на удалённую панель. Для выбора нескольких файлов используйте Ctrl+Click (Windows/Linux) или Cmd+Click (macOS) для несмежного выбора, или Shift+Click для выбора диапазона.

Загрузка перетаскиванием

Выберите файлы в локальной панели и перетащите их в целевую папку на удалённой панели. FileZilla ставит все элементы в очередь и немедленно начинает передачу.

Синхронизированная загрузка каталога

Для развёртывания всего каталога проекта щёлкните правой кнопкой мыши на локальной папке и выберите Upload. FileZilla рекурсивно загружает всё содержимое, сохраняя структуру каталогов на удалённой стороне.

Мониторинг прогресса передачи

Очередь передачи внизу показывает:

  • Имя файла и размер
  • Скорость передачи (байт/секунду)
  • Прошедшее и расчётное время
  • Путь назначения на удалённом сервере

Передача, которая завершается, но показывает 0 байт — это скрытый сбой: файл был создан, но он пуст. Обычно это указывает на проблему с правами доступа к целевому каталогу или на превышение дисковой квоты на сервере.

Шаг 5: Установка правильных прав доступа к файлам после загрузки

Это наиболее часто пропускаемый шаг и источник значительного процента обращений в службу поддержки с жалобами на то, что «сайт сломался после загрузки».

После загрузки щёлкните правой кнопкой мыши на файле или каталоге в удалённой панели и выберите File permissions. Числовое представление напрямую соответствует восьмеричным значениям прав доступа Unix:

  • 644 — Стандарт для веб-файлов (владелец: чтение/запись, группа/остальные: только чтение)
  • 755 — Стандарт для каталогов и исполняемых скриптов
  • 600 — Приватные файлы, недоступные через веб (например, файлы конфигурации с учётными данными)
  • 777 — Никогда не используйте это в рабочей среде; предоставляет права на запись всем пользователям

Для рекурсивного исправления прав доступа во всём загруженном дереве каталогов установите флажок Recurse into subdirectories и применяйте 644 к файлам и 755 к каталогам отдельно. FileZilla не различает файлы и каталоги в одном рекурсивном проходе — необходимо выполнить операцию дважды с соответствующим выбранным фильтром.

Кроме того, после подключения через SSH можно массово исправить права доступа:

find /public_html -type f -exec chmod 644 {} ;
find /public_html -type d -exec chmod 755 {} ;

Шаг 6: Проверка загрузки

Не предполагайте, что завершённая очередь передачи означает корректное развёртывание. Выполните следующие шаги проверки:

  1. В FileZilla: Обновите удалённый каталог (F5 или щёлкните правой кнопкой мыши > Refresh) и убедитесь, что размеры файлов совпадают с локальными оригиналами. Несоответствие размеров указывает на усечённую передачу.
  2. Через браузер: Загрузите обновлённую страницу и выполните принудительное обновление (Ctrl+Shift+R), чтобы обойти кэш браузера.
  3. Через SSH: Для проверки на стороне сервера сравните контрольные суммы:
md5sum /public_html/index.html

Сравните вывод с контрольной суммой локального файла. Несоответствие означает, что файл был повреждён при передаче — редкость при использовании SFTP, но возможно при использовании обычного FTP на нестабильных соединениях.

Продвинутые техники и производственные паттерны

Возобновление прерванных передач

Если передача большого файла была прервана, FileZilla использует команду FTP REST (или её эквивалент в SFTP) для возобновления с последнего подтверждённого смещения байта. На вкладке Failed transfers щёлкните правой кнопкой мыши на неудавшемся элементе и выберите Reset and requeue failed files, затем снова запустите очередь. Это надёжно работает с SFTP; возобновление обычного FTP зависит от поддержки сервером команды REST.

Исключение файлов из загрузки

Функция Edit > Filename Filters в FileZilla позволяет задавать правила для исключения файлов, соответствующих шаблонам — например, исключать каталоги .git, node_modules, .DS_Store или файлы .env от случайной загрузки. Это критически важная мера защиты: загрузка файла .env, содержащего учётные данные базы данных или API-ключи, в публичный корневой каталог веб-сайта является серьёзным инцидентом безопасности.

Скриптовая/автоматизированная передача файлов по FTP

Для CI/CD-конвейеров или запланированных развёртываний графический интерфейс FileZilla не подходит. Вместо этого используйте утилиту командной строки lftp:

lftp -u username,password sftp://your-server.com << 'EOF'
set sftp:auto-confirm yes
mirror --reverse --delete --verbose /local/project/ /public_html/
EOF

Флаг --reverse выполняет загрузку (с локального на удалённый), --delete удаляет удалённые файлы, отсутствующие локально (используйте с осторожностью), а --verbose записывает каждую операцию в журнал. Этот паттерн подходит для автоматизированных развёртываний в средах VPS Hosting, где доступен SSH.

Использование rsync через SSH в качестве альтернативы FTP

Для крупных развёртываний или инкрементальной синхронизации rsync через SSH значительно эффективнее FTP, поскольку передаёт только изменённые блоки внутри файлов, а не файлы целиком:

rsync -avz --progress --delete /local/project/ user@your-server.com:/public_html/
    -a — Режим архива (сохраняет права доступа, временные метки, символические ссылки)
    -v — Подробный вывод
    -z — Сжатие данных при передаче
    --delete — Удаление удалённых файлов, удалённых локально
    
    rsync требует доступа по SSH и недоступен через панели управления виртуальным хостингом, однако является правильным инструментом для любой среды, где вы контролируете серверный стек.
    Устранение распространённых проблем с FTP и SFTP
    Тайм-аут или отказ соединения
    
    Убедитесь, что имя хоста разрешается корректно: nslookup ftp.yourdomain.com
  • Убедитесь, что порт открыт: telnet your-server.com 21 или nc -zv your-server.com 22
  • Проверьте правила брандмауэра сервера — в Linux iptables -L или ufw status покажут, разрешён ли порт
  • Для SFTP убедитесь, что SSH-демон запущен: systemctl status sshd
  • 530 Login Authentication Failed

    • Убедитесь, что имя пользователя введено точно — имена пользователей FTP чувствительны к регистру в системах Linux
    • Убедитесь, что учётная запись не заблокирована: passwd -S username на сервере
    • Проверьте /var/log/auth.log или /var/log/secure для выяснения причины отказа
    • При использовании cPanel убедитесь, что срок действия учётной записи FTP не истёк и она не приостановлена

    550 Permission Denied при загрузке

    Удалённый каталог не предоставляет права на запись аутентифицированному пользователю FTP. Проверьте владельца и права доступа:

    ls -la /public_html/

    Если каталог принадлежит другому пользователю, либо измените владельца (chown), либо предоставьте права на запись для группы (chmod g+w). На виртуальном хостинге это выполняется через файловый менеджер панели управления хостингом.

    Сбои подключения в пассивном режиме

    Если после успешного входа вы видите сообщение «Could not retrieve directory listing», диапазон пассивных портов сервера недоступен. В FileZilla перейдите в Edit > Settings > FTP > Passive mode и попробуйте Fall back to active mode. На стороне сервера убедитесь, что диапазон пассивных портов (обычно 49152–65534) открыт в брандмауэре и правильно настроен в параметрах FTP-демона (например, pasv_min_port и pasv_max_port в vsftpd.conf).

    Повреждение файлов при передаче в режиме Binary и ASCII

    PHP-файлы, загруженные в режиме ASCII с Windows-клиента, могут иметь преобразованные окончания строк в стиле Windows (rn), что может нарушить работу некоторых парсеров. Убедитесь, что в FileZilla установлен режим Binary в разделе Transfer > Transfer Type > Binary.

    Альтернативные методы загрузки

    FTP не всегда является подходящим инструментом. Следующие альтернативы заслуживают внимания:

    Файловый менеджер cPanel / Plesk: Доступен через веб-панель управления на Shared Web Hosting и VPS Control Panels. Подходит для небольших правок и загрузки отдельных файлов. В большинстве реализаций имеет ограничение на размер файла в 2 GB и не подходит для массовой передачи.

    SCP (Secure Copy): Простой, поддающийся автоматизации инструмент копирования на основе SSH. Не поддерживает возобновление передачи и просмотр каталогов, но чрезвычайно надёжен для однократной передачи:

    scp -r /local/project/ user@your-server.com:/public_html/

    Развёртывание на основе Git: Отправьте данные в пустой репозиторий на сервере и используйте хук post-receive для извлечения файлов в корневой каталог веб-сайта. Это наиболее чистый паттерн развёртывания кода — он обеспечивает историю версий, возможность отката и полностью устраняет необходимость ручного управления файлами.

    Синхронизация с объектным хранилищем / CDN: Для статических ресурсов синхронизация с S3-совместимым хранилищем и раздача через CDN более масштабируема, чем развёртывание через FTP, и полностью исключает веб-сервер из пути доставки статических ресурсов.

    Матрица быстрого выбора: выбор подходящего метода передачи

    СценарийРекомендуемый метод
    Разовое редактирование файла на виртуальном хостингеФайловый менеджер cPanel
    Регулярное развёртывание сайта без SSHSFTP через FileZilla
    Автоматизированное развёртывание в CI/CD-конвейере`lftp` или `rsync` через SSH
    Большой двоичный файл, однократная передача`scp`
    Инкрементальное развёртывание кода`rsync` или Git post-receive hook
    Устаревшая система, требующая FTPМинимум FTPS (явный TLS)
    Массовое развёртывание статических ресурсовСинхронизация с S3-совместимым объектным хранилищем

    Технический чеклист перед запуском в рабочую среду

    • Протокол: Только SFTP или FTPS — никогда не используйте обычный FTP на рабочем сервере
    • Учётные данные: Используйте выделенные учётные записи FTP/SFTP с минимально необходимым доступом к каталогу, а не root или основного системного пользователя
    • Режим передачи: Binary, а не Auto или ASCII
    • Права доступа к файлам: 644 для файлов, 755 для каталогов — проверяется после загрузки
    • Конфиденциальные файлы: Убедитесь, что .env, .git/, node_modules/ и файлы конфигурации с учётными данными исключены из загрузки с помощью фильтров имён файлов
    • Проверка контрольных сумм: Сравнение MD5 или SHA-256 для критически важных файлов после передачи
    • Пассивный режим: Включён по умолчанию в FTP-клиенте
    • SSH-ключи: Используйте аутентификацию на основе ключей для SFTP на любом сервере, которым вы управляете; при возможности отключите аутентификацию по паролю в sshd_config

    Часто задаваемые вопросы

    В чём разница между FTP и SFTP?

    FTP передаёт данные и учётные данные в открытом виде через два отдельных TCP-канала (управляющий на порту 21, данные на порту 20 или эфемерном). SFTP — это совершенно другой протокол, построенный поверх SSH, который мультиплексирует всё через единый зашифрованный канал на порту 22. Они имеют схожие названия, но не имеют общего кода протокола.

    Почему FileZilla показывает «Connection timed out» даже при правильных учётных данных?

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

    Можно ли использовать FTP для загрузки файлов на VPS без панели управления?

    Да. Установите SSH-демон с поддержкой SFTP (OpenSSH, который является стандартным для всех дистрибутивов Linux) — дополнительное программное обеспечение FTP-сервера не требуется. Подключитесь с помощью FileZilla, используя протокол SFTP на порту 22 и ваши SSH-учётные данные или пару ключей. Это рекомендуемый подход для любой среды VPS Hosting.

    Какие права доступа должны иметь файлы WordPress после загрузки по FTP?

    Основные файлы WordPress должны иметь права 644, каталоги — 755, а wp-config.php — 600 (только чтение/запись для владельца). Каталог wp-content/uploads требует прав 755 или 775, чтобы веб-сервер мог записывать загружаемые медиафайлы. Никогда не устанавливайте права 777 ни для одного каталога WordPress.

    Существует ли ограничение на размер файла при загрузке через FTP?

    FTP и SFTP сами по себе не накладывают никаких ограничений на размер файла — передача осуществляется потоком. Практические ограничения обусловлены дисковыми квотами на стороне сервера, параметром PHP upload_max_filesize (не имеет значения для FTP, который полностью обходит PHP) или ограничениями файловой системы (ext4 поддерживает файлы размером до 16 TB). Для Shared Web Hosting хостинг-провайдер может устанавливать дисковую квоту, ограничивающую общий объём хранилища, а не размер отдельного файла.

    15%

    Сэкономьте 15% на всех хостинговых услугах

    Проверьте свои навыки и получите скидку на любой тарифный план

    Используйте код:

    Skills
    Начать