Файловый протокол. FTP-протокол. Общие сведения и особенности


FTP FTP (англ. File Transfer Protocol протокол передачи файлов) протокол, предназначенный для передачи файлов в компьютерных сетях. FTP позволяет подключаться к серверам FTP, просматривать содержимое каталогов и загружать файлы с сервера или на сервер; кроме того, возможен режим передачи файлов между серверами (см. FXP).


FTP является одним из старейших прикладных протоколов, появившимся задолго до HTTP, в 1971 году. До начала 90-х годов на долю FTP приходилось около половины трафика в сети Интернет. Он и сегодня широко используется для распространения ПО и доступа к удалённым хостам.


Протокол FTP относится к протоколам прикладного уровня и для передачи данных использует транспортный протокол TCP. Команды и данные, в отличие от большинства других протоколов передаются по разным портам. Порт 20 используется для передачи данных, порт 21 для передачи команд. В случае, если передача файла была прервана по каким-либо причинам, протокол предусматривает средства для докачки файла, что бывает очень удобно при передаче больших файлов.


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


Процесс авторизации FTP Процесс нешифрованной авторизации проходит в несколько этапов (символы \r\n означают перевод строки): 1. Установка TCP-соединения с сервером (обычно на 21 порт) 2. Посылка команды USER логин\r\n 3. Посылка команды PASS пароль\r\n После успешной авторизации можно посылать на сервер другие команды.


Анонимный вход на FTP Если к серверу разрешён анонимный доступ (как правило, лишь для загрузки данных с сервера), то в качестве логина используется ключевое слово «anonymous» или «ftp», а в качестве пароля адрес электронной почты: 1. USER anonymous\r\n 2. PASS


Основные команды протокола ABOR Прервать передачу файла CDUP Сменить директорию на вышестоящую. CWD Сменить директорию. DELE Удалить файл (DELE filename). EPSV - Войти в расширенный пассивный режим. Применяется вместо PASV. HELP Выводит список команд принимаемых сервером.


Основные команды протокола LIST Возвращает список файлов директории. Список передается через соединение данных (20 порт). MDTM Возвращает время модификации файла. MKD Создать директорию. NLST Возвращает список файлов директории в более кратком формате чем LIST. Список передается через соединение данных (20 порт). NOOP Пустая операция


Основные команды протокола PASV Войти в пассивный режим. Сервер вернет адрес и порт к которому нужно подключиться чтобы забрать данные. Передача начнется при введении следующих команд RETR, LIST и тд. PORT Войти в активный режим. Например PORT 12,34,45,56,78,89. В отличие от пассивного режима для передачи данных сервер сам подключается к клиенту. PWD Возвращает текущую директорию. QUIT Отключиться








Пример работы FTP 220 FTP server ready. USER ftp //Анонимус 230 Login successful. PASV 227 Entering Passive Mode (192,168,254,253,233,92)//Клиент должен открыть соединение на переданный IP LIST 150 Here comes the directory listing. //Сервер передает список файлов в директории 226 Directory send OK. CWD incoming 250 Directory successfully changed. PASV 227 Entering Passive Mode (192,168,254,253,207,56) STOR gyuyfotry.avi 150 Ok to send data. //Клиент передает содержимое файла 226 File receive OK. QUIT 221 Goodbye.


Аргумент 192,168,254,253,207,56 означает, что соединение от сервера ожидается на узле с IP-адресом на порту 207*256+56= На многих FTP-серверах существует каталог (под названием incoming, upload и т. п.), открытый на запись и предназначенный для закачки файлов на сервер. Это позволяет пользователям наполнять сервер свежими данными.


PASSIVE MODE Изначально протокол предполагал встречное TCP- соединение от сервера к клиенту для передачи файла или содержимого каталога. Это делало невозможным общение с сервером, если клиент находится за IP NAT, кроме того, часто запрос соединения к клиенту блокируется файерволом. Чтобы этого избежать, было разработано расширение протокола FTP passive mode, когда соединение для передачи данных тоже происходит от клиента к серверу. Важным моментом является то, что клиент устанавливает соединение с адресом и портом, указанным сервером. Порт сервер выбирает случайным образом из определённого диапазона (). Поэтому при нахождении ftp-сервера за NAT, следует явно указать в настройках сервера его адрес.


NAT-PT Специально для работы FTP-протокола через межсетевые экраны было сделано расширение NAT, называемое NAT-PT (rfc2766), позволяющее транслировать входящие соединения от сервера к клиенту через NAT. В процессе такого соединения NAT подменяет передаваемые данные от клиента, указывая серверу истинный адрес и порт, с которым сможет соединиться сервер, а потом транслирует соединение от сервера от этого адреса клиенту на его адрес. Несмотря на все меры и нововведения, принятые для поддержки FTP-протокола, на практике функция NAT-PT обычно отключается во всех роутерах и маршрутизаторах с целью обеспечения дополнительной безопасности от вирусных угроз.


FXP FXP (англ. File eXchange Protocol протокол обмена файлами) способ передачи файлов между двумя FTP-серверами напрямую, не закачивая их на свой компьютер. При FXP- сессии клиент открывает два FTP-соединения к двум разным серверам, запрашивая файл на первом сервере, указывая в команде PORT IP-адрес второго сервера. Несомненным преимуществом поддержки стандарта FXP является то, что на конечных пользователей, желающих скопировать файлы с одного FTP-сервера на другой, уже не действует ограничение пропускной способности их собственного интернет-соединения. Нет необходимости скачивать себе файл, чтобы потом положить его на другой FTP- сервер. Таким образом, время передачи файлов будет зависеть только от скорости соединения между двумя удаленными FTP- серверами, которая в большинстве случаев заведомо больше «пользовательской».


