• База знаний
  • /
  • Блог
  • /
  • Wiki
  • /
  • ONLINE CHAT
+380 (44) 364 05 71

Статья также доступна на украинском (перейти к просмотру).

Протокол SFTP

Оглавление

Известные сетевые протоколы передачи данных и их «безопасные» аналоги, такие как FTP, FTPS или SCP имеют значительные недостатки, как в плане безопасности, так и ограничения функциональности. И поэтому постоянно идет поиск и разработка более совершенных протоколов и методов работы с сетевыми данными. Одним из таких «современных» вариантов сетевого протокола является SFTP, имеющий расширенную функциональность и некоторые преимущества в защите передаваемых по сети данных. Рассмотрим особенности данного механизма и продемонстрируем его использование на практике.

Как работать с SFTP через программу WinSCP читайте по ссылке.

Почему SFTP нужно использовать? В чем его преимущество перед FTP

Протокол SFTP (SSH File Transfer Protocol) разрабатывался прежде всего как подсистема и расширение к SSH-2 (Secure Shell). Это и обусловило дальнейшее развитие его функциональностей и возможностей. Да, он всегда работает сверх безопасного канала передачи данных, и поэтому исходными положениями является то, что сервер уже аутентифицировал клиента и что ему доступны пользовательские данные. То есть сам он не обеспечивает аутентификацию и безопасность, а использует возможности протокола базового уровня, а именно SSH. Это освобождает его от «лишнего бремени» и дает возможность обслуживать другие направления, в частности, работу с удаленной файловой системой. И поэтому этот механизм считается промежуточным звеном между средствами передачи данных и средствами управления удаленными файловыми системами.

Такое строение, в частности, позволяет связывать загружаемые файлы с их основными атрибутами, например, отметками времени. В этом заключается его универсальность по сравнению с другими подобными механизмами, например FTP или FTPS, которые ориентированы только на обеспечение передачи данных.

SFTP шифрует не только управляющие команды, но и передаваемые данные. Это делает невозможным перехват конфиденциальной информации пользователя – паролей и других данных. Что касается стандартного FTP, то здесь данные вообще не шифруются, а передаются по сети открытым текстом. Это позволяет злоумышленникам с помощью определенных вмешательств похищать данные. В частности, наиболее часто ими применяются скрытые атаки типа bounce attacks, spoof-атаки, sniffing и некоторые другие.

Как вариант повышения уровня безопасности при работе с FTP, начали использовать механизм туннелирования FTP-сессий через SSH-соединение. При таком подходе удается защитить только канал с управляющими командами, а каналы с данными по-прежнему остаются незащищенными. То есть здесь отсутствует целостная защита, а лишь частичная.

SFTP менее зависим от платформы, чем тот же SCP, и поэтому его серверы уже сейчас доступны для большинства существующих платформ. Он двусторонний, что позволяет прерывать передачу файлов, не завершая сеанс, в отличие от других средств. Однако скорость передачи данных из-за этого меньше, чем у SCP.

Относительно функциональности, SFTP и FTP имеют некоторые общие черты, в частности, это восточный набор команд для управления передачей по технологии клиент-сервер.

В чем разница между SFTP и FTPS

По сравнению с SFTP, протокол FTPS имеет принципиально отличное устройство и принципы функционирования. Это расширение FTP.

FTPS (File Transfer Protocol + SSL) является еще одной попыткой повысить уровень защиты данных. Здесь добавляются возможности криптографического кодирования данных с помощью SSL (Secure Sockets Layer). Это повышает уровень безопасности и сокетов. Благодаря этому становится возможным обеспечить аутентификацию ключей обмена и использование симметричного шифрования для обеспечения определенного уровня конфиденциальности передаваемой информации.

SSL не зависит от какого-либо прикладного протокола и предоставляет определенный канал передачи. По сути, SSL выполняет фильтрующие функции между FTP, то есть клиентом и протоколом транспортного уровня TCP/IP. То есть он работает в многослойной среде, что способствует безопасности обмена информацией. Безопасное соединение открыто только для целевых пользователей. Он способен выполнить проверку подлинности сервера еще до начала работы протокола FTP. Сейчас механизм является SSL устаревшим, а поддерживается его более «современная» версия – TLS (Transport Layer Security).

