Код
#статьи

Протокол FTP: что это такое и как с ним работать

Объясняем простым языком, что это за протокол для передачи данных, и запускаем собственный сервер на нём.

Иллюстрация: Оля Ежак для Skillbox Media

Когда интернет только превращался в глобальную сеть, появилась новая потребность — передавать файлы с одного компьютера на другой на расстоянии. Тогда ещё не было варианта просто загрузить их в условный телеграм и скинуть другу. Поэтому в 1971 году придумали протокол FTP.

FTP решал главную проблему — быстро и надёжно передавать файлы по Сети. А большую популярность он приобрёл из-за своей простоты: для доступа к другому компьютеру нужны были только логин и пароль.

В этой статье рассказываем, что это за протокол, зачем нужен и как работает, а ещё — пробуем запустить свой FTP-сервер на Windows и Linux.

Всё, что нужно знать об FTP:


Что такое FTP

FTP — это протокол для передачи данных через интернет. Аббревиатура расшифровывается как File Transfer Protocol, в переводе — «протокол передачи данных». С его помощью можно скачать или отправить что угодно: видео, музыку, программы, изображения.

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

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

Проверка очень простая, но для 1971 года сойдёт
Иллюстрация: Оля Ежак для Skillbox Media

Давайте посмотрим, как работает FTP на примере жизненной ситуации.

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

Задача понятна — открываем консоль и устанавливаем соединение через FTP для доступа к хранилищу. Перед этим нужно запросить логин и пароль от него, иначе не удастся подключиться. Как только вы авторизуетесь, вам будут доступны все файлы на сервере — или те, к которым вам выдадут доступ. Чтобы скачать их, нужно ввести ещё пару команд и дождаться загрузки. Готово!

Подключаемся к внутреннему серверу — получаем рабочие файлы
Иллюстрация: Оля Ежак для Skillbox Media

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

Чем FTP отличается от HTTP

В интернете есть два популярных протокола для передачи данных: FTP и HTTP. Оба решают примерно одинаковые задачи, но всё же различаются в назначении.

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

HTTP заточен на передачу гипертекстовых документов — то есть сайтов и веб-страниц. Он использует всего одно соединение, по которому запросы летают между клиентом и сервером. Ему не нужно устраивать длинные сеансы обмена данными: просто отдал нужную страничку и забыл.

Иначе говоря, FTP ориентирован на долгое и «вдумчивое» взаимодействие сервера и клиента: он помнит, кто, кому, когда и что передал. У HTTP другая задача — управлять запросами в интернете. В отличие от FTP, он не хранит состояние сессии, зато работает быстрее — а это как раз то, что нужно для веба.

Плюсы и минусы FTP

Вот три главные задачи, для решения которых вам может понадобиться FTP:

  • Передавать файлы на другие компьютеры. Это удобно, когда вам нужно, например, загрузить файлы на сервер сайта или отправить видео другу. Просто подключились, отправили, остались довольны.
  • Резервное копирование. Чтобы не потерять файлы, вы можете сделать их бэкап на удалённый компьютер.
  • Удалённый доступ к файлам. FTP можно превратить в замену Google Drive или «Яндекс Диска»: берём удалённый компьютер, загружаем туда файлы и достаём по мере необходимости.

Теперь о том, почему использование FTP может быть не самой удачной идеей:

  • Отсутствие адекватной защиты. Когда вы подключаетесь к серверу, данные отправляются по сети в незашифрованном виде: в том числе логины, пароли и сами файлы. Плюс в FTP нет никакой защиты от брутфорса — то есть пароль к серверу можно подобрать обычным перебором.
  • Неэффективная передача файлов. Для каждой операции передачи FTP требует установки нового соединения. Если вы хотите передавать несколько файлов одновременно, это может привести к задержкам и увеличению нагрузки на сеть — особенно при передаче больших файлов.
  • Разрыв соединения при ошибке. Если передача данных прервётся по какой-то причине, то весь процесс придётся начинать сначала.

Для чего нужны FTPS и SFTP

Чтобы решить проблемы безопасности, в FTP впоследствии всё же придумали шифровать запросы — так появились защищённые протоколы FTPS и SFTP. Давайте посмотрим, чем они отличаются друг от друга.