FXP К сожалению, FXP стал использоваться злоумышленникам для атак на другие серверы: в команде PORT указывается IP-адрес и порт атакуемого сервиса на компьютере жертвы, и командами RETR/STOR производится обращение на этот порт от лица FTP-сервера, а не атакующей машины, что позволяло устраивать масштабные DDoS-атаки с использованием сразу многих FTP-серверов, либо обходить систему безопасности компьютера жертвы, если он полагается только на проверку IP клиента и используемый для атаки FTP-сервер находится в доверенной сети или на шлюзе. В результате сейчас практически все серверы проверяют соответствие IP-адреса, указанного в команде PORT, IP-адресу FTP-клиента и по умолчанию запрещают использование там IP-адресов третьих сторон. Таким образом, использование FXP невозможно при работе с публичными FTP-серверами.


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


FTP-клиент Частными примерами использования FTP-клиента могут быть: Публикация страниц сайта на интернет-сервере Веб- разработчиком Cкачивание музыки, программ и любых других файлов данных обычным пользователем интернета. Данный пример зачастую даже не осознается многими пользователями как использование FTP- клиента и протокола, так как многие публичные сервера не запрашивают дополнительных данных для аутентификации пользователей, а Интернет- браузеры (также являющиеся FTP-клиентами) осуществляют скачивание файлов без дополнительных вопросов.


FTP-клиент Примерами таких программ могут служить: Интернет-браузеры (часто работают в режиме «только чтение», то есть не позволяют добавлять файлы на сервер) Многие файловые менеджеры, например: Windows Explorer (Проводник), Total Commander, FAR, Midnight Commander, Krusader Специализированные программы, например: FileZilla


Права доступа и авторизация Файловая система на удаленном сервере как правило имеет настройки прав доступа для различных пользователей. Так, например, анонимным пользователям могут быть доступны лишь некоторые файлы, о существовании других пользователи знать не будут. Другой группе пользователей могут быть доступны другие файлы или, например, в дополнение к правам на чтение файлов, могут быть также даны права на запись новых или обновление имеющихся файлов. Диапазон вариантов прав доступа зависит от операционной системы и программного обеспечения каждого конкретного FTP-сервера. Как правило, разделяют права на просмотр содержимого папки (то есть возможность получить список содержащихся в ней файлов), на чтение файла(ов), на запись (создание, удаление, обновление) файла(ов)


Для авторизации FTP-сервер, при подключении к нему FTP-клиента, запрашивает у последнего имя пользователя и пароль. Большинство FTP-клиентов в свою очередь запрашивают эти данные у пользователя в интерактивном режиме. Есть также и другой способ указать эти данные, включив их в URL FTP-сервера. Так, например, в строке ftp:// указание того, что мы используем протокол FTP vasya имя пользователя: разделитель имени пользователя и пароля key разделитель аутентификационной информации и адреса сервера ftp.example.com адрес FTP-сервера


Коды ответов FTP Первая позиция Единица означает, что команда принята к выполнению но ещё не завершена Двойка означает, что выполнение команды успешно завершено Тройка говорит о том, что команда принята и ожидается какая-либо дополнительная команда Четверка говорит о том, что в данный момент команда выполнена быть не может Пятерка означает принципиальную невозможность выполнения команды


Коды ответов FTP Вторая позиция Ноль соответствует синтаксической ошибке Единица соответствует информационному сообщению Двойка говорит о том, что сообщение относится либо к управляющему соединению, либо к соединению данных Тройка соответствует сообщениям об аутентификации пользователя и его правах Значение четверки не определено Пятерка соответствует сообщению о состоянии файловой системы




FTP (File Transfer Protocol) – это один из трёх основных протоколов Интернета (mail, www, ftp). FTP или «Протокол Передачи Файлов» – один из старейших протоколов в Интернет и входит в его стандарты. Обмен данными в FTP проходит по TCP-каналу. Построен обмен по технологии «клиент-сервер».

Протокол - это согласованный формат для передачи данных между двумя устройствами. Протокол определяет следующее:

  • как будет осуществляться проверка на ошибку;
  • метод упаковки данных (если упаковка используется);
  • каким образом посылающее устройство сообщает, что оно закончило сообщение;
  • каким образом принимающее устройство сообщает, что оно получило сообщение.

Имеется ряд стандартных (эталонных) протоколов, из которых можно выбрать подходящий. Каждый протокол имеет свои преимущества и недостатки (неудобства); например, некоторые более простые, чем другие, некоторые более надёжны, и некоторые быстрее.

С точки зрения пользователя, единственное, что его интересует в протоколе, – то, что компьютер или устройство должен поддерживать его (протокол) правильно, если Вы хотите связываться с другими компьютерами. Протокол может быть реализован или в оборудовании или в программном обеспечении.

FTP – это свод правил, которые указывают на то, как компьютеры могут совместно использовать файлы в Интернете.

Протокол FTP построен таким образом, что различные компьютеры с различным программным обеспечением и различным «железом» могут эффективно обмениваться любыми файлами.