Таким образом, FTPS не является самостоятельным протоколом, а только комбинацией FTP и механизма кодирования SSL/TLS, что позволяет создать определенный двусторонний фильтр между клиентом и транспортом в многослойной среде. В отличие от него, SFTP является относительно независимым протоколом, который всегда работает сверх защищенного канала передачи данных, прежде всего SSH и объединяет в себе возможности средств передачи данных и управления файловой системой.

Использование SFTP, основные команды

На нашей локальной и удаленной машинах установлен OS Ubuntu 20.04. Перед началом работы необходимо установить или проверить существующую связь с удаленным сервером с помощью стандартных средств SSH. Рекомендуем сразу же наладить аутентификацию с помощью открытых SSH-ключей, что намного надежнее, чем аутентификация по паролю. Введем в терминале:

$ ssh alexandr75001@176.9.11.135

Подключение к удаленному серверу.

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

Установка безпосного подключения к серверу.

После повторного ввода команды соединения, удаленный хост запросит пароль доступа пользователя alexandr75001, поскольку у нас настроена аутентификация по паролю.

Ввод пароля.

После ввода пароля, нам предоставлен доступ к удаленной машине, то есть связь проверена.

Успешное подключение к серверу.

Для возвращения назад введем соответствующую команду:

$ exit

Завершение активной сессии.

Теперь попытаемся установить сеанс SFTP. Для этого введем в терминале:

$ sftp alexandr75001@176.9.11.135

Установка сеанса по sftp

После ввода пароля, сеанс открывается и в командной строчке мы видим приглашение типа «sftp>»

Активный сеанс sftp

По умолчанию, для соединения используется порт 22. Но, если бы мы работали с настраиваемым другим портом SSH, то в команде мы должны были бы его указать. Ее формат в этом случае будет следующим:

$ sftp -oPort=N alexandr75001@176.9.11.135

где N – номер порта, который нам нужен для соединения, например N=21.

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

$ help

Список основных команд sftp

Вместо команды help можно воспользоваться символом «?». Как можно убедиться, большинство команд обладают той же функциональностью, что и средства оболочки SSH. Однако, в отличие от последних, они не полностью соответствуют синтаксису оболочки и менее функциональны. Надо иметь это в виду, работая с ними.

После этого протестируем известные возможности SFTP относительно навигации по файловой системе. Мы можем свободно перемещаться по файловой иерархии удаленной системы с помощью ряда простых команд. В первую очередь, выясним в каком каталоге мы находимся:

$ pwd

Проверка каталога нашего местонахождения

Наша удаленная директория: /var/www/alexandr75001/data.

Теперь просмотрим содержимое текущей директории удаленного хоста:

$ ls

Проверка содержимого директории.

Здесь мы видим несколько каталогов и два файла – filedump.sql и t4.jpg. Теперь с помощью дополнительных параметров команды ls просмотрим метаданные файлов и каталогов директории:

$ ls –la

Просмотр метаданных файлов и папок

Можно убедиться, что это позволяет получить достаточно основательную информацию по файловой системе, в частности, что касается установленных разрешений, размера, даты создания объектов и других данных.

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

$ cd logs

Переход в катлог logs

Просмотрим содержимое каталога logs:

$ ls

Проверка содержимого каталога.

 Возможны ситуации, когда необходимо просмотреть характеристики локальной файловой системы, не прерывая при этом текущий сеанс SFTP. Для этого предусмотрено использование символа "l". Достаточно только прибавлять его впереди команды. К примеру, выясним какая наша текущая директория на локальной машине. Для этого введем в терминале:

$ lpwd

Проверка нашего местоположения на локальном сервере.

Как видим, мы находимся в каталоге /root. Просмотрим его содержимое:

$ lls

Просмотр содержимого локальной папки.

Сейчас в нем находится только директория snap.

Мы могли бы изменить текущую директорию с помощью команды lcd, но пока не будем этого делать.

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

$ get aventa-studio.com.access.log.0.gz

