Введение
Стандартный протокол для передачи файлов по сетям TCP/IP
Протокол передачи файлов (FTP) — это стандартный коммуникационный протокол, используемый для передачи компьютерных файлов с сервера на клиент в компьютерной сети. FTP основан на архитектуре клиент-сервер с использованием отдельных каналов управления и данных между клиентом и сервером. Пользователи FTP могут проходить аутентификацию с помощью протокола простого текстового входа, обычно в форме имени пользователя и пароля, но могут подключаться анонимно, если сервер настроен на это. Для безопасной передачи, защищающей имя пользователя и пароль и шифрующей содержимое, FTP часто защищается с помощью SSL/TLS (FTPS) или заменяется протоколом передачи файлов SSH (SFTP). Первые клиентские приложения FTP были программами командной строки, разработанными до появления графических пользовательских интерфейсов в операционных системах, и до сих пор поставляются с большинством операционных систем Windows, Unix и Linux. Два основных производителя веб-браузеров отказались от его поддержки, поскольку он был вытеснен более безопасными SFTP и FTPS, хотя ни один из них не реализовал новые протоколы.
История FTP-серверов
Оригинальная спецификация протокола передачи файлов была написана Абхаем Бушаном и опубликована 16 апреля 1971 года. До 1980 года FTP работал по протоколу NCP, предшественнику TCP/IP.
Связь и передача данных
FTP может работать в активном или пассивном режиме, что определяет способ установления соединения данных. (Это значение термина "режим" отличается от значения команды MODE в протоколе FTP.) В активном режиме клиент начинает прослушивать входящие соединения данных от сервера на порту M. Он отправляет команду FTP PORT M, чтобы сообщить серверу, на каком порту он ожидает подключения. Затем сервер инициирует канал данных к клиенту со своего порта 20, порта данных FTP-сервера. В ситуациях, когда клиент находится за файрволом и не может принимать входящие TCP-соединения, может быть использован пассивный режим. В этом режиме клиент использует управляющее соединение для отправки команды PASV серверу и затем получает от сервера IP-адрес и номер порта сервера. Оба режима были обновлены в сентябре 1998 года для поддержки IPv6. В то же время в пассивный режим были внесены дополнительные изменения, обновившие его до расширенного пассивного режима. Сервер отвечает по управляющему соединению трехзначными кодами состояния в ASCII с необязательным текстовым сообщением. Например, "200" (или "200 OK") означает, что последняя команда выполнена успешно. Числа представляют собой код ответа, а необязательный текст – удобочитаемое объяснение или запрос (например, <Требуется учетная запись для хранения файла>). Однако протокол FTP никогда не был изменен для использования только одного порта и продолжал использовать два порта для обеспечения обратной совместимости.
Both modes were updated in September 1998 to support IPv6. Further changes were introduced to the passive mode at that time, updating it to extended passive mode. The server responds over the control connection with three digit status codes in ASCII with an optional text message. For example, "200" (or "200 OK") means that the last command was successful. The numbers represent the code for the response and the optional text represents a human readable explanation or request (e. g. <Need account for storing file>). but the FTP protocol was never altered to only use one port, and continued using two for backwards compatibility.
Файловые структуры
Организация файла задается командой STRU. Следующие структуры файлов определены в разделе 3.1.1 RFC959:
F или FILE (потоковая). Файлы рассматриваются как произвольная последовательность байтов, символов или слов. Это обычная структура файлов в системах Unix и других системах, таких как CP/M, MS DOS и Microsoft Windows. (Раздел 3.1.1.1)
R или RECORD (структура, ориентированная на записи). Файлы рассматриваются как разделенные на записи, которые могут быть фиксированной или переменной длины. Такая организация файлов распространена в системах класса мэйнфрейм и системах среднего уровня, таких как MVS, VM/CMS, OS/400 и VMS, поддерживающих файловые системы, ориентированные на записи.
P или PAGE (структура, ориентированная на страницы). Файлы разделены на страницы, которые могут содержать данные или метаданные; каждая страница также может иметь заголовок с различными атрибутами. Эта структура файлов была специально разработана для систем TENEX и, как правило, не поддерживается на других платформах. В разделе 4.1.2.3 RFC1123 рекомендуется не реализовывать эту структуру. Большинство современных FTP-клиентов и серверов поддерживают только STRU F. STRU R до сих пор используется в приложениях для передачи файлов в системах класса мэйнфрейм и миникомпьютерах.
F or FILE structure (stream oriented). Files are viewed as an arbitrary sequence of bytes, characters or words. This is the usual file structure on Unix systems and other systems such as CP/M, MS DOS and Microsoft Windows. (Section 3.1.1.1)
R or RECORD structure (record oriented). Files are viewed as divided into records, which may be fixed or variable length. This file organization is common on mainframe and midrange systems, such as MVS, VM/CMS, OS/400 and VMS, which support record oriented filesystems. P or PAGE structure (page oriented). Files are divided into pages, which may either contain data or metadata; each page may also have a header giving various attributes. This file structure was specifically designed for TENEX systems, and is generally not supported on other platforms. RFC1123 section 4.1.2.3 recommends that this structure not be implemented. Most contemporary FTP clients and servers only support STRU F. STRU R is still in use in mainframe and minicomputer file transfer applications.
Дополнительные команды
Более поздние реализации FTP поддерживают команду Modify Fact: Modification Time (MFMT), которая позволяет клиенту удалённо изменять это атрибут файла, обеспечивая его сохранение при загрузке файлов. Для получения временной метки удалённого файла используется команда MDTM. Некоторые серверы (и клиенты) поддерживают нестандартный синтаксис команды MDTM с двумя аргументами, работающий аналогично MFMT.
Вход в систему
Вход в FTP использует стандартную схему имени пользователя и пароля для предоставления доступа. Если информация, предоставленная клиентом, принята сервером, сервер отправит приветствие, и начнется сеанс. Фактической проверки предоставленных данных не производится. Многие FTP-серверы, предназначенные для предоставления обновлений программного обеспечения, разрешают анонимный вход. Он не поддерживает SFTP. Как FTP, так и SFTP поддерживаются встроенными файловыми менеджерами KDE на Linux (Dolphin и Konqueror). На Android файловый менеджер My Files на Samsung Galaxy имеет встроенные FTP- и SFTP-клиенты.
Веб-браузер
В течение долгого времени большинство распространенных веб-браузеров могли загружать файлы, размещенные на FTP-серверах, хотя не все из них поддерживали расширения протокола, такие как FTPS. При указании FTP-адреса вместо HTTP-адреса, доступное содержимое на удаленном сервере отображается аналогично другому веб-контенту. Google Chrome полностью убрал поддержку FTP в версии 88, что также затронуло другие браузеры, основанные на Chromium, такие как Microsoft Edge. Firefox 88 отключил поддержку FTP по умолчанию, а в Firefox 90 она была полностью удалена. Некоторые браузеры, например Lynx, по-прежнему поддерживают FTP.
Синтаксис
Синтаксис FTP URL описан в , и имеет вид: ftp://[user[:password]@]host[:port]/[url path] (части в квадратных скобках являются необязательными). Например, URL ftp://public.ftp-серверы.example.com/mydirectory/myfile.txt представляет собой файл myfile.txt из каталога mydirectory на сервере public.ftp-серверы.example.com как FTP-ресурс. URL ftp://user001:secretpassword@private.ftp-серверы.example.com/mydirectory/myfile.txt включает указание имени пользователя и пароля, которые необходимо использовать для доступа к этому ресурсу. Более подробную информацию об указании имени пользователя и пароля можно найти в документации браузеров (например, Firefox и Internet Explorer). По умолчанию большинство веб-браузеров используют пассивный (PASV) режим, который легче преодолевает брандмауэры конечных пользователей. Существуют некоторые различия в том, как разные браузеры обрабатывают разрешение путей в случаях, когда у пользователя есть не корневой домашний каталог.
Менеджер загрузки
Большинство популярных менеджеров загрузок умеют принимать файлы, размещенные на FTP-серверах, а некоторые также предоставляют интерфейс для их получения. DownloadStudio позволяет не только загружать файлы с FTP-сервера, но и просматривать список файлов на FTP-сервере.
Другое
LibreOffice объявил поддержку FTP устаревшей, начиная с выпуска 7.4, а в выпуске 24.2 она была полностью удалена.
FTPS
Explicit FTPS — это расширение стандарта FTP, позволяющее клиентам запрашивать шифрование сеансов FTP. Это достигается отправкой команды "AUTH TLS". Сервер может разрешать или запрещать подключения, не запрашивающие TLS. Это расширение протокола определено в RFC. Implicit FTPS — устаревший стандарт для FTP, который требовал обязательного использования соединения SSL или TLS. Он был разработан для использования портов, отличных от портов обычного FTP.
Протокол передачи файлов SSH
Протокол передачи файлов SSH (хронологически второй из двух протоколов с аббревиатурой SFTP) предназначен для передачи файлов и имеет схожий набор команд для пользователей, но использует протокол Secure Shell (SSH) для осуществления передачи. В отличие от FTP, он шифрует как команды, так и данные, предотвращая передачу паролей и конфиденциальной информации в открытом виде по сети. Он несовместим с программным обеспечением FTP, хотя некоторые FTP-клиенты также поддерживают протокол передачи файлов SSH.
Протокол передачи файлов
Протокол тривиальной передачи файлов (TFTP) — это упрощенный, пошаговый протокол, являющийся вариантом FTP, который позволяет клиенту получать файл с удаленного хоста или передавать файл на удаленный хост. Одно из основных его применений — на начальных этапах загрузки по локальной сети, поскольку TFTP очень прост в реализации. TFTP не имеет средств защиты и большинства расширенных функций, предлагаемых более надежными протоколами передачи файлов, такими как File Transfer Protocol. TFTP был впервые стандартизирован в 1981 году, а текущую спецификацию протокола можно найти в .
Простой протокол передачи файлов
Простой протокол передачи файлов (первый протокол, сокращенно SFTP), как определено в , был предложен как незащищенный протокол передачи файлов со сложностью, промежуточной между TFTP и FTP. Он так и не получил широкого распространения в Интернете и в настоящее время имеет статус "исторический", присвоенный IETF. Он работает через порт 115 и часто обозначается аббревиатурой SFTP. Протокол включает в себя набор из 11 команд и поддерживает три типа передачи данных: ASCII, двоичный и непрерывный. Для систем с размером слова, кратным 8 битам, реализации двоичной и непрерывной передачи идентичны. Протокол также поддерживает вход в систему по имени пользователя и паролю, иерархическую структуру папок и управление файлами (включая переименование, удаление, загрузку, скачивание, скачивание с перезаписью и скачивание с добавлением).