Протокол FTP: что это такое и как с ним работать
Объясняем простым языком, что это за протокол для передачи данных, и запускаем собственный сервер на нём.
Иллюстрация: Оля Ежак для Skillbox Media
Когда интернет только превращался в глобальную сеть, появилась новая потребность — передавать файлы с одного компьютера на другой на расстоянии. Тогда ещё не было варианта просто загрузить их в условный телеграм и скинуть другу. Поэтому в 1971 году придумали протокол FTP.
FTP решал главную проблему — быстро и надёжно передавать файлы по Сети. А большую популярность он приобрёл из-за своей простоты: для доступа к другому компьютеру нужны были только логин и пароль.
В этой статье рассказываем, что это за протокол, зачем нужен и как работает, а ещё — пробуем запустить свой FTP-сервер на Windows и Linux.
Всё, что нужно знать об FTP:
- Что это такое
- Чем отличается от HTTP
- Плюсы и минусы протокола
- Для чего нужны FTPS и SFTP
- Как передавать файлы
- Обзор популярных FTP-клиентов
- Как создать сервер на Windows и Linux
- Что запомнить
Что такое FTP
FTP — это протокол для передачи данных через интернет. Аббревиатура расшифровывается как File Transfer Protocol, в переводе — «протокол передачи данных». С его помощью можно скачать или отправить что угодно: видео, музыку, программы, изображения.
В процедуре передачи файлов участвуют два игрока — клиент и сервер. Первый отправляет запрос в виде команды, а второй обрабатывает её и возвращает ответ в виде файла или сообщения об ошибке. При этом сервером может быть и обычный ПК, а не только классический веб-сервер.
Чтобы удостовериться, что клиент может скачивать файлы, при подключении сервер просит ввести логин и пароль. Но это не всегда обязательно — FTP поддерживает и анонимный режим, когда подключиться к серверу можно без авторизации.
Давайте посмотрим, как работает FTP на примере жизненной ситуации.
Допустим, вы работаете программистом в IT-компании. Весь код и все файлы хранятся в локальном хранилище — на внутреннем сервере, который доступен только сотрудникам. Чтобы начать работу, нужно перенести рабочие файлы себе на компьютер, а для этого — подключиться к серверу.
Задача понятна — открываем консоль и устанавливаем соединение через FTP для доступа к хранилищу. Перед этим нужно запросить логин и пароль от него, иначе не удастся подключиться. Как только вы авторизуетесь, вам будут доступны все файлы на сервере — или те, к которым вам выдадут доступ. Чтобы скачать их, нужно ввести ещё пару команд и дождаться загрузки. Готово!
Конечно, сегодня обмен рабочими файлами происходит гораздо быстрее и удобнее с помощью 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-ключей: один на стороне клиента шифрует трафик, а другой, на стороне сервера, его дешифрует.
Оба протокола стали хорошим дополнением к FTP. При выборе одного из них нужно учитывать особенности вашего проекта. Например, если у вас уже есть SSL-сертификат, то удобнее будет использовать FTPS. А если сертификата нет и покупать его не хочется — выбирайте SFTP.
Как передавать файлы по FTP
Как мы выяснили ранее, для работы FTP-протоколу нужны двое — клиент и сервер. Клиент подключается к серверу и отправляет ему команды, чтобы загрузить или скачать файлы.
Чтобы подключиться к серверу, нужно знать его IP-адрес, а ещё — логин и пароль для авторизации. Логин и пароль задаются на стороне сервера при его настройке. IP-адрес тоже можно узнать на сервере — например, в консоли Windows это делается с помощью команды ipconfig.
Как работает авторизация по FTP-протоколу
FTP поддерживает два способа авторизации: логин-паролевый и анонимный. Анонимный режим доступен на любом FTP-сервере: он нужен, чтобы делать некоторые файлы общедоступными.
Например, вы можете выложить картинку на FTP-сервер и разослать её своим друзьям, но при этом выдать им данные только от анонимного режима, чтобы они не увидели все файлы на сервере.
Авторизация для анонимного режима похожа на логин-паролевую. Но вместо логина нужно ввести слово anonymous, а вместо пароля — любой адрес электронной почты или оставить поле пустым.
Анонимный режим — это рудимент, который остался со времён Unix-систем. Тогда везде была логин-паролевая авторизация, а других способов ещё не придумали.
Когда у нас есть IP-адрес, логин и пароль, можно подключаться. Для этого понадобится специальная программа — FTP-клиент. Она может как быть обычным консольным приложением, так и иметь графический интерфейс.
Чтобы осуществить передачу, FTP-клиент попросит нас подключиться к серверу, а затем авторизоваться. Вот так выглядит подключение к FTP-серверу через консоль Windows:
Посмотреть, какие файлы находятся на сервере, можно, воспользовавшись следующей командой:
Чтобы скачать или загрузить файл, FTP-протокол использует две команды:
- PUT — для отправки файлов с вашего компьютера на сервер;
- GET — для загрузки файлов с сервера на ваш компьютер.
Когда вы вводите одну из них, клиент и сервер создают соединение для передачи данных. После этого файлы делятся на пакеты — небольшие кусочки размером от 1 до 64 КБ, — а затем отправляются по протоколу TCP/IP. Подробнее о том, как это работает, можно почитать в одной из наших статей.
В консоли это выглядит так:
Если передача пройдёт успешно, FTP-клиент выведет соответствующее сообщение. Но, если что-то пойдёт не так, передача данных остановится и на экране появится сообщение об ошибке — оно будет состоять из кода и короткого пояснения. Например, вот как это может выглядеть:
Закрыть FTP-соединение можно следующей командой:
Обзор популярных FTP-клиентов
FTP-клиентов существует немало. Некоторыми из них можно пользоваться бесплатно, а за другие надо будет заплатить. Давайте рассмотрим несколько самых известных сервисов.
FileZilla
Это популярный FTP-клиент, который позволяет удобно подключаться к удалённым серверам. У FileZilla простой интерфейс и понятное управление: освоить его сможет даже новичок.
В FileZilla есть два главных окна: одно показывает файлы и папки на вашем компьютере, а другое — директорию удалённого FTP-сервера. Чтобы переместить файл с одного компьютера на другой, нужно просто перетащить его из левого окна в правое. Вот так просто это и работает.
В FileZilla есть и другие функции — например, она поддерживает синхронизацию данных в облаке и передачу файлов по VPN. Для защищённых соединений сервис использует сертификаты SSL и TLS.
Где скачать: на официальном сайте FileZilla.
Cyberduck
Это ещё один FTP-клиент с открытым исходным кодом. Он бесплатный, но в нём есть всё, что нужно для нормальной работы протокола FTP.
При запуске клиента он попросит подключить его к FTP-серверу, после чего выведет его содержимое на экран. Чтобы загрузить файл, нужно просто перетащить его из папки на компьютере в Cyberduck.
Есть и продвинутые возможности — например, закладки для часто используемых серверов, загрузка в облако и интеграция с текстовыми редакторами. Ещё к Cyberduck можно подключить шифрование.
Где скачать: на официальном сайте Cyberduck.
CuteFTP
Ещё один популярный FTP-клиент. Он очень похож на FileZilla, но главное отличие в том, что он платный. 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-компоненты
Первым шагом открываем Панель управления:
Переходим во вкладку Программы → Программы и компоненты. Здесь выбираем пункт Включение или отключение компонентов Windows:
Появится список, в котором нужно поставить галочку у пункта FTP-сервер, а также найти пункт Службы IIS → Средства управления веб-сайтом. Здесь поставим галочку у пункта Сценарии и средства управления IIS:
Нажимаем ОК и дожидаемся, пока все настройки применятся к Windows.
Создаём FTP-сервер
Чтобы использовать сервер, нам понадобится папка, в которой мы будем хранить все файлы. Создадим её на диске C и назовём ftp:
Внутри неё можно создать пару файлов и папок. Они понадобятся, чтобы проверить правильность работы FTP-сервера:
Теперь нам нужно опубликовать наш сервер. Для этого открываем Диспетчер служб IIS:
В открывшемся окне находим слева пункт сайты и кликаем по нему правой кнопкой мыши. Выбираем Добавить FTP-сайт (тут главное не перепутать с веб-сайтом):
Теперь нам нужно указать данные нашего сервера. В поле Имя FTP-сайта вписываем любое имя, какое захотите, а во вкладке Физический путь указываем путь до нашей папки ftp. Жмём Далее:
Затем открывается окно с дополнительными настройками. В разделе Привязка ничего не меняем, а в SSL выбираем Без SSL. В будущем вы можете попробовать настроить сервер с шифрованием, но сейчас нам надо разобраться, как запустить простой сервер.
В последнем окне с настройками нужно выбрать, каких пользователей пускать на сервер, и выдать им разрешения. Поставим галочки для анонимных и обычных пользователей, а ниже укажем, что они смогут читать и записывать данные:
Готово — наш сервер создан и опубликован. Увидеть его можно в списке всех серверов:
Проверяем, как работает
Чтобы зайти на FTP-сервер, нужно сначала получить IP-адрес нашего компьютера. Для начала — открываем консоль (можно просто вбить в поиске cmd), а затем вводим команду ipconfig:
Копируем адрес из графы IPv4-адрес. Далее открываем проводник или любой FTP-клиент и вводим в адресной строке ftp://[ваш IP-адрес]. Видим наши файлики:
А можно ли открыть сервер, скажем, в Google Chrome?
Раньше FTP-ссылки открывались через браузер, но потом разработчики веб-клиентов стали один за другим убирать поддержку этого протокола — мол, слишком старый и небезопасный.
Решение: понизить версию браузера — например, в Chrome до 91-й версии FTP ещё можно было вернуть, поставив флажок в пункте Enable support for FTP URLs в chrome://flags.
Как создать FTP-сервер на Linux
По умолчанию в дистрибутивах Linux нет FTP-сервера, поэтому его нужно установить отдельно. Для этого вводим следующую команду для версий Linux Ubuntu и Debian:
Для CentOS или Fedora команда будет немного отличаться:
Далее нас попросят ввести пароль от учётной записи, а затем начнётся установка.
После этого FTP-сервер сразу же запустится и к нему можно будет подключиться — например, через браузер. Чтобы это сделать, сначала узнаем IP-адрес нашего компьютера с помощью команды ifconfig (входит в пакет Net-tools, возможно, придётся дополнительно установить и его):
Отсюда нам нужно взять адрес inet. В нашем случае он следующий: 192.168.0.47. У вас он может отличаться. Хотя на самом деле он необязателен — для FTP-сервера, запущенного на вашей локальной машине, можно использовать псевдоним localhost.
Теперь запустим vsftpd следующей командой:
Проверим, что наш ftp-сервер действительно работает — и сделаем это в стиле Linux, то есть воспользуемся командной строкой. Подключимся к серверу:
Теперь надо ввести имя пользователя и пароль — они совпадают с именем пользователя и его паролем в вашей ОС. Логинимся и проверяем с помощью команды ls, в какой директории мы оказались и какие файлы и папки доступны на нашем FTP-сервере.
Теперь настроим анонимный режим — чтобы к нашему серверу можно было подключаться без логина и пароля. Для начала остановим vsftpd (кстати, чтобы выйти из режима ftp в командной строке, просто введите после >ftp команду quit):
Сервер остановлен. Дальше нужно изменить файл /etc/vsftpd.conf. Сделать это можно, например, с помощью текстового редактора Nano:
В открывшемся файле прокручиваем стрелками на клавиатуре до строки anonymous_enable=NO:
Управление редактором Nano происходит с помощью сочетания клавиш. Меняем слово NO на YES, затем используем сочетание клавиш Ctrl + O, а после — нажимаем Enter. Изменения внесены.
Чтобы выйти, пользуемся сочетанием клавиш Ctrl + X. Готово — теперь нам доступен анонимный режим. Чтобы снова запустить сервер, вводим следующую команду:
Снова заходим на ftp-сервер.
И… нас снова попросят залогиниться. Эй, а как же анонимность? А для этого есть специальный пользователь anonymous с пустым паролем. Так что логинимся и наслаждаемся новым сервером.
Что запомнить
Давайте повторим, что мы узнали о протоколе FTP:
- FTP — это протокол передачи данных по сети. Его создали в 1971 году, чтобы быстро и удобно передавать файлы с одного компьютера на другой и управлять удалёнными серверами.
- Для работы протоколу нужны два элемента — клиент и сервер. Клиент подключается к серверу с помощью логина и пароля, а затем посылает ему команды, чтобы скачивать или загружать файлы.
- FTP передаёт данные в небезопасном режиме. Если кто-то подключится к вашей сети, он сможет вместе с вами скачивать файлы. Поэтому рекомендуется использовать безопасные расширения протокола — FTPS или SFTP.