Загрузка файлов с удаленного хоста.

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

$ get aventa-studio.com.access.log.0.gz file1

Копирование файлы с изменение его имени.

Команда исполнена успешно. Проверим это:

$ lls

Проверка что файл скопирован с изменением имени.

Видим, что в нашей локальной директории появилось два новых файла и один из них с именем file1.

Также мы можем передать файлы с локальной машины на удаленную. Скопируем наш файл file1 в текущую директорию на удаленной машине:

$ put file1

Копирование файла с локального хоста на удаленный.

Как видим, загрузка успешно состоялась.
Теперь проверим свободное место на удаленном хосте:

$ df –h

Проверка свобоного места на удаленном хосте.

Получили хороший результат. Однако следует отметить, что отсутствует локальная версия указанной команды. Это можно обойти с помощью символа "!". Достаточно его набрать – и мы в локальной системе. Продемонстрируем это:

$ !

Переход в локальную систему.

Действительно, мы вернулись. А теперь уже можно проверить свободное место:

$ df -h

Проверка свобдного места на локальном хосте.

Все хорошо. Для возвращения к предыдущему сеансу достаточно воспользоваться хорошо известным средством:

$exit

Завершение текущего сеанса.

Теперь мы снова «на связи» с отдаленным хостом.

SFTP позволяет выполнять некоторые виды обслуживания удаленной файловой системы, в частности изменять владельцев ресурсов и устанавливать разрешения. Например, для смены владельца файла достаточно использовать следующий формат команды:

$ chown user_ID name_file

Здесь user_ID – идентификатор пользователя системы, name_file – имя файла, для которого меняется владелец. Но, нет возможности с помощью интерфейса программного средства определить идентификатор нужного пользователя. Для этого необходимо воспользоваться другим путем для определения user_ID. Это касается копирования на локальную машину файлов passwd и group при изменении группы. Продемонстрируем это:

$ get /etc/passwd

Получение содержимого файла passwd

$ !less passwd

Проверка значения user_id

Значение user_ID для каждого из файлов находится в третьем столбце после двоеточия. Именно его и нужно использовать для смены владельца.

В случае изменения группы, используется следующая команда:

chgrp group_ID name_file

Ситуация та же, и поэтому найдем нужные значения group_ID с помощью следующих средств:

$ get /etc/group

Получение данных о файле groop

$ !less group

Вывод содержимого файла group

В третьем столбце после двоеточия можно просмотреть нужные значения group_ID.

Можно также устанавливать разрешения для файлов в удаленной системе. Например, сделаем это для нашего файла с именем file1:

$ chmod 777 file1

Установка прав доступа на файл.

Просмотрим результат:

$ ls –la

просмотр метаданных файла.

Команда сработала.

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

$ lumask 022

Установка локальной маски на копируемые данные.

Теперь все файлы, загружаемые на локаль, будут иметь права доступа 644.

Для создания каталогов также есть соответствующие средства. Для удаленной системы:

$ mkdir new

Создаение нового каталога на удаленном хосте.

Для локального хоста:

$ lmkdir new

Создаение нового каталога на локальном хосте.

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

$ lls

Проверка содержимого каталога.

Да, каталог на локальной машине успешно создан.

Не знаете где разместить свой проект? Столбы облачных технологий оказались очень дорогими? Предлагаем вам виртуальный выделенный сервер с размещением в Украине или Польше. Невысокая стоимость, широкий выбор шаблонов операционной системы и дополнительного программного обеспечения для создания сервера, круглосуточная техническая поддержка, бесплатное место для хранения резервных копий.

Подписывайтесь на наш телеграм-канал https://t.me/freehostua, чтобы быть в курсе новых полезных материалов.

Смотрите наш канал Youtube на https://www.youtube.com/freehostua.

Мы в чем-то ошиблись, или что-то пропустили?

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

Дата: 14.03.2023
Автор: Олександр
Голосование

Авторам статьи важно Ваше мнение. Будем рады его обсудить с Вами:

comments powered by Disqus
navigate
go
exit
Спасибо, что выбираете FREEhost.UA