Сегодня многие пользователи при слове ассоциируют его с warez, mp3, jpeg и mpeg форматами. Но на самом деле этот протокол используется для передачи любых видов файлов, от обычных текстовых документов до защищённых программных файлов. FTP протокол широко используется в автоматических системах проведения оплаты через Интернет и для передачи информации со спутников в космосе.

Пересылка и загрузка файлов в Интернете – столь важные рутинные задачи, что протокол FTP стал широко применяться еще до появления в Сети электронной почты. Однако с помощью этого протокола существенно проще получить доступ к файлам другого компьютера, нежели предоставить другим возможность доступа к вашим файлам и их считывания.

Технические процессы осуществления соединения с помощью протокола FTP

  • user - имя пользователя.
  • двоеточие - это разделитель для программы между именем пользователя и паролем
  • password - пароль.
  • @ - означает разделение между данными о пользователе и адресом.

Дальше идёт непосредственно адрес. Это может быть IP, либо адрес может иметь буквенное значение (ftp.ur.ru). После адреса опять идёт разделительное двоеточие, которое разделяет адрес, и номер порта к которому следует подключаться. По умолчанию этим портом является 21, но может быть любая цифра, обозначенная администратором сервера.

Адрес может выглядеть и так:

Это будет означать, что имя пользователя anonymous, паролем является E-mail адрес, а порт 21-й.

Режимы FTP

При работе по протоколу FTP между и устанавливается два соединения - управляющее (по нему идут команды) и соединение передачи данных (по нему передаются файлы). Управляющее соединение одинаково для активного и пассивного режима . Клиент инициирует TCP-соединение с динамического порта (1024-65535) к порту номер 21 на FTP-сервере и говорит "Привет! Я хочу подключиться к тебе. Вот моё имя и мой пароль". Дальнейшие действия зависят от того, какой режим FTP (активный или пассивный) выбран.

  • В активном режиме , когда клиент говорит "Привет!" он так же сообщает серверу номер порта (из динамического диапазона 1024-65535) для того, чтобы сервер мог подключиться к клиенту для установки соединения для передачи данных. FTP-сервер подключается к заданному номеру порта клиента, используя со своей стороны номер TCP-порта 20 для передачи данных. Для клиента такое соединение является входящим, так что зачастую работа в активном режиме клиентов, находящихся за файрволлом или NAT, затруднена или требует дополнительных настроек.
  • В пассивном режиме , после того как клиент сказал "Привет!", сервер сообщает клиенту номер TCP-порта (из динамического диапазона 1024-65535), к которому можно подключиться для установки соединения передачи данных. При этом, как легко заметить, порты в таком соединении как со стороны клиента, так и со стороны сервера, оказываются произвольными. В пассивном режиме клиент легко может работать с сервером сквозь свой файрволл, но зачастую для поддержки пассивного режима сервером требуется соответствующая настройка файрволла уже на стороне сервера.

Главное отличие между активным режимом FTP и пассивным режимом FTP - это сторона, которая открывает соединение для передачи данных. В активном режиме клиент должен суметь принять это соединение от FTP-сервера. В пассивном режиме клиент всегда инициирует это соединение сам, и принять его должен уже сервер.

FTP - это служба, основанная исключительно на TCP (Протокол управления передачей). FTP необычна в том, что она использует два порта, порт «данных» и порт «команд» (также известный как порт управления). Традиционно это порт 21 для команд и порт 20 для данных. Однако зависимо от режима, порт данных не всегда будет 20.

В активном режиме FTP клиент соединяется с произвольного непривилегированного порта (N > 1024) к FTP серверному командному порту 21. Затем, клиент начинает слушать порт N+1 и посылать FTP команду PORT N+1 на FTP сервер. В ответ, сервер соединяется с указанным портом данных клиента из своего локального порта данных 20.

В пассивном режиме FTP клиент инициирует оба соединения с сервером, решая проблему с файрволами, которые фильтруют входящий порт данных клиента. При открытии FTP соединения, клиент локально открывает два непривилегированных порта (N > 1024 и N+1). Первый порт контактирует с сервером на порт 21, но вместо того, чтобы затем выдать команду PORT и позволить серверу в ответ соединиться с его портом данных, клиент выдает команду PASV. В результате сервер открывает произвольный непривилегированный порт (P > 1024) и посылает клиенту команду PORT P. Затем, для передачи данных, клиент инициирует соединение от порта N+1 к порту P на сервере.

Если вы достаточно давно читаете этот блог, то можете помнить о том, как я решил собрать в нем описание популярных (и не очень) сетевых протоколов. Зачем это мне нужно, можно прочитать в статье Достаточно полное описание протокола SMTP . Вот решил пополнить коллекцию протоколом FTP, повсеместно используемым для передачи файлов.

1. Заходим

По традиции, сразу начну с примера:

$ telnet example.ru 21
Trying 192.168.0.1...
Connected to example.ru.
Escape character is "^]".
220-Welcome to Pure-FTPd
You are user number 5 of 100 allowed.
Local time is now 17:41. Server port: 21.
220 You will be disconnected after 15 minutes of inactivity.
USER afiskon
331 User afiskon OK. Password required
PASS lamepassword
230-User afiskon has group access to: coders
230 OK. Current restricted directory is /

FTP-сервер обычно работает на 21 порту. В приведенном примере строки, начинающиеся с цифр, посылаются сервером, остальные — клиентом. Запросы клиента всегда состоят из одной строки формата КОМАНДА [аргументы] , в то время как ответы сервера могут содержать несколько строк.

