Файл: Протокол безопасных соединений SSH (История протокола SSH).pdf
Добавлен: 28.03.2023
Просмотров: 334
Скачиваний: 2
Можно также скопировать в обратном направлении:
scp [-r] [user@]host:file path
Обычно это path будет .текущий каталог.
Команда sftp в Linux является клиентской программой для SFTP. Интерфейс sftp командной строки был разработан, чтобы быть похожим на команду ftp . Команда sftp обычно является частью пакета OpenSSH .
SFTP может также использоваться для обмена файлами, подобно файлообменнику Windows и Linux NFS . Основное отличие состоит в том, что SFTP является безопасным и может надежно использоваться по трансляции сетевых адресов (NAT) и общедоступному Интернету.
Sshfs - это сетевая файловая система для Linux, которая работает по протоколу SFTP. Он может использовать любой SSH-сервер в качестве сервера и использовать удаленные файлы по сети, как если бы они были локальными файлами. Удаленная файловая система может быть смонтирована и размонтирована по желанию. Это наиболее удобный способ монтирования удаленных файлов ad hoc без необходимости какой-либо настройки администратором сервера. Ключи SSH могут даже полностью автоматизировать установление соединения с сервером. По сути, любой, кто может войти на сервер, может смонтировать свою файловую систему с доступом к тем файлам, к которым имеет доступ пользователь.[10]
Другие реализации совместного использования файлов, использующие SFTP:
Expandrive (Windows и Mac)
Apache Commons VFS
ChromeOS-файловая система, SFTP
Как и сам SSH, SFTP является протоколом клиент-сервер. Клиенты SFTP включены в качественные клиенты SSH, а полные реализации SSH корпоративного уровня обеспечивают функциональность как клиента SFTP, так и сервера. Некоторые клиенты SSH, такие как Tectia SSH , также предоставляют графические представления файлового менеджера для удаленных файловых систем.
В Linux SFTP часто используется как утилита командной строки, которая поддерживает как интерактивную, так и автоматическую передачу файлов. Аутентификация с открытым ключом может использоваться для полной автоматизации входа в систему для автоматической передачи файлов. Тем не менее, правильное управление жизненным циклом ключей SSH важно для контроля доступа.
Распространенные случаи использования для автоматической передачи файлов включают ночные резервные копии системы, копирование данных в системы аварийного восстановления, распространение данных конфигурации и перемещение журналов транзакций в архивные системы. Многие организации имеют тысячи ежедневных передач SSH. В некоторых случаях мы видели более 5 миллионов ежедневных автоматических входов в систему по SSH.[11]
Некоторые коммерческие продукты для передачи файлов, поддерживающие SFTP, включают следующее. Ничто на этой странице не должно восприниматься как одобрение какого-либо продукта или решения.
IBM MQ Управляемая передача файлов
GlobalScape Улучшенная передача файлов
GoAnywhere MFT
SFTPPlus Управляемая передача файлов
IPSwitch MOVEit Complete
Solarwinds управляемая передача файлов
JScape MFT Server
Серв-У MFT Сервер
Безопасный MFT-шлюз Axway: SecureTransport
Stonebranch Универсальный Data Mover
Coviant Diplomat Управляемая передача файлов
Акронис МассТранзит
Tibco Управляемая передача файлов
BMC Control-M Управляемая передача файлов
Signiant Безопасная передача файлов
SFTP библиотеки для разработчиков
Существует много библиотек SSH с открытым исходным кодом, доступных для различных языков программирования.[12]
pysftp - это реализация Python
Paramiko - это еще одна реализация Python
pkg / sftp - это реализация языка Go
libssh - реализация протокола на C
libssh2 - еще одна реализация протокола C
Rebex SFTP является реализацией .NET (C #)
codeignioter-sftp - это реализация PHP
phpseclib - это еще одна реализация PHP
SmartFTP является компонентом ActiveX
JCraft JSch - это реализация Java
SSHJ - другая реализация Java
Протокол SFTP поддерживает несколько одновременных операций. Каждая операция идентифицируется уникальным номером, назначенным клиентом, и ответ сервера содержит тот же идентификационный номер. Сервер может обрабатывать запросы асинхронно и может возвращать ответы не в порядке. По соображениям производительности клиенты передачи файлов часто отправляют несколько запросов перед тем, как остановиться, ожидая ответов.
Операции или типы пакетов, поддерживаемые протоколом, включают в себя:[13]
INIT : отправляет номера версий клиента и расширения на сервер
VERSION : возвращает номер версии сервера и расширения клиенту
OPEN : открывает или создает файл, возвращая дескриптор файла
CLOSE : закрывает дескриптор файла
READ : читает данные из файла
WRITE : записывает данные в файл
OPENDIR : открывает каталог для чтения, возвращает дескриптор каталога
READDIR : читает имена файлов и атрибуты из дескриптора каталога
MKDIR : создает каталог
RMDIR : удаляет каталог
REMOVE : удаляет файл
RENAME : переименовывает файл
STAT : возвращает атрибуты файла с указанным путем, следуя символическим ссылкам
LSTAT : возвращает атрибуты файла с указанным путем, без следующих символических ссылок
FSTAT : возвращает атрибуты файла с указанным дескриптором файла
SETSTAT : изменяет атрибуты файла с указанием пути
FSETSTAT : изменяет атрибуты файла с учетом дескриптора файла
READLINK : читает значение символической ссылки
SYMLINK : создает символическую ссылку
REALPATH : канонизирует относительный путь размера сервера к абсолютному пути
Следующие ответные пакеты возвращаются сервером:
STATUS: указывает на успех или неудачу операции
HANDLE : возвращает дескриптор файла в случае успеха
DATA: возвращает данные в случае успеха
ATTRS : возвращает атрибуты файла в случае успеха
Существует также механизм расширения для произвольных расширений, зависящих от поставщика. Поддерживаемые расширения согласовываются с использованием пакетов INIT и VERSION.
EXTENDED : отправляет специфичный для поставщика запрос от клиента к серверу
EXTENDED_REPLY : отправляет специфический для поставщика ответ с сервера на клиент.
Люди часто хотят сравнивать SFTP и FTPS. FTPS - это в основном старый протокол ftp , работающий через SSL (Secure Sockets Layer) или TLS (Transport Layer Security).[14]
Преимущества SFTP перед SFTP включают в себя:
- SFTP работает через SSH в стандартном порту SSH. Таким образом, на сервере не нужно открывать дополнительные порты и не нужно поддерживать дополнительную аутентификацию. Это упрощает настройку и снижает вероятность ошибок конфигурации.
- FTPS требует сложной настройки брандмауэра и может не работать через NAT. Порты 989 и 990 должны быть открыты. Кроме того, FTPS поддерживает как активный, так и пассивный режимы (см. FTP ), что еще больше усложняет настройку брандмауэра и приводит к проблемам.
- FTPS требует сертификат X.509 для сервера, как правило, из общедоступного центра сертификации. SSH работает без какой-либо централизованной инфраструктуры. SFTP может использовать любой метод распространения или сертификации ключей хоста, используемый для SSH, без необходимости дополнительной работы и текущего обслуживания.
- FTPS - это, в основном, FTP, что означает, что он имеет режим ASCII, который может повредить файлы, если режим не установлен должным образом. Некоторые реализации по умолчанию используют режим ASCII.
- FTPS нельзя использовать в качестве файловой системы. (Это не улучшает безопасность, так как он может читать те же файлы.)
- FTPS требует, чтобы дополнительный серверный пакет программного обеспечения был установлен и исправлен, тогда как SFTP обычно идет с SSH с системой.[15]
Подведя итоги данной главы можем отметить протоколы ssh и sftp является безопасным и удобным протоколами для безопасной передачи данных между компьютерами. В следующей главе рассмотрим, как настроить такой сервер.
Глава 3. Конфигурация сервера SSH
Для создания сервера будет взят обычный офисный компьютер с характеристиками:
- Процессор core 2 duo E8400
- Оперативная память 4 гигабайта
- Жесткий диск на 1 терабайт
Для целей опробования создания сервера таких характеристик на создания пробного сервера хватит. Используем операционную систему Ubuntu 18.4 LTS.
Для сервера будем использовать OpenSSH. Это самый распространённый сервер в SSH. Для его установки вводим команду:[16]
sudo apt-get install ssh
В метапакете ssh содержится как клиент, так и сервер, но при этом, скорее всего, будет установлен только сервер, т. к. клиент уже есть в Ubuntu по умолчанию.
При установке SSH-сервер автоматически прописывается в автозагрузку. Управлять его запуском, остановкой или перезапуском можно с помощью команд:
sudo service ssh stop|start|restart
Основной файл конфигурации SSH-сервера — файл /etc/ssh/sshd_config, доступный для чтения или редактирования только суперпользователю.
Сам по себе, неправильно настроенный SSH-сервер — огромная уязвимость в безопасности системы, т. к. у возможного злоумышленника есть возможность получить практически неограниченный доступ к системе. Помимо этого, у sshd есть много дополнительных полезных опций, которые желательно включить для повышения удобства работы и безопасности.
Приступим к настройке конфигурационного файла (файл с разъяснением на русском можно увидеть в приложении работы[17]). Для повышения безопасности сервера необходимо присвоить некоторые настройки:[18]
- Ограничить семейство обрабатываемых адресов реально используемыми, т. е. если вы используете только IPv4 — отключите IРv6, и наоборот. Сделаем разрешение IPv4 и запретим IPv6 командой: AddressFamily inet.
- Поменяем порт нашего SSH сервера. Это связано с тем, что многочисленные сетевые сканеры постоянно пытаются соединиться с 22-м портом и как минимум получить доступ путем перебора логинов/паролей из своей базы. Присвоим порт 2002 с помощью команды: Port 2002.
- Наш будет рассчитан на узкий круг лиц, для каждого будет создан свой ключ, поэтому будет разумно убрать парольную аутентификацию с помощью команды: PasswordAuthentication no
- sshd может работать с протоколами SSH1 и SSH2. При этом использование небезопасного SSH1 крайне не рекомендуется. Заставить sshd работать только с протоколом SSH2 можно так: Protocol 2
- как уже говорилось выше для аутентификации будет использовать ключевой доступ. Для этого будут использованы RSA-ключи. При таком способе пользователь генерирует на своей стороне пару ключей, из которой один ключ является секретным, а другой публичным. Публичный ключ копируется на сервер и служит для проверки идентичности пользователя. Для включения аутентификации по публичному ключу вводим: PubkeyAuthentication yes
- Сервер должен знать, где ему следует искать публичный ключ пользователя. Для этого применяется специальный файл authorized_keys. Используем метод пользователь файл. Для каждого пользователя будет свой файл с публичным ключем. Для этого вводим параметр: AuthorizedKeysFile %h/.ssh/my_keys.
- Установим таймаут, чтобы удалять брошенные сессии ssh. Для этого ставим значения:
ClientAliveInterval 300
ClientAliveCountMax 0
Устанавливаем таймаут idle в секундах (300 секунд = 5 минутам). После того, как указанное время истечет, бездействующий пользователь будет отключен от системы.
- Добавим информационный баннер: Banner /etc/issue. Создадим файл /etc/issue напишем «Hello, User».
На этом настройка конфигурационного файла сервера заканчивается. Вводим команду sudo service ssh restart. Все сервер готов к использованию. Теперь к этому компьютеру можно подключиться удалено, но для этого из настроек видно выше, что на клиентской машине необходимо установить клиентскую версию SSH. На клиентской машине установлена операционная система windows 10. С 2019 года и начиная с версии Windows 10 1809 появилась возможность устанавливать встроенную openssh[19].
Клиент и сервер OpenSSH устанавливаются в Windows 10 версии 1809 как отдельные компоненты.
Устанавливаем OpenSSH, открываем раздел "Параметры" и последовательно выбераем "Приложения" > "Приложения и компоненты" > "Управление дополнительными возможностями".
Смотрим этот список и выяснием, установлен ли клиент OpenSSH. Если нет, то выберите пункт "Добавить компонент" в верхней части страницы, а затем уставливаем клиент OpenSSH, находим элемент "Клиент OpenSSH" и щелкаем "Установить"[20];
После завершения установки возвращаемся в раздел "Приложения" > "Приложения и компоненты" > "Управление дополнительными возможностями", где теперь появляются компоненты OpenSSH.
Создаем пару ключей с помощью команды в консоле:
ssh-keygen -t rsa -b 2048
Windows сгенерирует пару открытых\закрытых ключей RSA. Открытый ключ будет сохранен как "id_rsa.pub" в указанной вами директории.
Копируем его на сервер в директорию .ssh/ .
Подключаемся к нашему серверу.
Видим успешное соединение.
Теперь у нас есть сервер, к которому можно безопасно подключиться. Можно использовать его как хранилище различной информации. Есть множество программ, которые взаимодействует с ssh соединением базы данных, git-сервера и т.д. Также это помогает, удаленном управлении серверным оборудованием. Когда с одной рабочей станции можно удаленно управлять множеством серверов.
Заключение
SSH-протоколы удобный и безопасный способ удаленного взаимодействия с обслуживаемыми серверами и компьютерами. При соблюдение некоторых правил можно создавать безопасные удаленные подключения не опасаясь, что при этом будут перехвачены данные или перехвачено управление сервером. При этом настройка рабочей сети с его использованием не займет много времени.