Пятница, 29.11.2024, 01:39
Приветствую Вас, Гость
Главная » 2015 » Сентябрь » 10 » FTP
22:27
FTP
FTP (англ. File Transfer Protocol — протокол передачі файлів) — це стандартний протокол, призначений для передачі файлів по протоколу TCP мереж (наприклад, Інтернет). Використовує 21е порт. FTP часто використовується для завантаження веб-сторінок та інших документів з приватного пристрою розробки на відкриті сервера хостингу.

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

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

FTP є одним з найстаріших прикладних протоколів, що з'явилися задовго до HTTP, і навіть до TCP/IP, у 1971 році. У перший час він працював поверх протоколу NCP[1]. Він і сьогодні широко використовується для розповсюдження і доступу до віддалених хостів.

Досить яскрава особливість FTP в тому, що він використовує множинне (як мінімум — подвійне) підключення. При цьому один канал є управителем, через який надходять команди сервера і повертаються його відповіді (зазвичай через TCP-порт 21), а через інші відбувається власне передача даних, по одному каналу на кожну передачу. Тому в рамках однієї сесії по протоколу FTP можна передавати кілька файлів одночасно, причому в обох напрямках. Для кожного каналу даних відкривається свій TCP порт, номер якого вибирається або сервером, або клієнтом, в залежності від режиму передачі[2].

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