Первая и последняя строки начинается с трех цифр, представляющих собой код ответа, за которыми идет текстовое описание ответа, отделенное от кода либо пробелом, либо тире. Если в качестве разделителя используется пробел, значит строка является последней в ответе (и, возможно, единственной), иначе — мы получили первую строку многострочного ответа. Где-то мы это уже видели , не так ли?

Существует пять групп ответов сервера:

Как видно из примера, все начинается с посылки сервером кода 220. Затем пользователь должен залогиниться с помощью команд USER и PASS. Если все сделано правильно, на первую сервер ответит кодом 331, а на вторую — 230. Для анонимного входа (если он разрешен настройками сервера), в качестве имени пользователя следует указать «anonymous», а в качестве пароля — свой e-mail. На практике обычно посылается либо пустой e-mail, либо что-то типа [email protected].

Как видно, пароль передается в открытом виде, потому крайне желательно шифровать FTP-соединение с помощью SSL (это называется FTPS — FTP плюс SSL), а еще лучше — передавать файлы по SSH с помощью утилит scp, sftp или WinSCP . Первые две есть в любой unix-системе и используют для передачи файлов одноименные протоколы, работающие поверх SSH. WinSCP написан для Windows и внешне напоминает Total Commander, умеет работать как с устаревшим SCP (Secure Copy), так и SFTP (SSH File Transfer Protocol), появившимся только в SSH-2.

2. Осматриваемся

Но что-то меня не в ту степь понесло. После прохождения аутентификации (надо же, больше не путаю с авторизацией ) FTP-сервер с радостью выполнит наши команды. Вот их список:

Команда Ожидаемый код Описание
DELE 250 Удалить файл
RMD 250 Удалить директорию
CWD 250 Перейти в директорию
MKD 257 Создать директорию
PWD 257 Узнать текущую директорию
QUIT 221 Закончить работу
TYPE 200 Установить тип передачи
PORT 200 Перейти в активный режим
PASV 227 Перейти в пассивный режим
LIST 150, 226 Получить содержимое каталога
RETR 150, 226 Скачать файл
STOR 150, 226 Залить файл
ABOR 426,226 Отменить передачу
RNFR 350 Выбрать файл для переименования
RNTO 250 Переименовать файл

Здесь я перечислил лишь основные команды, которых достаточно для написания полноценного FTP-клиента. Дело в том, что в реальных условиях FTP-серверы очень избирательно относятся к поддержке команд, описанных в RFC959 и RFC3659 . Так что, если мы хотим получить действительно работающее приложение, а не сферического коня в вакууме, придется ограничиться лишь командами из приведенного списка.

Самые простые команды — это QUIT, DELE, MKD, CWD и RMD . Просто командуем и проверяем код, возвращаемый сервером. Если он равен ожидаемому, значит все ОК, если нет — обрабатываем ошибку.

MKD ftp_test
257 "ftp_test" : The directory was successfully created
CWD ftp_test
250 OK. Current directory is /ftp_test
CWD ..
250 OK. Current directory is /
RMD ftp_test
250 The directory was successfully removed

Если бы я писал FTP-клиент, то код, отвечающий за выполнение названных команд, выглядел бы примерно так:

int code;
char * dir;
// ...
if (code = rawcmd(250 , "RMD %s\r \n " , dir) )
printf ("Error: %d\n " , code) ;
else
printf ("All done!\n " ) ;

Чуть сложнее с парсингом ответа сервера на команду PWD :

PWD
257 "/ftp_test" is your current location

Текущая директория передается в единственной (последней?) строке ответа сервера, заключенная в двойные кавычки. Если полное имя текущей директории содержит двойные кавычки, они заменяются на две кавычки:

PWD
257 "/ftp""test" is your current location

Для переименования файлов используется пара команд — RNFR и RNTO :

RNFR old_file.zip
350 Are you kidding?
RNTO new_file.zip
250 Done!

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

Команда TYPE позволяет установить режим передачи файлов. Пример:

TYPE E
200 TYPE is now EBCDIC
TYPE A
200 TYPE is now ASCII
TYPE I
200 TYPE is now 8-bit binary

Насколько я могу судить, сегодня эта команда уже устарела и все данные можно спокойно передавать в бинарном формате (TYPE I). Цитата из Википедии :

Первые компьютеры использовали формат, размером в байт, машинное слово, двойное машинное слово, не кратное 8. Обычно они были кратны шести. Восемь бит в байте было принято при разработке системы машинных команд для IBM System/360. Это стало международным стандартом и с начала 1970-х большинство компьютеров использует байты, состоящие из 8 бит, и машинные слова, кратные 8.

3. Действуем

Особенность протокола FTP — для выполнения команд и передачи файлов используются разные соединения. Это в общем-то нормальное проектное решение. Мы же не знаем, что там в этих файлах записано, а если передавать их вместе с командами, придется как-то кодировать содержимое файла, чтобы отличить его от команд. Зачем увеличивать объем трафика и усложнять протокол, когда можно просто открыть новое соединение и послать файл, как есть?

При установлении нового соединения кто-то должен собственно соединяться, а кто-то соединение принимать. Если клиент открывает порт, а сервер коннектится к нему, режим передачи файла называется активным. В обратном случае — пассивным. За счет того, что многие пользователи Интернета сегодня сидят за NAT, обычно используется пассивный режим. И это не очень хорошо, потому что число портов у сервера ограничено.