FTPS

FTPS — это расширение протокола FTP, которое использует сертификаты SSL и TLS. Расшифровывается он как File Transfer Protocol Secure, по-русски — «защищённый протокол передачи данных».

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

Сертификаты можно получить в центре сертификации, а можно — создать свои. Первые будут гарантировать надёжность, а вторые — восприниматься системой с подозрением.

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

SFTP

SFTP — это ещё одно расширение для протокола FTP, которое для работы использует протокол SSH. Расшифровывается как Secure File Transfer Protocol, что тоже переводится как «защищённый протокол передачи данных».

В отличие от обычного FTP, SFTP для работы нужен один сетевой порт: SSH умеет разделять его на несколько каналов, один из которых выделяется под управление, а другой — под передачу данных.

А ещё передача по SFTP защищена с помощью специальных SSH-ключей: один на стороне клиента шифрует трафик, а другой, на стороне сервера, его дешифрует.

FTPS — это как два предпринимателя, а SFTP — как два ребёнка, которые придумали свой язык
Иллюстрация: Оля Ежак для Skillbox Media

Оба протокола стали хорошим дополнением к FTP. При выборе одного из них нужно учитывать особенности вашего проекта. Например, если у вас уже есть SSL-сертификат, то удобнее будет использовать FTPS. А если сертификата нет и покупать его не хочется — выбирайте SFTP.

Как передавать файлы по FTP

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

Чтобы подключиться к серверу, нужно знать его IP-адрес, а ещё — логин и пароль для авторизации. Логин и пароль задаются на стороне сервера при его настройке. IP-адрес тоже можно узнать на сервере — например, в консоли Windows это делается с помощью команды ipconfig.

Как работает авторизация по FTP-протоколу

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

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

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

Анонимный режим — это рудимент, который остался со времён Unix-систем. Тогда везде была логин-паролевая авторизация, а других способов ещё не придумали.

Когда у нас есть IP-адрес, логин и пароль, можно подключаться. Для этого понадобится специальная программа — FTP-клиент. Она может как быть обычным консольным приложением, так и иметь графический интерфейс.

Чтобы осуществить передачу, FTP-клиент попросит нас подключиться к серверу, а затем авторизоваться. Вот так выглядит подключение к FTP-серверу через консоль Windows:

$ ftp ftp.example.com
Login: login
Password: *********
230 Login successful.

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

$ ls

Чтобы скачать или загрузить файл, FTP-протокол использует две команды:

  • PUT — для отправки файлов с вашего компьютера на сервер;
  • GET — для загрузки файлов с сервера на ваш компьютер.

Когда вы вводите одну из них, клиент и сервер создают соединение для передачи данных. После этого файлы делятся на пакеты — небольшие кусочки размером от 1 до 64 КБ, — а затем отправляются по протоколу TCP/IP. Подробнее о том, как это работает, можно почитать в одной из наших статей.

В консоли это выглядит так:

$ ls 
Desktop/
Documents/
logs.txt
main.py
style.css
$ get logs.txt
227 Entering Passive Mode (172,16,1,10,123,45).
150 Opening BINARY mode data connection for logs.txt
226 Transfer complete.

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

452: Ошибка при записи файла (недостаточно места)

Закрыть FTP-соединение можно следующей командой:

$ quit

Обзор популярных FTP-клиентов

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

FileZilla

Это популярный FTP-клиент, который позволяет удобно подключаться к удалённым серверам. У FileZilla простой интерфейс и понятное управление: освоить его сможет даже новичок.

Интерфейс FileZilla
Скриншот: FileZilla

В FileZilla есть два главных окна: одно показывает файлы и папки на вашем компьютере, а другое — директорию удалённого FTP-сервера. Чтобы переместить файл с одного компьютера на другой, нужно просто перетащить его из левого окна в правое. Вот так просто это и работает.

В FileZilla есть и другие функции — например, она поддерживает синхронизацию данных в облаке и передачу файлов по VPN. Для защищённых соединений сервис использует сертификаты SSL и TLS.