Починаючи роботу через протокол FTP клієнт входить у сесію, і всі операції проводяться в рамках цієї сесії (простіше кажучи, сервер пам'ятає поточний стан). Протокол HTTP нічого не «пам'ятає» — його завдання — віддати дані і забути, тому запам'ятовування стану при використанні HTTP здійснюється зовнішніми по відношенню до протоколу методами[2].

FTP працює на прикладному рівні моделі OSI і використовується для передачі файлів за допомогою TCP/IP. Для цього повинен бути запущений FTP-сервер, що очікує вхідних запитів. Комп'ютер-клієнт може зв'язатися з сервером по порту 21. Це з'єднання (потік управління) залишається відкритим на час сесії. Друге з'єднання (потік даних), може бути відкритий як сервером з порту 20 до порту відповідного клієнта (активний режим), або ж клієнтом з будь-якого порту до порту відповідного сервера (пасивний режим), що необхідно для передачі файлу даних. Потік управління використовується для роботи з сесією — наприклад, обмін між клієнтом і сервером командами і паролями з допомогою telnet-такого протоколу. Наприклад, «RETR ім'я файлу» передасть вказаний файл від сервера клієнту. Внаслідок цієї двухпортовой структури, FTP вважається внешнеполосным протоколом, на відміну від внутриполосного HTTP.

Протокол визначений в RFC 959. Сервер відповідає по потоку управління тризначними ASCII-кодами стану з обов'язковим текстовим повідомленням. Наприклад, «200» (або «200 OK») означає, що остання команда була успішно виконана. Цифри являють код відповіді, а текст — роз'яснення або запит. Поточна передача по потоку даних може бути перервана з допомогою який перериває повідомлення, що посилається по потоку управління.

FTP може працювати в активному або пасивному режимі, від вибору якого залежить спосіб установки з'єднання. В активному режимі клієнт створює керуюче TCP-з'єднання з сервером і відправляє серверу свій IP-адресу і довільний номер клієнтського порту, після чого чекає, поки запустить сервер TCP-з'єднання з цим адресою і номером порту. У разі, якщо клієнт знаходиться за брандмауером і не може прийняти вхідне TCP-з'єднання, може бути використаний пасивний режим. У цьому режимі клієнт використовує потік управління, щоб послати команду серверу PASV, і потім отримує від сервера IP-адресу та номер порту, які потім використовуються клієнтом для відкриття потоку даних з довільного клієнтського порту до отриманого адресою і порту. Обидва режими були оновлені у вересні 1998 р. для підтримки IPv6. В цей час були проведені подальші зміни пасивного режиму, поновили його до розширеного пасивного режиму.

При передачі даних по мережі можуть бути використані чотири подання даних:
ASCII — використовується для тексту. Дані, якщо необхідно, до передачі конвертуються з символьного подання на хості-відправника «восьмибітний ASCII», і (знову ж, якщо необхідно) в символьне уявлення приймаючого хоста. Як наслідок, цей режим не підходить для файлів, що містять не тільки звичайний текст.
Режим зображення (зазвичай іменується бінарним) — пристрій-відправник посилає кожен файл байт за байтом, а одержувач зберігає потік байтів при отриманні. Підтримка даного режиму була рекомендована для всіх реалізацій FTP.
EBCDIC — використовується для передачі звичайного тексту між хостами в кодуванні EBCDIC. В іншому, цей режим аналогічний ASCII-режиму.
Локальний режим — дозволяє двом комп'ютерам з ідентичними установками посилати дані у власному форматі без конвертації в ASCII.

Для текстових файлів надані різні формати управління і налаштування структури запису. Ці особливості були розроблені для роботи з файлами, що містять Telnet або ASA-форматування.

Передача даних може здійснюватися в будь-якому з трьох режимів:
Потоковий режим — дані надсилаються у вигляді безперервного потоку, звільняючи FTP від виконання якої б то ні було обробки. Замість цього, вся обробка виконується TCP. Індикатор кінця файлу не потрібний, за винятком поділу даних на запису.
Блочний режим — FTP розбиває дані на кілька блоків (блок заголовка, кількість байт, поле даних) і потім передає їх TCP.
Режим стиснення — дані стискаються єдиним алгоритмом (зазвичай, кодування довжин серій).

FTP-сервер використовує звичайну схему ім'я користувача/пароль для надання доступу. Ім'я користувача надсилається сервера командою USER, а пароль — командою PASS. Якщо надана клієнтом інформація прийнята сервером, то сервер відправить клієнту запрошення і починається сесія. Користувачі можуть, якщо сервер підтримує цю особливість, увійти в систему без надання облікових даних, але сервер може надати тільки обмежений доступ для таких сесій.

Хост, що забезпечує FTP-сервіс, який може надати анонімний доступ до FTP. Користувачі зазвичай входять в систему як «anonymous» (може бути регистрозависимым на деяких FTP-серверах) в якості імені користувача. Хоча зазвичай користувачів просять надіслати адресу їх електронної пошти замість пароля, ніякої перевірки фактично не проводиться. Багато FTP-сайтів, що надають оновлення програмного забезпечення, що підтримують анонімний доступ.

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

FTP зазвичай передає дані при наявності з'єднання сервера з клієнтом, після того як клієнт відправив команду PORT. Це створює проблему як для NAT, так і для брандмауерів, які не дозволяють з'єднання з інтернету до внутрішніх хостів. Для NAT додатковою проблемою є те, що подання IP-адреси і номера порту в команді PORT відноситься до IP-адреси і порту внутрішнього хоста, замість публічного IP-адреси і NAT-порту. Існує два підходи до цієї проблеми. Перший полягає в тому, що клієнт FTP і FTP-сервер використовують команду PASV, яка викликає з'єднання для передачі даних, встановлене від клієнта до сервера. Другий підхід — зміна для NAT значень команди PORT з допомогою шлюзу на прикладному рівні.

Велика частина звичайних веб-браузерів може витягувати файли, розташовані на FTP-серверах, хоча вони можуть не підтримувати розширення протоколів начебто FTPS. Коли вказаний FTP-адресу, а не HTTP-адреса, доступний контент на віддаленому сервері видається аналогічно решті веб-контенту. Повністю функціональний FTP-клієнт може бути запущений в Firefox розширення FireFTP

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

ftp://public.ftp-servers.example.com/mydirectory/myfile.txt

або:

ftp://user001:secretpassword@private.ftp-servers.example.com/mydirectory/myfile.txt

Більш детально про зазначення імені користувача і пароля написано в документації браузерів. За замовчуванням, більшість веб-браузерів використовують пасивний (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».

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

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

FTP через SSH (не SFTP) відноситься до практики тунелювання звичайної FTP-сесії через SSH-з'єднання. Оскільки FTP використовує кілька TCP-з'єднань, тунелювання через SSH особливо важко. Коли багато SSH-клієнтів намагаються встановити тунель для каналу управління (споконвічне «клієнт-сервер» з'єднання з порту 21), захищений буде тільки цей канал; при передачі даних програмне забезпечення FTP на будь-якому кінці встановить нові TCP-з'єднання (канали даних), які обійдуть SSH-з'єднання і, таким чином, втратять цілісної захисту.

Інакше, для клієнтського програмного забезпечення SSH необхідно мати певні знання про FTP для відстеження і перезапису повідомлень потоку управління FTP і автономного відкриття нових перенаправлень для потоку даних FTP. Програмні пакети, які підтримують цей режим:
Tectia ConnectSecure (Win/Linux/Unix) з пакету SSH Communications Security
Tectia Server for IBM z/OS з пакету SSH Communications Security
FONC (під ліцензією GPL)
Co:Z FTPSSH Proxy

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

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-сервером. Ці коди були стандартизовані IETF в RFC 959. Як було сказано раніше, код відповіді — тризначне число. Перша цифра відповідає за один з трьох випадків: успіх, відмова або вказівка на помилку або неповний відповідь.
2xx — Успішний відповідь
4xx/5xx — Команда не може бути виконана
1xx/3xx — Помилка або неповний відповідь

Друга цифра визначає тип помилки:
x0z — Синтаксична.
x1z — Інформація. Відповідає інформаційному повідомленню.
x2z — З'єднання. Повідомлення відноситься до керуючого з'єднання або з'єднання даних.
x3z — Відповідає повідомленнями про аутентифікації користувача і його права.
x4z — Не визначено.
x5z — Файлова система. Відповідає повідомленням про стан файлової системи.

Третя цифра остаточно специфікує помилку.

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-серверами.
Просмотров: 641 | Добавил: Admin | Теги: ftp | Рейтинг: 0.0/0
Всего комментариев: 0
avatar