Настройка сервера OpenSSH #

Васильев Андрей Михайлович, 2024

Версии презентации

Технология SSH #

SSH (Secure Shell, «безопасная оболочка») — это протокол удалённого управления компьютера с ОС семейства Linux

  • SSH поддерживает множество актуальных алгоритмов шифрования
  • SSH-клиенты и SSH-серверы доступны для большинства сетевых ОС
  • SSH позволяет безопасно передавать в незащищённой среде практически любой другой сетевой протокол
  • SSH может использовать сжатие передаваемых данных перед отправкой

Установка SSH-сервера #

Существует несколько реализаций SSH-сервера, рассмотрим наиболее популярное и проверенное решение — сервер OpenSSH

В операционных системах Альт данный сервер поставляется в пакете openssh-server

После установки данного пакета службу сервера неолбходимо запустить:

systemctl enable --now sshd

Обратите внимание, что служба называется не также как и пакет

Подключение к SSH-серверу #

Клиентские приложения поставляются в пакете openssh-clients

Для выполнения подключения к удалённому серверу с целью получения интерактивного доступа следует воспользоваться приложением ssh

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

ssh host

где host — это IP-адрес или доменное имя сервера, к которому выполняется подключение

По умолчанию предполагается, что имя пользователя на удалённом сервере совпадает с именем текущего пользователя

Для явного указания удалённого имени используйте форму

ssh user@host

Возможности клиента #

Приложение ssh поддерживает множество разных функций, которые доступны через множество аргументов, рассмотрим некоторые из них

ssh [-p port] destination [command [argument ...]]

Указание порта сервера #

По умолчанию сервер ожидает подключения по порту 22, но в некоторых ситуациях он может быть запущен (или доступен) по другому порту

ssh -p 2022 user@localhost

Интерактивный запуск команд #

Если не указать команду для запуска на удалённом сервере, то на сервере будет запущен, если доступен, интерактивный интерпретатор команд

Когда он завершит свою работу (по вводу команды exit, например), будет завершено и ssh-соединение

Аутентификация пользователей #

OpenSSH-сервер поддерживает множество вариантов по выполнению аутентификации:

  • Аутентификация с помощью Kerberos
  • Аутентификация по ключу хоста, расположенном на клиенте
  • Аутентификация по нескольким текстовым факторам
  • Аутентификация по паролю
  • Аутентификация по ключу пользователя

Рассмотрим наиболее часто применяемые: по паролю и по ключу пользователя

Аутентификация по паролю #

diagram

  • Пароль надо вводить при каждом подключении
  • Проверка пароля делигирована стандартной подсистеме аутентификации, Pluggable Authentication Modules
  • Возможности пользователя могут отличаться от тех, что доступны при локальном входе

Аутентификация по ключу #

diagram

  • Обычно используются ключи по умолчанию, расположенные в каталоге ~/.ssh
  • Пользователь при подключении может указать путь к любому ключу
  • Ключ может быть защищён паролём, при его считывании будет запрошен пароль у пользователя

Создание ssh-ключей #

В протоколе SSH используется ассиметричное шифрование, для которого применяется пара из:

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

Для создания ключей использутеся приложение ssh-keygen:

ssh-keygen -t ed25519

Далее будут заданы вопросы о местоположении и пароля

  • По умолчанию пара ключей создаются в каталоге ~/.ssh
  • Пароль не является необходимостью, но его использование повышает безопасность

В результате работы команды будут созданы файлы:

  • id_ed25519 — секретный ключ, который нельзя никому передавать
  • id_ed25519.pub — публичный ключ, который передаётся на сервер

Передача ключа на сервер #

На сервере необходимо установить публичную часть ключа, чтобы выполнить аутентификацию пользователя

Это делается путём копирования содержимого публичного ключа в список авторизованных ключей. Обычно этот файл находится по пути ~/.ssh/authorized_keys

Файл можно передать путём копирования файла, использования текстового редактора и буфера обмена или с помощю приложения ssh-copy-id:

ssh-copy-id -i ~/.ssh/id_ed25519.pub user@192.168.122.9

Необходимо будет пройти настроенную аутентификацию (по паролю или другому ключу)

SSH-Агент #

Ключи, защищённые паролём, безопаснее беспарольных альтернатив, но требуют постоянного ввода пароля

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

Для загрузки ключа в агент используется приложение ssh-add:

ssh-add [file ...]
  • Можно передать список приватных файлов, которые необходимо открыть
  • Если не передать список, то в агент будут добавлены все ключи из ~/.ssh

Конфигурационный файл пользователя #

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

Рассмотрим пример файла ~/.ssh/config:

Host playground
     HostName 127.0.0.1
     Port 2022
     User user
     IdentityFile ~/.ssh/playground-key

Тогда для подключения к данному серверу достаточно будет выполнить:

ssh playground

Вместо:

ssh -i ~/.ssh/playground-key -p 2022 user@127.0.0.1

Настройка сервера OpenSSH #

Конфигурация сервера OpenSSH в ОС семейства Альт находится по пути /etc/openssh/sshd_config, а его описание находится в 5-м разделе руководства

Процесс редактирования сервера sshd надо выполнять аккуратно, т.к. некорректная конфигурация потребует наличия альтернативного способа подключения к серверу, что зачастую затруднено или дорого

Процесс редактирования:

  1. Сделайте резервную копию файла конфигурации
  2. Отредактируйте текущий файл конфигурации
  3. Проверьте техническую корректность файла sshd -t
  4. Проверьте логическую корректность файла
  5. С помощью systemctl reload sshd перезагрузите конфигурационный файл

Ряд параметров сервера #

PermitRootLogin no

Запрещает аутентификацию пользователя root, рекомендуемая настройка

AllowUsers student

Разрешает доступ только пользователю student, все другие пользователи не смогут подключиться.

AllowGroups wheel ssh

Разрешает доступ только пользователей, входящих в одну из групп wheel или ssh

Использование инструмента control #

Альт предоставляет инструмент control с помощью которого можно выполнять настройку политик безопасности: разрешать или запрещать выполнять различные операции

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

  • sshd-password-auth — разрешить или запретить аутентификацию по паролю
  • sshd-allow-groups — включить список групп, которым разрешён доступ

Например для отключения аутентификации по паролю:

  1. Нужно настроить политику: control sshd-password-auth disabled
  2. Перезагрузить службу: systemctl restart sshd