Где скачать: на официальном сайте FileZilla.

Cyberduck

Это ещё один FTP-клиент с открытым исходным кодом. Он бесплатный, но в нём есть всё, что нужно для нормальной работы протокола FTP.

Интерфейс Cyberduck
Скриншот: Cyberduck.io

При запуске клиента он попросит подключить его к FTP-серверу, после чего выведет его содержимое на экран. Чтобы загрузить файл, нужно просто перетащить его из папки на компьютере в Cyberduck.

Есть и продвинутые возможности — например, закладки для часто используемых серверов, загрузка в облако и интеграция с текстовыми редакторами. Ещё к Cyberduck можно подключить шифрование.

Где скачать: на официальном сайте Cyberduck.

CuteFTP

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

Интерфейс CuteFTP
Скриншот: CuteFTP

Управление CuteFTP почти не отличается от FileZilla. Чтобы перекинуть файл с одного компьютера на другой, нужно перетащить его из левого окна в правое. А если вы хотите зашифровать передачу, CuteFTP поддерживает сертификаты SSL и TLS.

Где скачать: на официальном сайте CuteFTP.

Облачные хранилища

Некоторые популярные сервисы для облачного хранения данных можно использовать как FTP-клиенты — например, Google Drive, Dropbox и Microsoft OneDrive. О том, как подключиться к FTP-серверу через эти клиенты, можно почитать в документации: Google, Dropbox, Microsoft.

Как создать FTP-сервер на Windows

Чтобы создать FTP-сервер на Windows, нужно иметь версию системы Professional, Educational или Enterprise. К сожалению, для домашней версии придётся устанавливать сторонние приложения. Если у вас стоит нужная версия операционной системы, остаётся выполнить несколько действий.

Включаем FTP-компоненты

Первым шагом открываем Панель управления:

Скриншот: Skillbox Media

Переходим во вкладку Программы → Программы и компоненты. Здесь выбираем пункт Включение или отключение компонентов Windows:

Скриншот: Skillbox Media

Появится список, в котором нужно поставить галочку у пункта FTP-сервер, а также найти пункт Службы IIS → Средства управления веб-сайтом. Здесь поставим галочку у пункта Сценарии и средства управления IIS:

Скриншот: Skillbox Media

Нажимаем ОК и дожидаемся, пока все настройки применятся к Windows.

Создаём FTP-сервер

Чтобы использовать сервер, нам понадобится папка, в которой мы будем хранить все файлы. Создадим её на диске C и назовём ftp:

Скриншот: Skillbox Media

Внутри неё можно создать пару файлов и папок. Они понадобятся, чтобы проверить правильность работы FTP-сервера:

Скриншот: Skillbox Media

Теперь нам нужно опубликовать наш сервер. Для этого открываем Диспетчер служб IIS:

Скриншот: Skillbox Media

В открывшемся окне находим слева пункт сайты и кликаем по нему правой кнопкой мыши. Выбираем Добавить FTP-сайт (тут главное не перепутать с веб-сайтом):

Скриншот: Skillbox Media

Теперь нам нужно указать данные нашего сервера. В поле Имя FTP-сайта вписываем любое имя, какое захотите, а во вкладке Физический путь указываем путь до нашей папки ftp. Жмём Далее:

Скриншот: Skillbox Media

Затем открывается окно с дополнительными настройками. В разделе Привязка ничего не меняем, а в SSL выбираем Без SSL. В будущем вы можете попробовать настроить сервер с шифрованием, но сейчас нам надо разобраться, как запустить простой сервер.

Скриншот: Skillbox Media

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

Скриншот: Skillbox Media

Готово — наш сервер создан и опубликован. Увидеть его можно в списке всех серверов:

Скриншот: Skillbox Media

Проверяем, как работает

Чтобы зайти на FTP-сервер, нужно сначала получить IP-адрес нашего компьютера. Для начала — открываем консоль (можно просто вбить в поиске cmd), а затем вводим команду ipconfig:

Скриншот: Skillbox Media

Копируем адрес из графы IPv4-адрес. Далее открываем проводник или любой FTP-клиент и вводим в адресной строке ftp://[ваш IP-адрес]. Видим наши файлики:

