Протокол передачи файлов ( FTP ) — это стандартный протокол связи , используемый для передачи компьютерных файлов с сервера клиенту в компьютерной сети . FTP построен на архитектуре модели клиент-сервер с использованием отдельных соединений управления и передачи данных между клиентом и сервером. [1] Пользователи FTP могут аутентифицировать себя с помощью текстового протокола входа, обычно в виде имени пользователя и пароля, но могут подключаться анонимно, если сервер настроен на это. Для безопасной передачи, которая защищает имя пользователя и пароль и шифрует содержимое, FTP часто защищается с помощью SSL/TLS ( FTPS ) или заменяется протоколом передачи файлов SSH (SFTP).
Первые клиентские приложения FTP представляли собой программы командной строки, разработанные до того, как операционные системы имели графический интерфейс пользователя , и до сих пор поставляются с большинством операционных систем Windows , Unix и Linux . [2] [3] С тех пор было разработано множество специализированных FTP- клиентов и утилит автоматизации для настольных компьютеров , серверов, мобильных устройств и оборудования, а FTP был включен в приложения для повышения производительности, такие как редакторы HTML и файловые менеджеры .
FTP-клиент обычно интегрировался в веб-браузеры , где файловые серверы просматриваются с префиксом URIftp://
" ". В 2021 году поддержка FTP была прекращена Google Chrome и Firefox, [4] [5] двумя крупными поставщиками веб-браузеров, поскольку ее заменили более безопасные SFTP и FTPS; хотя ни один из них не реализовал новые протоколы. [6] [7]
Первоначальная спецификация протокола передачи файлов была написана Абхаем Бхушаном и опубликована как RFC 114 16 апреля 1971 года. До 1980 года FTP работал на NCP , предшественнике TCP/IP . [2] Позже протокол был заменен версиями TCP/IP, RFC 765 (июнь 1980 г.) и RFC 959 (октябрь 1985 г.), текущей спецификацией. Несколько предложенных стандартов вносят поправки в RFC 959, например, RFC 1579 (февраль 1994 г.) включает FTP, дружественный к межсетевому экрану (пассивный режим), RFC 2228 (июнь 1997 г.) предлагает расширения безопасности, RFC 2428 (сентябрь 1998 г.) добавляет поддержку IPv6 и определяет новый тип. пассивного режима. [8]
FTP может работать в активном или пассивном режиме, который определяет способ установления соединения для передачи данных. [9] (Этот смысл «режима» отличается от значения команды MODE в протоколе FTP.)
Оба режима были обновлены в сентябре 1998 года для поддержки IPv6 . В то время в пассивный режим были внесены дальнейшие изменения, обновившие его до расширенного пассивного режима . [11]
Сервер отвечает по управляющему соединению трехзначными кодами состояния в формате ASCII и дополнительным текстовым сообщением. Например, «200» (или «200 ОК») означает, что последняя команда выполнена успешно. Цифры представляют собой код ответа, а необязательный текст представляет собой удобочитаемое объяснение или запрос (например, <Нужна учетная запись для хранения файла>). [1] Текущая передача файловых данных по соединению для передачи данных может быть прервана с помощью сообщения о прерывании, отправленного по управляющему соединению.
FTP требует два порта (один для отправки и один для приема), поскольку изначально он был разработан для работы поверх протокола управления сетью (NCP), который представлял собой симплексный протокол , который использовал два адреса портов , устанавливая два соединения для двусторонней связи. . Нечетный и четный порт были зарезервированы для каждого приложения или протокола прикладного уровня . Стандартизация TCP и UDP сократила необходимость использования двух симплексных портов для каждого приложения до одного дуплексного порта, [12] : 15 , но протокол FTP никогда не изменялся, чтобы использовать только один порт, и продолжал использовать два для обратной совместимости. .
FTP обычно передает данные путем обратного подключения сервера к клиенту после отправки клиентом команды PORT. Это проблематично как для NAT , так и для межсетевых экранов, которые не разрешают подключения из Интернета к внутренним хостам. [13] Для NAT дополнительной сложностью является то, что представление IP-адресов и номеров портов в команде PORT относится к IP-адресу и порту внутреннего хоста, а не к общедоступному IP-адресу и порту NAT.
Есть два подхода к решению этой проблемы. Во-первых, FTP-клиент и FTP-сервер используют команду PASV, которая вызывает установку соединения для передачи данных от FTP-клиента к серверу. [13] Это широко используется современными FTP-клиентами. Другой подход заключается в том, чтобы NAT изменил значения команды PORT, используя для этой цели шлюз уровня приложения . [13]
При передаче данных по сети определяются пять типов данных: [2] [3] [8]
Обратите внимание, что эти типы данных обычно называются «режимами», хотя неоднозначно это слово также используется для обозначения режима связи «активный-пассивный» (см. Выше) и режимов, устанавливаемых командой MODE протокола FTP (см. Ниже).
Для текстовых файлов (ТИП A и ТИП E) предусмотрены три различных параметра управления форматом, позволяющие контролировать способ печати файла:
Эти форматы в основном относились к линейным принтерам ; большинство современных FTP-клиентов/серверов поддерживают только управление форматом по умолчанию N.
Организация файлов задается с помощью команды STRU. Следующие файловые структуры определены в разделе 3.1.1 RFC959:
Большинство современных FTP-клиентов и серверов поддерживают только STRU F. STRU R до сих пор используется в приложениях для передачи файлов на мейнфреймах и мини-компьютерах.
Передача данных может осуществляться в любом из трех режимов: [1] [2]
Большинство современных FTP-клиентов и серверов не поддерживают MODE B или MODE C; Исключением являются FTP-клиенты и серверы для операционных систем мэйнфреймов и мини-компьютеров.
Некоторые программы FTP также реализуют режим сжатия на основе DEFLATE , иногда называемый «Режим Z» по имени команды, которая его включает. Этот режим был описан в Интернет-проекте , но не стандартизирован. [15]
GridFTP определяет дополнительные режимы, MODE E [16] и MODE X, [17] как расширения MODE B.
Более поздние реализации FTP поддерживают команду «Изменить факт: время модификации» (MFMT), которая позволяет клиенту удаленно настраивать этот атрибут файла , обеспечивая сохранение этого атрибута при загрузке файлов. [18] [19]
Чтобы получить временную метку удаленного файла, существует команда MDTM . Некоторые серверы (и клиенты) поддерживают нестандартный синтаксис команды MDTM с двумя аргументами, который работает так же, как MFMT [20].
Для входа в FTP используется обычная схема имени пользователя и пароля для предоставления доступа. [2] Имя пользователя отправляется на сервер с помощью команды USER, а пароль отправляется с помощью команды PASS. [2] Эта последовательность не зашифрована «по проводу», поэтому может быть уязвима для атаки с перехватом сети . [21] Если информация, предоставленная клиентом, принимается сервером, сервер отправит приветствие клиенту, и сеанс начнется. [2] Если сервер поддерживает это, пользователи могут входить в систему без предоставления учетных данных, но тот же сервер может разрешать только ограниченный доступ для таких сеансов. [2]
Хост, предоставляющий службу FTP, может предоставлять анонимный доступ по FTP. [2] Пользователи обычно входят в службу с «анонимной» учетной записью (на некоторых FTP-серверах с учетом нижнего регистра и с учетом регистра) при запросе имени пользователя. Хотя пользователей обычно просят отправить адрес электронной почты вместо пароля, [3] на самом деле никакая проверка предоставленных данных не выполняется. [22] Многие FTP-хосты, целью которых является предоставление обновлений программного обеспечения, допускают анонимный вход в систему. [3]
HTTP, по сути, исправляет ошибки FTP, из-за которых его было неудобно использовать для небольших эфемерных передач, типичных для веб-страниц.
FTP имеет соединение с контролем состояния, которое поддерживает текущий рабочий каталог и другие флаги, и для каждой передачи требуется вторичное соединение, через которое передаются данные. В «пассивном» режиме это вторичное соединение осуществляется от клиента к серверу, тогда как в «активном» режиме по умолчанию это соединение осуществляется от сервера к клиенту. Эта очевидная смена ролей в активном режиме и случайные номера портов для всех передач — вот почему брандмауэры и шлюзы NAT так плохо справляются с FTP. HTTP не сохраняет состояние и мультиплексирует управление и данные по одному соединению от клиента к серверу по хорошо известным номерам портов, которые тривиально проходят через шлюзы NAT и просты в управлении межсетевыми экранами.
Настройка управляющего соединения FTP происходит довольно медленно из-за двусторонних задержек при отправке всех необходимых команд и ожидании ответов, поэтому принято устанавливать управляющее соединение и удерживать его открытым для нескольких передач файлов, а не отключать и повторно - каждый раз устанавливать сеанс заново. Напротив, HTTP изначально разрывал соединение после каждой передачи, потому что это было очень дешево. Хотя HTTP впоследствии получил возможность повторно использовать TCP-соединение для нескольких передач, концептуальная модель по-прежнему представляет собой независимые запросы, а не сеанс.
Когда FTP передает данные через соединение для передачи данных, управляющее соединение простаивает. Если передача занимает слишком много времени, межсетевой экран или NAT могут решить, что управляющее соединение прервано, и прекратить его отслеживание, что фактически разрывает соединение и затрудняет загрузку. Единственное HTTP-соединение простаивает только между запросами, и это нормально, и ожидается, что такие соединения будут разорваны после тайм-аута.
Многие файловые менеджеры, как правило, реализуют доступ по FTP, например Проводник (ранее Проводник Windows) в Microsoft Windows . Этот клиент рекомендуется только для передачи небольших файлов с сервера из-за ограничений по сравнению со специальным клиентским программным обеспечением. [23] Он не поддерживает SFTP . [24]
Оба встроенных файловых менеджера KDE в Linux ( Dolphin и Konqueror ) поддерживают как FTP, так и SFTP. [25] [26]
В Android файловый менеджер «Мои файлы» на Samsung Galaxy имеет встроенный клиент FTP и SFTP . [27]
В течение долгого времени большинство распространенных веб-браузеров могли получать файлы, размещенные на FTP-серверах, хотя не все из них поддерживали расширения протокола, такие как FTPS . [3] [28] Когда указан URL -адрес FTP, а не HTTP , доступное содержимое на удаленном сервере представляется таким же образом, как и для другого веб-контента.
Google Chrome полностью удалил поддержку FTP в Chrome 88, что также затронуло другие браузеры на базе Chromium , такие как Microsoft Edge . [29] В Firefox 88 по умолчанию отключена поддержка FTP, а в Firefox 90 поддержка полностью прекращена. [30] [4]
FireFTP — это прекращенное расширение браузера, которое было разработано как полнофункциональный FTP-клиент для запуска в Firefox , но когда Firefox отказался от поддержки FTP, разработчик расширения рекомендовал использовать Waterfox . [31] Некоторые браузеры, такие как текстовый Lynx , по-прежнему поддерживают FTP. [32]
Синтаксис URL-адреса FTP описан в RFC 1738 и имеет форму: (части в квадратных скобках являются необязательными).ftp://[user[:password]@]host[:port]/[url-path]
Например, URL-адрес ftp://public.ftp-servers.example.com/mydirectory/myfile.txt представляет файл myfile.txt из каталога mydirectory на сервере public.ftp-servers.example.com в качестве FTP-ресурса. . URL-адрес ftp://user001:[email protected]/mydirectory/myfile.txt добавляет спецификацию имени пользователя и пароля, которые необходимо использовать для доступа к этому ресурсу.
Более подробную информацию об указании имени пользователя и пароля можно найти в документации браузеров (например, Firefox [33] и Internet Explorer [34] ). По умолчанию большинство веб-браузеров используют пассивный режим (PASV), который легче преодолевает брандмауэры конечных пользователей.
Существуют некоторые различия в том, как разные браузеры обрабатывают разрешение пути в случаях, когда у пользователя есть некорневой домашний каталог. [35]
Большинство распространенных менеджеров загрузки могут получать файлы, размещенные на FTP-серверах, а некоторые из них также предоставляют интерфейс для получения файлов, размещенных на FTP-серверах. DownloadStudio позволяет не только скачать файл с FTP-сервера, но и просмотреть список файлов на FTP-сервере. [36]
LibreOffice поддерживает открытие файлов с FTP-серверов, но начиная с версии 7.4 эта функция помечена как устаревшая, и разработчики намерены удалить ее в будущей версии. [37]
FTP не был разработан как безопасный протокол и имеет множество слабых мест в безопасности. [38] В мае 1999 года авторы RFC 2577 перечислили уязвимости к следующим проблемам:
FTP не шифрует свой трафик; все передачи передаются в виде открытого текста, а имена пользователей, пароли, команды и данные могут быть прочитаны любым, кто может выполнить перехват пакетов ( перехват ) в сети. [2] [38] Эта проблема является общей для многих спецификаций интернет-протокола (таких как SMTP , Telnet , POP и IMAP ), которые были разработаны до создания механизмов шифрования, таких как TLS или SSL. [8]
Общие решения этой проблемы включают в себя:
FTP через SSH — это практика туннелирования обычного FTP-сеанса через соединение Secure Shell. [38] Поскольку FTP использует несколько TCP- соединений (что необычно для до сих пор используемого протокола TCP/IP), туннелирование через SSH особенно затруднено. Для многих SSH-клиентов попытка настроить туннель для канала управления (начальное соединение клиент-сервер через порт 21) защитит только этот канал; при передаче данных программное обеспечение FTP на обоих концах устанавливает новые TCP-соединения (каналы данных) и, таким образом, не имеет защиты конфиденциальности или целостности .
В противном случае клиентскому программному обеспечению SSH необходимо иметь определенные знания протокола FTP, чтобы отслеживать и перезаписывать сообщения канала управления FTP и автономно открывать новые пересылки пакетов для каналов данных FTP. Пакеты программного обеспечения, поддерживающие этот режим, включают:
FTP через SSH не следует путать с протоколом передачи файлов SSH (SFTP).
Явный FTPS — это расширение стандарта FTP, которое позволяет клиентам запрашивать шифрование сеансов FTP. Это делается путем отправки команды «AUTH TLS». Сервер имеет возможность разрешать или запрещать соединения, не запрашивающие TLS. Это расширение протокола определено в RFC 4217. Неявный FTPS — это устаревший стандарт FTP, требующий использования соединения SSL или TLS. Было указано использовать порты, отличные от обычного FTP.
Протокол передачи файлов SSH (второй из двух протоколов в хронологическом порядке, сокращенно SFTP) передает файлы и имеет аналогичный набор команд для пользователей, но для передачи файлов использует протокол Secure Shell (SSH). В отличие от FTP, он шифрует как команды, так и данные, предотвращая открытую передачу паролей и конфиденциальной информации по сети. Он не может взаимодействовать с программным обеспечением FTP, хотя некоторые клиентские программы FTP также поддерживают протокол передачи файлов SSH.
Тривиальный протокол передачи файлов (TFTP) — это простой протокол FTP с блокировкой, который позволяет клиенту получать файлы с удаленного хоста или помещать его на него. Одно из его основных применений — ранние этапы загрузки из локальной сети , поскольку TFTP очень прост в реализации. TFTP лишен безопасности и большинства расширенных функций, предлагаемых более надежными протоколами передачи файлов, такими как протокол передачи файлов. TFTP был впервые стандартизирован в 1981 году, а текущую спецификацию протокола можно найти в RFC 1350.
Простой протокол передачи файлов (первый протокол, сокращенно SFTP), как определено в RFC 913, был предложен как (незащищенный) протокол передачи файлов с уровнем сложности, промежуточным между TFTP и FTP. Он никогда не был широко принят в Интернете , и теперь IETF присвоил ему исторический статус . Он работает через порт 115 и часто получает инициализм SFTP . Он имеет набор команд из 11 команд и поддерживает три типа передачи данных: ASCII , двоичный и непрерывный. Для систем с размером слова , кратным 8 битам, реализация двоичного и непрерывного форматов одинакова. Протокол также поддерживает вход с использованием идентификатора пользователя и пароля, иерархические папки и управление файлами (включая переименование , удаление , загрузку , загрузку , загрузку с перезаписью и загрузку с добавлением ).
Ниже приведена сводка кодов ответов FTP , которые могут быть возвращены FTP- сервером . Эти коды стандартизированы IETF в RFC 959. Код ответа представляет собой трехзначное значение. Первая цифра используется для обозначения одного из трех возможных результатов — успеха, неудачи или для обозначения ошибки или неполного ответа:
Вторая цифра определяет тип ошибки:
Третья цифра кода ответа используется для предоставления дополнительной информации по каждой категории, определенной второй цифрой.
{{cite web}}
: CS1 maint: bot: original URL status unknown (link)Написано для IE версии 6 и более ранних. Возможно, будет работать с более новыми версиями.