Сегодня по плану — все о технологии FTP. Расскажу, что такое ftp-серверы и аккаунты (доступы), где используются и как применяется.
FTP — что это такое?
FTP — стандартный TCP-сетевой протокол для передачи файлов, используемый чтобы организовать отправку и прием файлов с удаленного компьютера или сервера.
Чтобы передать файл по TCP-порту через протокол ФТП, FTP-клиенту нужно связаться с настроенным и запущенным FTP-сервером. Подобная организация передачи файлов наиболее часто используется веб-разработчиками — когда с ПК нужно получить доступ к «внутренностям» сайта и что-нибудь там изменить, улучшить.
Как и HTTP (что это такое?), протокол FTP построен на «клиент-серверной» архитектуре и использует несколько сетевых соединений, чтобы передавать команды и файлы между «клиентом» и «сервером».
Доступ к сайту по фтп аккаунту — что это? Это функция, позволяющая просматривать, изменять, скачивать и загружать файлы. Для получения клиентом доступа к FTP-серверу сайта нужно пройти аутентификацию — ввести логин и пароль. Для отправки имени используется команда «USER», для отправки пароля — команда «PASS».
Если сервер принимает пару логин:пароль, то он отправляет клиенту приглашение. Клиент принимает приглашение и начинается сессия.
У FTP предельно простой синтаксис, описанный в спецификации RFC1738 (данные в квадратных скобках необязательны для заполнения) — ftp://[<POLZOVATEL>[:<PAROL>]@]<HOST>[:<PORT>]/<FTP_URL>.
Пример 1 — ftp://ftp.7bloggers.ru/FTP/humans.txt
Пример 2 — ftp://UNIQUE_USER:[email protected]/FTP/humans.txt
Также есть т.н. «анонимный FTP» — когда любой пользователь может анонимно подключиться к ФТП серверу без предоставления данных USER/PASS. Для сессий такого типа предоставляется ограниченный доступ.
Пользователи осуществляют анонимный вход как «anonymous» (имя пользователя), но бывает и так что просят ввести email-адрес вместо пароля. Конечно же, никто не проверяет эти адреса на предмет достоверности.
Анонимный FTP-хосты достаточно популярны, ведь они часто используются для скачивания и обновления ПО на ПК. Более того, доступ может быть организован и через обычные браузеры — ведь они могут напрямую извлекать файлы с FTP-серверов. Происходит это очень просто — при указании FTP-адреса фтп-контент предоставляется точно также как веб-контент при HTTP. А в браузере Фаерфокс можно даже установить полноценный FTP-клиент — FireFTP.
Несмотря на то что работать с FTP можно в браузере, FTP довольно сильно отличается от HTTP:
Особенности протокола FTP:
- Использование множественного подключения, минимум — двойного. Один канал — управляющий, через него поступают команды для фтп-сервера и возвращаются ответы; другие каналы используются для передачи данных: одна передача — один канал (для каждого открывается TCP-порт). Благодаря этому свойству, в обоих направлениях одновременно можно передавать несколько файлов, а управляющий поток остается открытым на все время ftp-сессии.
- В FTP-протоколе есть двоичный режим передачи данных — при котором уменьшается время передачи файлов и расход трафика. В HTTP такого нет.
- По FTP-протоколу проводятся операции в рамках одной сессии с помощью TCP/IP — пока сервер «не забыл» текущее состояние и авторизованного пользователя. В HTTP сессий нет: он просто отдает данные.
FTP имеет три режима передачи данных:
- Поточный — непрерывная передача данных в виде потока (без обработки, обработка выполняется TCP);
- Блочный — FTP делит данные на блоки (заголовок, поле данных, размер файла в байтах) и передает их TCP;
- Режим сжатия данных единым алгоритмом.
Что такое безопасный FTP: FTPS и FTPES, SFTP, SSH-FTP?
Вы наверное уже поняли, что обычный FTP не является безопасным, потому что данные не шифруются при передаче. Это можно исправить, например используя протокол SSH, который зашифрует пару логин:пароль и передаваемое содержимое. Сейчас расскажу подробнее обо всех безопасных FTP — FTPS, SFTP, SSH-FTP.
Откровенно говоря, FTP и не задумывался как безопасный при создании. Так его и сделали с многочисленными уязвимостями, список которых на 1999 год был примерно таким: захват портов и перехват пакетов, сниффинг и спуффинг, брутфорс и скрытые атаки.
FTP был разработан до TLS/SSL и просто физически не может шифровать свой трафик, поэтому любой человек, который способен перехватить пакет по сети, получит данные к именам пользователей, паролям, командам, а значит обретет доступ к приватному FTP-серверу. А доступ к FTP сайта это очень важно — можно много дел натворить.
Решение этой проблемы — использование защищенных версий протокола ФТП. Например, неявный FTPS это TLS-защищенная версия FTP, а SFTP/SCP защищены Secure Shell. Расскажу подробнее о защищенных FTP.
Явный FTPS (FTPES, FTP over Explicit SSL/TLS) — расширенный FTP, создающий возможность «клиентам» требовать шифрование FTP-сессии при использовании команды «AUTH TLS». В ответ на нее, сервер может позволить создать такое соединение или отклонить запрос. Порт — 21. Есть еще неявный FTPS (требует SSL- или TLS-соединение), но он устарел.
SFTP (англ. «SSH File Transfer Protocol») — расширение протокола SSH. Он никак не связан с FTP, но точно также передает файлы и использует те же команды. SFTP использует Secure Shell (SSH) для передачи файлов, т.е. шифрует и файлы, и команды (не передает данные по сети в открытом виде). Порт — 22 или 2222. Функционально SFTP близок к FTP и очень похож на него, но клиенты стандартного ФТП не могут подсоединиться к SFTP-серверу, как и наоборот.
SFTP, используемый как подсистема второй версии реализации протокола SSH, имеет ряд преимуществ перед FTP:
- Поддержка аутентификации «без пароля» с помощью SSH-ключей более безопасная, чем если хранить пароль на диске или вводить вручную;
- Поддержка символических ссылок;
- SFTP-соединение более быстрое и надежное, когда в FTP бывают тормоза и перебои;
- SFTP-клиенты обладают возможностями прерывания и возобновления передачи файла, его удаления; загруженные файлы могут иметь метки времени, связанные с атрибутами файлов — а в FTP нет условйи для загрузок.
FTP через SSH (обратите внимание, SSH-FTP это не SFTP) — осуществляет обычную FTP-сессию, соединяясь через безопасный SSH-туннель. Такое тунеллирование затруднительно, т.к. FTP открывает несколько TCP-соединений. Это значит, что при установке несколькими SSH-клиентами туннеля для канала управления (по порту 21) защищенным будет только этот один канал, а передача данных пойдет по вновь созданным каналам данных (TCP-соединения), обходящим SSH и от этого являющимися небезопасными.
Еще раз повторю, не нужно путать FTP через SSH с FTPS, SFTP, SCP — последние более безопасные.
Что такое FTP-сервер?
FTP-сервер — «библиотека» файлов на хостинге, используется для хранения файлов разных форматов. Соединение между FTP-сервером и FTP-клиентом происходит по протоколу передачи данных FTP.
Самые популярные ftp-сервера это vsftpd и proftpd. Их настройка осуществляется в файлах .ftpaccess.
ФТП-сервера нужны для того, чтобы размещать на них для публичного и приватного скачивания больших объемов данных: как по количеству файлов, так и по их размеру. Часто такие сервера используются для анонимного (гостевого) доступа к размещенным в открытом виде дистрибутивов ПО, музыки и фото. Доступ для анонимов как правило позволяет только просматривать каталоги и скачивать требуемую информацию, но на некоторых серверах наоборот — есть спецкаталоги, куда любой аноним может загрузить файл для обмена.
При неанонимном доступе возможности пользователя шире (можно загружать файлы), но строго ограничиваются тем каталогом, куда ему предоставлен доступ, даже если «выше» или «по соседству» есть другие каталоги с файлами других пользователей.
Несмотря на то, что работа с FTP-серверами может быть организована из браузера, я бы рекомендовал пользоваться программами-клиентами — в случае обрыва связи с сервером они позволят докачать файл как только связь будет восстановлена.
Ну и кратко о наиболее популярных FTP-клиентах — программах для доступа к FTP-серверам с шифрованием передаваемых данных:
- WS_FTP;
- LeechFTP;
- CuteFTP;
- FileZilla — самый популярный FTP-клиент для Windows/Mac/Linux. Есть поддержка FTPS, SFTP.
- FAR Manager — самый «древний» консольный файловый менеджер для Виндоуса. Очень простой, имеет много плагинов, поддерживает SFTP (нужен плагин WinSCP).
- Total Commander — теряет популярность (на любителя) и поддерживает FTPS. Плагины для SFTP, к сожалению, устаревшие.
- FireFTP — а это вообще плагин для Мозиллы Фаерфокс. Есть поддержка FTPS, SFTP.
- Cyberduck — фтп клиент для маков, поддерживает FTP/SFTP.
- WinSCP — минималистичный и красивый SCP-, FTP- и SFTP-клиент для Виндоуса.
Лично я пользуюсь WinSCP.
Подведу итог. В чистом виде, ФТП не предназначен для безопасной передачи файлов по сети, хоть и является стандартом. Я рекомендую более безопасные протоколы с шифрованием FTPS и SFTP.
Успехов при работе по FTP!