FTP (англ. File Transfer Protocol — протокол передачі файлів) — це стандартний протокол, призначений для передачі файлів по протоколу TCP мереж (наприклад, Інтернет). Використовує 21е порт. FTP часто використовується для завантаження веб-сторінок та інших документів з приватного пристрою розробки на відкриті сервера хостингу.
Протокол побудований на архітектурі «клієнт-сервер» і використовують різні мережеві з'єднання для передачі команд і даних між клієнтом і сервером. Користувачі FTP можуть пройти аутентифікацію, передаючи логін і пароль, відкритим текстом, або ж, якщо це дозволено на сервері, можуть підключитися анонімно. Можна використовувати протокол SSH для безпечної передачі, приховує (шифрувальної) логін і пароль, а також шифрувальної вміст.
Перші клієнтські FTP-програми були інтерактивними інструментами командного рядка, які реалізують стандартні команди і синтаксис. Графічні інтерфейси з тих пір були розроблені для багатьох використовуються донині операційних систем. Серед цих інтерфейсів програми загального веб-дизайну кшталт Microsoft Expression Web, так і спеціалізовані FTP-клієнти (наприклад, FileZilla).
FTP є одним з найстаріших прикладних протоколів, що з'явилися задовго до HTTP, і навіть до TCP/IP, у 1971 році. У перший час він працював поверх протоколу NCP. Він і сьогодні широко використовується для розповсюдження і доступу до віддалених хостів.
Досить яскрава особливість FTP в тому, що він використовує множинне (як мінімум — подвійне) підключення. При цьому один канал є управителем, через який надходять команди сервера і повертаються його відповіді (зазвичай через TCP-порт 21), а через інші відбувається власне передача даних, по одному каналу на кожну передачу. Тому в рамках однієї сесії по протоколу FTP можна передавати кілька файлів одночасно, причому в обох напрямках. Для кожного каналу даних відкривається свій TCP порт, номер якого вибирається або сервером, або клієнтом, в залежності від режиму передачі.
Протокол FTP має двійковий режим передачі, що скорочує накладні витрати трафіку і зменшує час обміну даними при передачі великих файлів. Протокол ж HTTP обов'язково вимагає кодування двійкової інформації у текстову форму, наприклад за допомогою алгоритму Base64.
Починаючи роботу через протокол FTP клієнт входить у сесію, і всі операції проводяться в рамках цієї сесії (простіше кажучи, сервер пам'ятає поточний стан). Протокол HTTP нічого не «пам'ятає» — його завдання — віддати дані і забути, тому запам'ятовування стану при використанні HTTP здійснюється зовнішніми по відношенню до протоколу методами.
FTP працює на прикладному рівні моделі OSI і використовується для передачі файлів за допомогою TCP/IP. Для цього повинен бути запущений FTP-сервер, що очікує вхідних запитів. Комп'ютер-клієнт може зв'язатися з сервером по порту 21. Це з'єднання (потік управління) залишається відкритим на час сесії. Друге з'єднання (потік даних), може бути відкритий як сервером з порту 20 до порту відповідного клієнта (активний режим), або ж клієнтом з будь-якого порту до порту відповідного сервера (пасивний режим), що необхідно для передачі файлу даних. Потік управління використовується для роботи з сесією — наприклад, обмін між клієнтом і сервером командами і паролями з допомогою telnet-такого протоколу. Наприклад, «RETR ім'я файлу» передасть вказаний файл від сервера клієнту. Внаслідок цієї двухпортовой структури, FTP вважається внешнеполосным протоколом, на відміну від внутриполосного HTTP.
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 не розроблявся як захищений (особливо за нинішніми мірками) протокол і має численні уразливості в захисті. У травні 1999 автори RFC 2577 звели уразливості в наступний перелік питань:
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.
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-серверами.