Что интересно — существует возможность передавать файлы с одного FTP-сервера на другой напрямую. Но поскольку такая возможность часто использовалась в DDoS-атаках, сейчас она практически везде отключена.

Для перехода в пассивный режим используется команда PASV , для перехода в активный — PORT :

PORT 192,168,10,1,21,133
200 PORT command successful
PASV
227 Entering Passive Mode (192,168,0,1,21,216)

Как несложно догадаться, с помощью цифр кодируется IP-адрес и порт для соединения. Допустим, мы находимся в пассивном режиме и хотим установить соединение для передачи данных:

$ telnet 192.168.0.1 `expr 21 \* 256 + 216`
Trying 192.168.0.1...
Connected to example.ru.
Escape character is "^]".

После чего можем, например, просмотреть содержимое текущего каталога, заюзав команду LIST :

LIST
150 Accepted data connection
226-Options: -a -l
226 5 matches total

Смотрим на вывод telnet:

drwx------ 5 afiskon coders 512 Jul 7 11:35 .
drwx------ 5 afiskon coders 512 Jul 7 11:35 ..
drwxr--r-- 3 afiskon coders 512 Jun 6 14:30 сайт
drwxr-xr-x 2 afiskon coders 1024 Jul 7 00:16 logs
drwxr--r-- 2 afiskon coders 512 Jun 6 14:30 tmp
Connection closed by foreign host.

Абсолютно аналогично происходит скачивание и аплоад файлов, только используются команды RETR {файл} и STOR {файл} соответственно. Команды RETR, STOR и LIST можно прервать в процессе выполнения с помощью команды ABOR , в ответ на которую сервер должен ответить 426 «передача прервана», а затем — 226 «отмена операции произошла успешно».

4. Заключение

На этом я, пожалуй, закончу свое повествование. Получилось 9 Кб текста против 130 Кб RFC959 . По этой статье вполне можно написать несложный FTP клиент или сервер, я проверял! Самое главное — это протестировать его на совместимость с максимально возможным количеством ПО, поскольку, как я уже отмечал, в мире FTP мало кто строго следует RFC. Ну и последнее — помните золотое правило «Be liberal with input, strict with output».

Сетевая файловая служба на основе протокола FTP (File Transfer Protocol) представляет собой одну из наиболее ранних служб, используемых для доступа к удаленным файлам. До появления службы WWW это была самая популярная служба доступа к удаленным данным в Интернете и корпоративных IP-сетях. Первые спецификации FTP относятся к 1971 году. Серверы и клиенты FTP имеются практически в каждой ОС семейства UNIX, а также во многих других сетевых ОС. Клиенты FTP встроены сегодня в программы просмотра (браузеры) Интернета, так как архивы файлов на основе протокола FTP по-прежнему популярны и для доступа к таким архивам браузером используется протокол FTP.

Протокол FTP позволяет целиком переместить файл с удаленного компьютера на локальный и наоборот, то есть работает по схеме загрузки-выгрузки. Кроме того, он поддерживает несколько команд просмотра удаленного каталога и перемещения по каталогам удаленной файловой системы. Поэтому FTP особенно удобно использовать для доступа к тем файлам, данные которых нет смысла просматривать удаленно, а гораздо эффективней целиком переместить на клиентский компьютер (например, файлы исполняемых модулей приложений).

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

Протокол FTP выполнен по схеме клиент-сервер. Клиент FTP состоит из нескольких функциональных модулей:

  • User Interface - пользовательский интерфейс, принимающий от пользователя символьные команды и отображающий состояние сеанса FTP на символьном экране.
  • User-Pi - интерпретатор команд пользователя. Этот модуль взаимодействует с соответствующим модулем сервера FTP.
  • User-DTP - модуль, осуществляющий передачу данных файла по командам, получаемым от модуля User-Pi по протоколу клиент-сервер. Этот модуль взаимодействует с локальной файловой системой клиента.

FTP-сервер включает следующие модули:

  • Server-Pi - модуль, который принимает и интерпретирует команды, передаваемые по сети модулем User-PL
  • Server-DTP - модуль, управляющий передачей данных файла по командам от модуля Server-PL Взаимодействует с локальной файловой системой сервера.

Клиент и сервер FTP поддерживают параллельно два сеанса - управляющий сеанс и сеанс передачи данных. Управляющий сеанс открывается при установлении первоначального FTP-соединения клиента с сервером, причем в течение одного управляющего сеанса может последовательно выполняться несколько сеансов передачи данных, в рамках которых передаются или принимаются несколько файлов.


Общая схема взаимодействия клиента и сервера выглядит следующим образом:

1. Сервер FTP всегда открывает управляющий порт TCP 21 для прослушивания, ожидая приход запроса на установление управляющего сеанса FTP от удаленного клиента.

2. После установления управляющего соединения клиент отправляет на сервер команды, которые уточняют параметры соединения:

· имя и пароль клиента;

· роль участников соединения (активная или пассивная);

· порт передачи данных;

· тип передачи;

· тип передаваемых данных (двоичные данные или ASCII-код);

3. После согласования параметров пассивный участник соединения переходит в режим ожидания открытия соединения на порт передачи данных. Активный участник инициирует это соединение и начинает передачу данных.