Скриншот: Skillbox Media

А можно ли открыть сервер, скажем, в Google Chrome?

Раньше FTP-ссылки открывались через браузер, но потом разработчики веб-клиентов стали один за другим убирать поддержку этого протокола — мол, слишком старый и небезопасный.

Решение: понизить версию браузера — например, в Chrome до 91-й версии FTP ещё можно было вернуть, поставив флажок в пункте Enable support for FTP URLs в chrome://flags.

Как создать FTP-сервер на Linux

По умолчанию в дистрибутивах Linux нет FTP-сервера, поэтому его нужно установить отдельно. Для этого вводим следующую команду для версий Linux Ubuntu и Debian:

sudo apt-get install vsftpd

Для CentOS или Fedora команда будет немного отличаться:

sudo yum install vsftpd

Далее нас попросят ввести пароль от учётной записи, а затем начнётся установка.

После этого FTP-сервер сразу же запустится и к нему можно будет подключиться — например, через браузер. Чтобы это сделать, сначала узнаем IP-адрес нашего компьютера с помощью команды ifconfig (входит в пакет Net-tools, возможно, придётся дополнительно установить и его):

Скриншот: Skillbox Media

Отсюда нам нужно взять адрес inet. В нашем случае он следующий: 192.168.0.47. У вас он может отличаться. Хотя на самом деле он необязателен — для FTP-сервера, запущенного на вашей локальной машине, можно использовать псевдоним localhost.

Теперь запустим vsftpd следующей командой:

sudo service vsftpd start

Проверим, что наш ftp-сервер действительно работает — и сделаем это в стиле Linux, то есть воспользуемся командной строкой. Подключимся к серверу:

ftp localhost

Теперь надо ввести имя пользователя и пароль — они совпадают с именем пользователя и его паролем в вашей ОС. Логинимся и проверяем с помощью команды ls, в какой директории мы оказались и какие файлы и папки доступны на нашем FTP-сервере.

Скриншот: Skillbox Media

Теперь настроим анонимный режим — чтобы к нашему серверу можно было подключаться без логина и пароля. Для начала остановим vsftpd (кстати, чтобы выйти из режима ftp в командной строке, просто введите после >ftp команду quit):

sudo service vsftpd stop

Сервер остановлен. Дальше нужно изменить файл /etc/vsftpd.conf. Сделать это можно, например, с помощью текстового редактора Nano:

sudo nano /etc/vsftpd.conf

В открывшемся файле прокручиваем стрелками на клавиатуре до строки anonymous_enable=NO:

Скриншот: Skillbox Media

Управление редактором Nano происходит с помощью сочетания клавиш. Меняем слово NO на YES, затем используем сочетание клавиш Ctrl + O, а после — нажимаем Enter. Изменения внесены.

Чтобы выйти, пользуемся сочетанием клавиш Ctrl + X. Готово — теперь нам доступен анонимный режим. Чтобы снова запустить сервер, вводим следующую команду:

sudo service vsftpd start

Снова заходим на ftp-сервер.

ftp localhost

И… нас снова попросят залогиниться. Эй, а как же анонимность? А для этого есть специальный пользователь anonymous с пустым паролем. Так что логинимся и наслаждаемся новым сервером.

Что запомнить

Давайте повторим, что мы узнали о протоколе FTP:

  • FTP — это протокол передачи данных по сети. Его создали в 1971 году, чтобы быстро и удобно передавать файлы с одного компьютера на другой и управлять удалёнными серверами.
  • Для работы протоколу нужны два элемента — клиент и сервер. Клиент подключается к серверу с помощью логина и пароля, а затем посылает ему команды, чтобы скачивать или загружать файлы.
  • FTP передаёт данные в небезопасном режиме. Если кто-то подключится к вашей сети, он сможет вместе с вами скачивать файлы. Поэтому рекомендуется использовать безопасные расширения протокола — FTPS или SFTP.

Изучайте IT на практике — бесплатно

Курсы за 2990 0 р.

Я не знаю, с чего начать
Научитесь: Профессия Специалист по кибербезопас­но­сти Узнать больше
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована