Протокол передачи файлов ( FTP ) — это стандартный протокол связи, используемый для передачи компьютерных файлов с сервера на клиент в компьютерной сети . FTP построен на архитектуре клиент-серверной модели с использованием отдельных соединений управления и данных между клиентом и сервером. [1] Пользователи FTP могут аутентифицировать себя с помощью протокола входа в систему с открытым текстом , обычно в виде имени пользователя и пароля, но могут подключаться анонимно, если сервер настроен так, чтобы это разрешать. Для безопасной передачи, которая защищает имя пользователя и пароль и шифрует содержимое, FTP часто защищается с помощью SSL/TLS ( FTPS ) или заменяется на SSH File Transfer Protocol ( 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 года) включает Firewall-Friendly FTP (пассивный режим), RFC 2228 (июнь 1997 года) предлагает расширения безопасности, RFC 2428 (сентябрь 1998 года) добавляет поддержку IPv6 и определяет новый тип пассивного режима. [8]
FTP может работать в активном или пассивном режиме, который определяет, как устанавливается соединение для передачи данных. [9] (Это значение «режима» отличается от значения команды MODE в протоколе FTP.)
Оба режима были обновлены в сентябре 1998 года для поддержки IPv6 . В то же время были внесены дальнейшие изменения в пассивный режим, обновив его до расширенного пассивного режима . [12]
Сервер отвечает по управляющему соединению трехзначными кодами статуса в ASCII с необязательным текстовым сообщением. Например, «200» (или «200 OK») означает, что последняя команда была успешной. Цифры представляют собой код ответа, а необязательный текст представляет собой понятное человеку объяснение или запрос (например, <Нужна учетная запись для хранения файла>). [1] Текущая передача данных файла по управляющему соединению может быть прервана с помощью сообщения о прерывании, отправленного по управляющему соединению.
FTP требует два порта (один для отправки и один для получения), поскольку изначально он был разработан для работы поверх Network Control Protocol (NCP), который был симплексным протоколом , который использовал два адреса портов , устанавливая два соединения для двусторонней связи. Нечетный и четный порт были зарезервированы для каждого приложения или протокола прикладного уровня . Стандартизация TCP и UDP снизила необходимость использования двух симплексных портов для каждого приложения до одного дуплексного порта, [13] : 15, но протокол FTP никогда не менялся, чтобы использовать только один порт, и продолжал использовать два для обратной совместимости.
FTP обычно передает данные, заставляя сервер подключаться обратно к клиенту после отправки клиентом команды PORT. Это проблематично как для NAT , так и для брандмауэров, которые не разрешают соединения из Интернета к внутренним хостам. [14] Для NAT дополнительная сложность заключается в том, что представление IP-адресов и номера порта в команде PORT относится к IP-адресу и порту внутреннего хоста, а не к публичному IP-адресу и порту NAT.
Есть два подхода к решению этой проблемы. Один из них заключается в том, что FTP-клиент и FTP-сервер используют команду PASV, которая устанавливает соединение данных от FTP-клиента к серверу. [14] Это широко используется современными FTP-клиентами. Другой подход заключается в том, что NAT изменяет значения команды PORT, используя для этой цели шлюз прикладного уровня . [14]
При передаче данных по сети определены пять типов данных: [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 , иногда называемый «Mode Z» по команде, которая его включает. Этот режим был описан в Internet Draft , но не стандартизирован. [16]
GridFTP определяет дополнительные режимы, MODE E [17] и MODE X [18] , как расширения MODE B.
Более поздние реализации FTP поддерживают команду Modify Fact: Modification Time (MFMT), которая позволяет клиенту удаленно настраивать атрибут файла , что позволяет сохранять этот атрибут при загрузке файлов. [19] [20]
Для получения временной метки удаленного файла есть команда MDTM . Некоторые серверы (и клиенты) поддерживают нестандартный синтаксис команды MDTM с двумя аргументами, который работает так же, как MFMT [21]
Вход по FTP использует обычную схему имени пользователя и пароля для предоставления доступа. [2] Имя пользователя отправляется на сервер с помощью команды USER, а пароль отправляется с помощью команды PASS. [2] Эта последовательность не шифруется «на проводе», поэтому может быть уязвима для сетевой атаки сниффинга . [22] Если информация, предоставленная клиентом, принята сервером, сервер отправит приветствие клиенту, и сеанс начнется. [2] Если сервер поддерживает это, пользователи могут войти в систему без предоставления учетных данных для входа, но тот же сервер может разрешить только ограниченный доступ для таких сеансов. [2]
Хост, предоставляющий FTP-сервис, может предоставлять анонимный FTP-доступ. [2] Обычно пользователи входят в сервис с помощью «анонимной» (строчной и чувствительной к регистру учетной записи на некоторых FTP-серверах) учетной записи, когда им предлагается ввести имя пользователя. Хотя пользователей обычно просят отправить свой адрес электронной почты вместо пароля, [3] на самом деле никакая проверка предоставленных данных не выполняется. [23] Многие FTP-хосты, целью которых является предоставление обновлений программного обеспечения, разрешают анонимный вход. [3]
HTTP по сути исправляет ошибки FTP, из-за которых его было неудобно использовать для множества небольших кратковременных передач, типичных для веб-страниц.
FTP имеет управляющее соединение с сохранением состояния, которое поддерживает текущий рабочий каталог и другие флаги, и каждая передача требует вторичного соединения, через которое передаются данные. В «пассивном» режиме это вторичное соединение от клиента к серверу, тогда как в «активном» режиме по умолчанию это соединение от сервера к клиенту. Это очевидное изменение ролей в активном режиме и случайные номера портов для всех передач являются причиной того, почему брандмауэры и шлюзы NAT испытывают такие трудности с FTP. HTTP не имеет состояния и мультиплексирует управление и данные по одному соединению от клиента к серверу на известных номерах портов, которое тривиально проходит через шлюзы NAT и которым легко управлять брандмауэрам.
Настройка управляющего соединения FTP довольно медленная из-за задержек в обоих направлениях при отправке всех требуемых команд и ожидании ответов, поэтому принято устанавливать управляющее соединение и удерживать его открытым для нескольких передач файлов, а не разрывать и заново устанавливать сеанс каждый раз. Напротив, HTTP изначально разрывал соединение после каждой передачи, потому что это было очень дешево. Хотя впоследствии HTTP получил возможность повторно использовать TCP-соединение для нескольких передач, концептуальная модель по-прежнему представляет собой независимые запросы, а не сеанс.
Когда FTP передает данные через соединение для передачи данных, управляющее соединение простаивает. Если передача занимает слишком много времени, брандмауэр или NAT могут решить, что управляющее соединение мертво, и прекратить его отслеживание, фактически разрывая соединение и нарушая загрузку. Единственное HTTP-соединение простаивает только между запросами, и это нормально и ожидаемо, что такие соединения будут сброшены после тайм-аута.
Многие файловые менеджеры, как правило, имеют реализованный FTP-доступ, например File Explorer (ранее Windows Explorer) в Microsoft Windows . Этот клиент рекомендуется только для небольших передач файлов с сервера из-за ограничений по сравнению со специализированным клиентским программным обеспечением. [24] Он не поддерживает SFTP . [25]
Оба собственных файловых менеджера для KDE на Linux ( Dolphin и Konqueror ) поддерживают как FTP, так и SFTP. [26] [27]
На Android файловый менеджер My Files на Samsung Galaxy имеет встроенный FTP и SFTP- клиент. [28]
В течение долгого времени большинство распространенных веб-браузеров могли извлекать файлы, размещенные на FTP-серверах, хотя не все из них поддерживали расширения протокола, такие как FTPS . [3] [29] Когда предоставляется FTP-адрес, а не HTTP- адрес , доступное содержимое на удаленном сервере представляется способом, аналогичным тому, который используется для другого веб-содержимого.
Google Chrome полностью удалил поддержку FTP в Chrome 88, что также повлияло на другие браузеры на базе Chromium , такие как Microsoft Edge . [30] Firefox 88 отключил поддержку FTP по умолчанию, а Firefox 90 полностью прекратил ее поддержку. [31] [4]
FireFTP — это устаревшее расширение браузера, которое было разработано как полнофункциональный FTP-клиент для работы в Firefox , но когда Firefox прекратил поддержку FTP, разработчик расширения рекомендовал использовать Waterfox . [32] Некоторые браузеры, такие как текстовый Lynx , по-прежнему поддерживают FTP. [33]
Синтаксис FTP URL описан в 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 [34] и Internet Explorer [35] ). По умолчанию большинство веб-браузеров используют пассивный режим (PASV), который легче обходит межсетевые экраны конечного пользователя.
Существуют некоторые различия в том, как различные браузеры обрабатывают разрешение пути в случаях, когда у пользователя есть некорневой домашний каталог. [36]
Большинство распространенных менеджеров закачек могут получать файлы, размещенные на FTP-серверах, а некоторые из них также предоставляют интерфейс для извлечения файлов, размещенных на FTP-серверах. DownloadStudio позволяет не только загружать файл с FTP-сервера, но и просматривать список файлов на FTP-сервере. [37]
LibreOffice объявил, что поддержка FTP устарела с версии 7.4, позднее она была удалена в версии 24.2. [38] [39]
FTP не был разработан как безопасный протокол и имеет много уязвимостей безопасности. [40] В мае 1999 года авторы RFC 2577 перечислили уязвимость, приводящую к следующим проблемам:
FTP не шифрует свой трафик; все передачи осуществляются открытым текстом, а имена пользователей, пароли, команды и данные могут быть прочитаны любым человеком, способным выполнить захват пакетов ( сниффинг ) в сети. [2] [40] Эта проблема характерна для многих спецификаций интернет-протоколов (таких как SMTP , Telnet , POP и IMAP ), которые были разработаны до создания механизмов шифрования, таких как TLS или SSL. [8]
Распространенные решения этой проблемы включают в себя:
FTP через SSH — это практика туннелирования обычного сеанса FTP через соединение Secure Shell. [40] Поскольку 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.
Trivial File Transfer Protocol (TFTP) — это простой FTP с фиксированным шагом, который позволяет клиенту получать файл с удаленного хоста или помещать его на него. Одно из его основных применений — ранние этапы загрузки из локальной сети , поскольку TFTP очень прост в реализации. TFTP не обеспечивает безопасности и большинства расширенных функций, предлагаемых более надежными протоколами передачи файлов, такими как File Transfer Protocol. TFTP был впервые стандартизирован в 1981 году, а текущую спецификацию протокола можно найти в RFC 1350.
Simple File Transfer Protocol (первый протокол, сокращенно SFTP), как определено RFC 913, был предложен как (незащищенный) протокол передачи файлов с уровнем сложности, промежуточным между TFTP и FTP. Он никогда не был широко принят в Интернете , и теперь IETF присвоил ему статус Historic . Он работает через порт 115 и часто получает инициализацию SFTP . Он имеет набор команд из 11 команд и поддерживает три типа передачи данных: ASCII , двоичный и непрерывный. Для систем с размером слова , кратным 8 битам, реализация двоичного и непрерывного одинакова. Протокол также поддерживает вход с идентификатором пользователя и паролем, иерархические папки и управление файлами (включая переименование , удаление , загрузку , загрузку , загрузку с перезаписью и загрузку с добавлением ).
Ниже приведена сводка кодов ответов FTP , которые может возвращать FTP- сервер . Эти коды были стандартизированы в RFC 959 IETF. Код ответа представляет собой трехзначное значение. Первая цифра используется для указания одного из трех возможных результатов — успеха, неудачи или для указания ошибки или неполного ответа:
Вторая цифра определяет вид ошибки:
Третья цифра кода ответа используется для предоставления дополнительных сведений по каждой из категорий, определенных второй цифрой.
{{cite web}}
: CS1 maint: bot: original URL status unknown (link)Написано для IE версии 6 и более ранних. Может работать и с более новыми версиями.