4. После окончания передачи данных соединение по портам данных закрывается, а управляющее соединение остается открытым. Пользователь может по управляющему соединению активизировать новый сеанс передачи данных.

Порты передачи данных выбирает клиент FTP (по умолчанию клиент может использовать для передачи данных порт управляющего сеанса), а сервер должен использовать порт, на единицу меньший порта клиента.

Протокол FTP использует при взаимодействии клиента с сервером несколько команд (не следует их путать с командами пользовательского интерфейса клиента, которые использует человек).

Эти команды делятся на три группы:

  • команды управления доступом к системе;
  • команды управления потоком данных;
  • команды службы FTP.

В набор команд управления доступом входят следующие команды:

  • USER - доставляет серверу имя клиента. Эта команда открывает управляющий сеанс и может также передаваться при открытом управляющем сеансе для смены имени пользователя.
  • PASS - передает в открытом виде пароль пользователя.
  • CWD - изменяет текущий каталог на сервере.
  • REIN - повторно инициализирует управляющий сеанс.
  • QUIT - завершает управляющий сеанс.

Команды управления потоком устанавливают параметры передачи данных:

  • PORT - определяет адрес и порт хоста, который будет активным участником соединения при передаче данных. Например, команда PORT 194,85,135,126,7,205 назначает активным участником хост 194.85.135.126 и порт 1997 (вычисление номера порта не тривиально, но вполне однозначно).
  • PASV - назначает хост пассивным участником соединения по передаче данных. В ответ на эту команду должна быть передана команда PORT с указанием адреса и порта, находящегося в режиме ожидания.
  • TYPE - задает тип передаваемых данных (ASCII-код или двоичные данные).
  • STRU - определяет структуру передаваемых данных (файл, запись, страница).
  • MODE - задает режим передачи (потоком, блоками и т. п.).

Как видно из описания, служба FTP может применяться для работы как со структурированными файлами, разделенными на записи или страницы, так и с неструктурированными.

Команды службы FTP инициируют действия по передаче файлов или просмотру удаленного каталога:

  • RETR - запрашивает передачу файла от сервера на клиентский хост. Параметрами команды является имя файла. Может быть задано также смещение от начала файла - это позволяет начать передачу файла с определенного места при непредвиденном разрыве соединения (этот параметр Используется в команде reget пользовательского интерфейса).
  • STOR - инициирует передачу файла от клиента на сервер. Параметры аналогичны команде RETR.
  • RNFR и RNTO - команды переименования удаленного файла. Первая в качестве аргумента получает старое имя файла, а вторая - новое.
  • DELE, MKD, RMD, LIST - эти команды соответственно удаляют файл, создают каталог, удаляют каталог и передают список файлов текущего каталога.

Каждая команда протокола FTP передается в текстовом виде по одной команде в строке. Строка заканчивается символами CR и LF ASCII-кода.

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

Символьные клиенты обычно поддерживают следующий основной набор команд:

  • open имя_хоста - открытие сеанса с удаленным сервером.
  • bye - завершение сеанса с удаленным хостом и завершение работы утилиты ftp.
  • close - завершение сеанса с удаленным хостом, утилита ftp продолжает работать.
  • ls (dir) - печать содержимого текущего удаленного каталога.
  • get имя_файла - копирование удаленного файла на локальный хост.
  • put имя_файла - копирование удаленного файла на удаленный сервер.

Предназначенный для передачи файлов по TCP-сетям (например, Интернет). Использует 21-й порт. FTP часто используется для загрузки сетевых страниц и других документов с частного устройства разработки на открытые сервера хостинга .

Протокол построен на архитектуре «клиент-сервер » и использует разные сетевые соединения для передачи команд и данных между клиентом и сервером. Пользователи FTP могут пройти аутентификацию, передавая логин и пароль открытым текстом , или же, если это разрешено на сервере, они могут подключиться анонимно. Можно использовать протокол SSH для безопасной передачи, скрывающей (шифрующей) логин и пароль, а также шифрующей содержимое.

Первые клиентские FTP-приложения были интерактивными инструментами командной строки, реализующими стандартные команды и синтаксис. Графические пользовательские интерфейсы с тех пор были разработаны для многих используемых по сей день операционных систем. Среди этих интерфейсов как программы общего веб-дизайна вроде Microsoft Expression Web , так и специализированные FTP-клиенты (например, FileZilla).

FTP является одним из старейших прикладных протоколов, появившимся задолго до HTTP , и даже до TCP/IP , в 1971 году. В первое время он работал поверх протокола NCP . Он и сегодня широко используется для распространения ПО и доступа к удалённым хостам .

Энциклопедичный YouTube

    1 / 5

    Как ВЫЛОЖИТЬ САЙТ в интернет? Что такое FTP?

    GSM/GPRS модем NEOWAY M590, выходим в интернет, работаем с FTP и narodmon.ru

    Что такое FTP и как разместить сайт в интернете

    Домашний сервер, часть 2. Установка Ubuntu Server + web сервер + FTP

    Learn FTP and Website Publishing on Internet in Hindi

    Субтитры

Описание протокола

Отличие от HTTP

Свойство FTP HTTP
Основан на сессиях работы Да Нет
Встроена аутентификация пользователей Да Нет
В основном предусмотрен для передачи Больших двоичных файлов Небольших текстовых файлов
Модель соединения Двойное подключение Одиночное подключение
В основном приспособлен для приёма/передачи Приёма и передачи Приёма
Поддерживает текстовый и двоичный режимы передачи Да Нет
Поддерживает указание типов передаваемых данных (MIME заголовки) Нет Да
Поддерживает операции над файловой системой (mkdir, rm, rename, и т. д.) Да Нет

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

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

Начиная работу через протокол FTP, клиент входит в сессию, и все операции проводятся в рамках этой сессии (проще говоря, сервер помнит текущее состояние). Протокол HTTP ничего не «помнит» - его задача - отдать данные и забыть, поэтому запоминание состояния при использовании HTTP осуществляется внешними по отношению к протоколу методами .

Соединение и передача данных

Поддержка веб-браузерами

Синтаксис

Синтаксис FTP URL описан в RFC1738, в форме: ftp://[<пользователь>[:<пароль>]@]<хост>[:<порт>]/<путь> (параметры в квадратных скобках необязательны). Например:

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

Безопасность

FTP не разрабатывался как защищённый (особенно по нынешним меркам) протокол и имеет многочисленные уязвимости в защите. В мае 1999 авторы RFC 2577 свели уязвимости в следующий список проблем:

  • Скрытые атаки (bounce attacks)
  • Спуф-атаки (spoof attacks)
  • Атаки методом грубой силы (brute force attacks)
  • Перехват пакетов, сниффинг (packet capture, sniffing)
  • Защита имени пользователя
  • Захват портов (port stealing)

FTP не может зашифровать свой трафик, все передачи - открытый текст, поэтому имена пользователей, пароли, команды и данные могут быть прочитаны кем угодно, способным перехватить пакет по сети. Эта проблема характерна для многих спецификаций Интернет-протокола (в их числе SMTP , Telnet , POP, IMAP), разработанных до создания таких механизмов шифрования, как TLS и SSL. Обычное решение этой проблемы - использовать «безопасные», TLS-защищённые версии уязвимых протоколов (FTPS для FTP, TelnetS для Telnet и т. д.) или же другой, более защищённый протокол, вроде SFTP /SCP , предоставляемого с большинством реализаций протокола Secure Shell .

Безопасный FTP

Существует несколько методов безопасной передачи файлов, в одно или другое время называемых «Безопасным FTP».

FTPS

Явный FTPS - расширение стандарта FTP, позволяющее клиентам требовать того, чтобы FTP-сессия была зашифрована. Это реализуется отправкой команды «AUTH TLS». Сервер обладает возможностью позволить или отклонить соединения, которые не запрашивают TLS. Это расширение протокола определено в спецификации RFC 4217 . Неявный FTPS - устаревший стандарт для FTP, требующий использования SSL- или TLS-соединения. Этот стандарт должен был использовать отличные от обычного FTP порты.

SFTP

SFTP, или «SSH File Transfer Protocol», не связан с FTP, за исключением того, что он тоже передаёт файлы и имеет аналогичный набор команд для пользователей. SFTP, или безопасный FTP, - это программа, использующая SSH (Secure Shell) для передачи файлов. В отличие от стандартного FTP он шифрует и команды, и данные, предохраняя пароли и конфиденциальную информацию от открытой передачи через сеть. По функциональности SFTP похож на FTP, но так как он использует другой протокол, клиенты стандартного FTP не могут связаться с SFTP-сервером и наоборот.

FTP через SSH (не SFTP)

FTP через SSH (не SFTP) относится к практике туннелирования обычной FTP-сессии через SSH-соединение. Поскольку FTP использует несколько TCP-соединений, туннелирование через SSH особенно затруднительно. Когда много SSH-клиентов пытаются установить туннель для канала управления (изначальное «клиент-сервер» соединение по порту 21), защищён будет только этот канал; при передаче данных программное обеспечение FTP на любом конце установит новые TCP-соединения (каналы данных), которые обойдут SSH-соединение и, таким образом, лишатся целостной защиты .

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

  • Tectia ConnectSecure (Win/Linux/Unix)
  • Tectia Server for IBM z/OS из пакета SSH Communications Security
  • (под лицензией GPL)

FTP через SSH иногда относят к безопасным FTP; но не стоит путать его с другими методами, такими как SSL/TLS (FTPS). Другие методы передачи файлов с помощью SSH и не связанные с FTP - SFTP и SCP ; в каждом из них и учётные и файловые данные всегда защищены протоколом SSH.

История

Первая реализация протокола (1971 г.) предусматривала обмен между клиентом и сервером сообщениями, состоящими из заголовка (72 бит) и данных переменной длины. Заголовок сообщения включал в себя запрос к FTP-серверу или ответ от него, тип и длину передаваемых данных. В качестве данных передавались параметры запроса (например, путь и имя файла), информация от сервера (например, список файлов в каталоге) и сами файлы. Таким образом, команды и данные передавались по одному и тому же каналу.

В 1972 г. протокол был полностью изменён, и принял вид, близкий к современному. Команды с параметрами от клиента и ответы сервера передаются по TELNET -соединению (канал управления), для передачи данных создаётся отдельное соединение (канал данных).

В последующих редакциях была добавлена возможность работы в пассивном режиме, передачи файлов между FTP-серверами, введены команды получения информации, смены текущего каталога, создания и удаления каталогов, сохранения файлов под уникальным именем. Некоторое время существовали команды для передачи электронной почты через FTP, однако впоследствии они были исключены из протокола.

В 1980 г. FTP-протокол стал использовать TCP . Последняя редакция протокола была выпущена в 1985 г. В 1997 г. появилось дополнение к протоколу, позволяющее шифровать и подписывать информацию в канале управления и канале данных. В 1999 г. выпущено дополнение, посвящённое интернационализации протокола, которое рекомендует использовать кодировку UTF-8 для команд и ответов сервера и определяет новую команду LANG, устанавливающую язык ответов.

Основные команды

  • ABOR - Прервать передачу файла
  • CDUP - Сменить директорию на вышестоящую.
  • CWD - Сменить директорию.
  • DELE - Удалить файл (DELE filename).
  • EPSV - Войти в расширенный пассивный режим. Применяется вместо PASV.
  • HELP - Выводит список команд, принимаемых сервером.
  • LIST - Возвращает список файлов директории. Список передаётся через соединение данных.
  • MDTM - Возвращает время модификации файла.
  • MKD - Создать директорию.
  • NLST - Возвращает список файлов директории в более кратком формате, чем LIST. Список передаётся через соединение данных.
  • NOOP - Пустая операция.
  • PASS - Пароль.
  • PASV - Войти в пассивный режим. Сервер вернёт адрес и порт, к которому нужно подключиться, чтобы забрать данные. Передача начнётся при введении следующих команд: RETR, LIST и т. д.
  • PORT - Войти в активный режим. Например PORT 12,34,45,56,78,89. В отличие от пассивного режима для передачи данных сервер сам подключается к клиенту.
  • PWD - Возвращает текущую директорию.
  • QUIT - Отключиться.
  • REIN - Реинициализировать подключение.
  • RETR - Скачать файл. Перед RETR должна быть команда PASV или PORT.
  • RMD - Удалить директорию.
  • RNFR и RNTO - Переименовать файл. RNFR - что переименовывать, RNTO - во что.
  • SIZE - Возвращает размер файла.
  • STOR - Закачать файл. Перед STOR должна быть команда PASV или PORT.
  • SYST - Возвращает тип системы (UNIX, WIN, …).
  • TYPE - Установить тип передачи файла (бинарный, текстовый).
  • USER - Имя пользователя для входа на сервер.

Коды ответов FTP

Ниже представлено краткое описание кодов ответа, которые могут быть возвращены FTP-сервером . Эти коды были стандартизированы IETF в RFC 959 . Как было сказано ранее, код ответа - трёхзначное число. Первая цифра отвечает за один из трёх исходов: успех, отказ или указание на ошибку либо неполный ответ.

  • 2xx - Успешный ответ
  • 4xx/5xx - Команда не может быть выполнена
  • 1xx/3xx - Ошибка или неполный ответ

Вторая цифра определяет тип ошибки:

  • x0z - Синтаксическая.
  • x1z - Информация. Соответствует информационному сообщению.
  • x2z - Соединения. Сообщение относится к управляющему соединению либо к соединению данных.
  • x3z - Соответствует сообщениям об аутентификации пользователя и его правах.
  • x4z - Не определено.
  • x5z - Файловая система. Соответствует сообщению о состоянии файловой системы.

Третья цифра окончательно специфицирует ошибку.

Пример

220 FTP server ready. USER ftp //Анонимус 230 Login successful. PASV 227 Entering Passive Mode (192,168,254,253,233,92)//Клиент должен открыть соединение на переданный IP LIST 150 Here comes the directory listing. //Сервер передает список файлов в директории 226 Directory send OK. CWD incoming 250 Directory successfully changed. PASV 227 Entering Passive Mode (192,168,254,253,207,56) STOR gyuyfotry.avi 150 Ok to send data. //Клиент передает содержимое файла 226 File receive OK. QUIT 221 Goodbye.

Аргумент 192,168,254,253,207,56 означает, что соединение к серверу ожидается на узле с IP-адресом 192.168.254.253 на порту 207 << 8 + 56 = 53048 (где << - операция побитового сдвига, 207 записывается в младший разряд, а потом сдвигается в старший, чтобы в младший записать 56 или 207*256+56=53048).

На многих FTP-серверах существует каталог (под названием incoming, upload и т. п.), открытый на запись и предназначенный для закачки файлов на сервер. Это позволяет пользователям наполнять сервера свежими данными.

FXP

FXP (англ. File eXchange Protocol - протокол обмена файлами) - способ передачи файлов между двумя FTP-серверами напрямую, не закачивая их на свой компьютер . При FXP-сессии клиент открывает два FTP-соединения к двум разным серверам, запрашивая файл на первом сервере, указывая в команде PORT IP-адрес второго сервера.

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

FXP стал использоваться злоумышленниками для атак на другие серверы: в команде PORT указывается IP-адрес и порт атакуемого сервиса на компьютере жертвы, и командами RETR/STOR производится обращение на этот порт от лица FTP-сервера, а не атакующей машины, что позволяло устраивать масштабные DDoS -атаки с использованием сразу многих FTP-серверов, либо обходить систему безопасности компьютера жертвы, если он полагается только на проверку IP клиента и используемый для атаки FTP-сервер находится в доверенной сети или на шлюзе. В результате сейчас практически все серверы проверяют соответствие IP-адреса, указанного в команде PORT, IP-адресу FTP-клиента и по умолчанию запрещают использование там IP-адресов третьих сторон. Таким образом, использование FXP невозможно при работе с публичными FTP-серверами.