Глава 15. Настройка в RHEL9 аутентификации на основе ключей SSH

Когда система RHEL9 установлена впервые, по умолчанию она настроена на разрешение доступа через удалённую командную строку через подключения SSH (Secure Shell, безопасной оболочки). SSH предоставляет защищённый паролем и шифруемый доступ к такой системе для учётной записи root и для прочих добавляемых на этапе установки пользователей. Тем не менее, такой уровень безопасности не адекватен современным условиям и подлежит как можно более быстрому обновлению до аутентификации на основе ключей SSH.

Данная глава обозначает необходимые шаги для повышения уровня безопасности системы RHEL9 через реализацию на основе аутентификации SSH.

Обзор Безопасной оболочки (SSH)

SSH спроектирован чтобы предоставлять безопасный удалённый доступ к системам для получения доступа оболочкой и передачи файлов и данных. Как это будет рассмотрено в Главе 16, Доступ к Удалённому Рабочему столу при помощи VNC, SSH также может предоставлять безопасный туннель, через который можно достигать через сетевое подключение удалённый доступ к рабочему месту GNOME.

Базовая конфигурация SSH составлена клиентом (применяемым для установления необходимого соединения компьютером) и сервером (запущенным в той системе, к которой устанавливается данное соединение). К примеру, пользователь может применять запущенным в системе Linux, Windows или macOS клиентом SSH для соединения с исполняемым в системе RHEL9 сервером SSH для получения доступа к приглашению на ввод командной строки или для осуществления передачи файлов. Все взаимодействия между этими клиентом и сервером, причём включая самого пароля, вводимого для получения доступа шифруются для предотвращения перехвата всех данных внешними частями.

Наследуемая слабость в базовой реализации SSH заключается в том, что он целиком полагается на силу того пароля, который назначается его учётной записи в данной системе. Если сторона вредоносного программного обеспечения способна выявить значение пароля для учётной записи (либо при помощи догадок, обмана или простого перебора), такая система превращается в уязвимую. Эта слабость может быть решена реализацией SSH аутентификации на основе SSH.

Аутентификации на основе ключей SSH

Аутентификация на основе ключа SSH пользуется шифрованием асимметричного общедоступного ключа для добавления некого дополнительного уровня безопасности для удалённого доступа к системе. Основная концепция шифрования общедоступным ключом была разработана в 1975 Уитфилдом Диффи и Мартином Хеллманом и базируется на использовании пары из частного и общедоступного ключей.

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

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

Настройка аутентификации на основе ключей

Для установления аутентификации SSH на основе ключа имеются четыре этапа, которые можно суммировать следующим образом:

  1. Выработку общедоступного и частного ключей.

  2. Установка выработанного общедоступного ключа в сервере.

  3. Проверка аутентификации.

  4. Отключение в сервере аутентификации на основании пароля.

Оставшаяся часть данной главы будет обозначать более подробно эти этапы для клиентов операционных систем на основе Linux, macOS и Windows.

Установка и запуск службы SSH

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


# dnf install openssh-server
# systemctl start sshd.service
# systemctl enable sshd.service
		

Аутентификации на основе ключей SSH из клиентов Linux и macOS

Самый первый шаг при настройке аутентификации на основе ключа SSH состоит в выработке необходимой пары ключей в системе клиента. Когда система клиента запущена в Linux или macOS, это достигается при помощи утилиты ssh-keygen:


# ssh-keygen
		

Данная команда в результате приводит к аналогичному приводимому ниже выводу:


Generating public/private rsa key pair.
Enter file in which to save the key (/home/<username>/.ssh/id_rsa):
		

Для принятия под вырабатываемые файлы ключей установленного по умолчанию местоположения нажмите клавишу Enter. Это поместит два файла в подчинённый каталог .ssh в текущем домашнем каталоге пользователя. Соответствующий частный ключ будет сохранён в файле с названием id_rsa, в то время как его общедоступный ключ будет находиться в файле с названием id_rsa.pub.

Затем, ssh-keygen выдаст приглашение на ввод фразы пароля при помощи которой защищается частный ключ. Если предоставляется фраза пароля, вырабатываемый частный ключ будет зашифрован в этом локальном диске и эта фраза пароля будет требоваться для доступа к соответствующей удалённой системе. Таким образом, для лучшей безопасности рекомендуется применять фразу пароля.


Enter passphrase (empty for no passphrase):
		

Наконец, инструмент ssh-keygen выработает следующий вывод, указывающий на производство необходимых ключей:


Your identification has been saved in /home/neil/.ssh/id_rsa.
Your public key has been saved in /home/neil/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:FOLGWEEGFIjWnCT5wtTOv5VK4hdimzWghZizUEMYbfo <username>@<hostname>
The key’s randomart image is:
+---[RSA 2048]----+
|.BB+=+*..        |
|o+B= * . .       |
|===.. + .        |
|*+ * . .         |
|.++ o   S        |
|..E+ * o         |
|  o B *          |
|   + +           |
|    .            |
+----[SHA256]-----+
		

Наш следующий шаг состоит в установке своего общедоступного ключа в свою удалённую систему. Этого можно достичь при помощи утилиты ssh-copy-id следующим образом:


$ ssh-copy-id username@remote_hostname
		

Например:


$ ssh-copy-id neil@192.168.1.100
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/neil/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
neil@192.168.1.100’s password:
 
Number of key(s) added: 1
 
Now try logging into the machine, with: "ssh 'neil@192.168.1.100'"
and check to make sure that only the key(s) you wanted were added.
		

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


$ ssh -l <username> <hostname>
		

Если установленный частный ключ зашифрован и защищён фразой пароля, введите эту фразу когда получите приглашение на ввод для завершения аутентификации и установления удалённого доступа к соответствующей системе RHEL9:


Enter passphrase for key '/home/neil/.ssh/id_rsa':
Last login: Fri Mar 31 14:29:28 2023 from 192.168.86.21
[neil@demosystem02 ~]$
		

Повторите эти шаги для всех учётных записей в том сервере, для которого требуется удалённый доступ. Если доступ также требуется с прочих систем клиентов, скопируйте файл частного ключа id_rsa в подчинённый каталог .ssh вашей домашней папки в прочих системах.

После выполненной в настоящий момент настройки, доступ к соответствующей удалённой системе всё ещё можно достигать с применением менее безопасной аутентификации с паролем. После того как вы убедились что аутентификация на основе ключа работает, в данной системе потребуется отключить аутентификацию на основе пароля. Чтобы разобраться как изменить эту настройку, начнём с открытия файла /etc/ssh/sshd_config и нахождения такой строки:


Include /etc/ssh/sshd_config.d/*.conf
 	   

Она сообщает нам, что настройки конфигурации sshd контролируются файлами в каталоге /etc/ssh/sshd_config.d. Эти имена файлов должны снабжаться номерами и обладать расширением имени файла .conf, например:


01-permitrootlogin.conf
50-redhat.conf
 	   

Значение номера в префиксе выражает значение назначенному этому файлу приоритета относительно прочих файлов в данной папке, причём 01 это наивысший приоритет. Это гарантирует что если файл конфигурации содержит настройки, конфликтующие с другим файлом, всегда получает предпочтение тот, у которого значение приоритета наивысшее.

Внутри папки /etc/ssh/sshd_config.d создайте новый файл с названием 02-nopasswordlogin.conf, с содержимым, которое считывается так:


PasswordAuthentication no
 	   

Сохраните этот файл и перезапустите службу sshd для введения в работу данного изменения:


# systemctl restart sshd.service
		

Начиная с этого момента данная система будет доступна для удалённого доступа только с применением аутентификации на основе ключа SSH и при её осуществлении вам не требуется вводить пароль.

Управление множеством ключей

Широко распространено нахождение в системе клиента множества частных ключей, причём каждый из них предоставляет доступ к своему серверу. В результате, для выбора конкретного ключа при установлении соединения имеются различные варианты. Например, можно определить тот файл частного ключа, который надлежит применять при запуске соответствующего ключа клиента ssh следующим образом:


$ ssh -l neilsmyth -i ~/.ssh/id_work 35.194.18.119
		

В качестве альтернативы, файл конфигурации пользователя клиента SSH может ассоциировать с серверами файлы ключей. Такой файл конфигурации носит название config и должен располагаться в каталоге .ssh домашнего каталога этого пользователя и может применяться для настройки широкого диапазона вариантов, включая имена файлов частных ключей, значения порта по умолчанию при соединении, имени пользователя по умолчанию и краткого псевдонима, через который выполняется ссылка на этот сервер. Следующий образец файла config определяет различные файлы ключей для двух серверов и позволяет ссылаться на них через псевдонимы home и work. В случае системы work, данный файл также определяет имя пользователя, применяемое при аутентификации:


Host work
  HostName 35.194.18.119
  IdentityFile ~/.ssh/id_work
  User neilsmyth
 
Host home
  HostName 192.168.0.21
  IdentityFile ~/.ssh/id_home
 	   

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


$ ssh -l neilsmyth -i ~/.ssh/id_work 35.194.18.119
		

Теперь же эту команду можно сокращать так:


$ ssh work
		

Полный перечень вариантов файл конфигурации можно найти исполнив следующую команду:


$ man ssh_config
		

Аутентификации на основе ключей SSH из клиента Windows

Последние выпуски Windows содержат подмножество реализации OpenSSH, применяемого большинством систем Linux и macOS как часть Windows PowerShell. Это делает возможной настройку в клиенте Windows аутентификации на основе ключа SSH с применением тех же самых шагов, которые обозначены ранее для Linux и macOS.

В Windows выполните поиск Windows PowerShell и выберите его в полученных результатах. После запуска появится окно PowerShell, как это показано на Рисунке 15.1:

 

Рисунок 15-1


 

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


$ ssh -l <username>@<hostname>
		

Например:


PS C:\Users\neil> ssh -l neil 192.168.1.101
Enter passphrase for key 'C:\Users\neil\.ssh\id_rsa':
		

Введите фразу пароля при получении приглашения на ввод и завершите этот процесс аутентификации.

Если такой частный ключ ещё на существует, выработайте новую пару частного ключа и общедоступного ключа с применением окна PowerShell про помощи утилиты ssh-keygen применяя те же самые шаги, которые обозначены для Linux и macOS. После выработки этих ключей они снова находятся в каталоге .ssh домашней папки текущего пользователя, а его файл общедоступного ключа id_rsa.pub потребуется установить в соответствующей системе RHEL9. К сожалению, Windows PowerShell не содержит утилиту ssh-copy-id, а потому данная задача должна решаться вручную.

Внутри окна PowerShell измените каталог на подчинённый каталог .ssh и отобразите содержимое файла общедоступного ключа id_rsa.pub:


PS C:\Users\neil> cd .ssh
PS C:\Users\neil\.ssh> type id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDFgx1vzu59lll6/uQw7FbmKVsQ3fzLz9MW1fgo4sdsxXp81wCHNAlqcjx1Pgr9BJPXWUMInQOi7BQ5I+vc2xQ2AS0kMq3ZH9ybWuQe/U2GjueXZd0FKrEXrT55wM36Rm6Ii3roUCoGCzGR8mn95JvRB3VtCyDdzTWSi8JBpK5gV5oOxNTNPsewlLzouBlCT1qW3CKwEiIwu8S9MTL7m3nrcaNeLewTTHevvHw4QDwzFQ+B0PDg96fzsYoTXVhzyHSWyo6H0gqrft7aK+gILBtEIhWTkSVEMAzy1piKtCr1IYTmVK6engv0aoGtMUq6FnOeGp5FjvKkF4aQkh1QR28r neil@DESKTOP-S8P8D3N
		

Выделите содержимое этого файла и скопируйте его при помощи комбинации клавиатуры Ctrl-C.

Оставаясь внутри окна PowerShell, зарегистрируйтесь в необходимой удалённой системе при помощи аутентификации с паролем:


PS C:\Users\neil\.ssh> ssh -l <username> <hostname>
		

После выполнения подписи проверьте имеется ли подчинённый каталог .ssh, если нет, создайте его так:


$ mkdir .ssh
		

Измените каталог на .ssh и убедитесь что файл с названием authorized_keys уже имеется. Если это не так, создайте его и вставьте содержимое значения файла общедоступного ключа из вашей системы Windows в него.

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


ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCzRWH27Xs8ZA5rIbZXKgxFY5XXauMv+6F5PljBLJ6j+9nkmykVe3GjZTp3oD+KMRbT2kTEPbDpFD67DNL0eiX2ZuEEiYsxZfGCRCPBGYmQttFRHEAFnlS1Jx/G4W5UNKvhAXWyMwDEKiWvqTVy6syB2Ritoak+D/Sc8nJflQ6dtw0jBs+S7Aim8TPfgpi4p5XJGruXNRScamk68NgnPfTL3vT726EuABCk6C934KARd+/AXa8/5rNOh4ETPstjBRfFJ0tpmsWWhhNEnwJRqS2LD0ug7E3yFI2qsNKGEzvAYUC8Up45MRP7liR3aMlCBil1tsy9R+IB7oMEycZAe/qj neil@localhost.localdomain
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDFgx1vzu59lll6/uQw7FbmKVsQ3fzLz9MW1fgo4sdsxXp81wCHNAlqcjx1Pgr9BJPXWUMInQOi7BQ5I+vc2xQ2AS0kMq3ZH9ybWuQe/U2GjueXZd0FKrEXrT55wM36Rm6Ii3roUCoGCzGR8mn95JvRB3VtCyDdzTWSi8JBpK5gV5oOxNTNPsewlLzouBlCT1qW3CKwEiIwu8S9MTL7m3nrcaNeLewTTHevvHw4QDwzFQ+B0PDg96fzsYoTXVhzyHSWyo6H0gqrft7aK+gILBtEIhWTkSVEMAzy1piKtCr1IYTmVK6engv0aoGtMUq6FnOeGp5FjvKkF4aQkh1QR28r neil@DESKTOP-S8P8D3N
		

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


PS C:\Users\neil\.ssh> ssh -l neil 192.168.1.100
Enter passphrase for key 'C:\Users\neil\.ssh\id_rsa':
		

После настройки и проверки аутентификации на основании ключа для всех необходимых учётных записей, отключите в системе RHEL9 аутентификацию по паролю как это было отражено в предыдущем разделе.

Аутентификации на основе ключей SSH с применением PuTTY

Для систем Windows, которые не обладают доступным OpenSSH или в качестве более гибкой альтернативы использованию PowerShell, широко применяемым вариантом выступает средство PuTTY. Самый первый шаг в применении PuTTY состоит в выгрузке и установке его в любой системе Windows, которой требуется клиент SSH. PuTTY это бесплатная утилита и её можно выгрузить со следующей ссылки.

Выгрузите исполняемую программу установки в Windows, которая соответствует вашей системе Windows (доступны версии с 32 и 64 битами), затем выполните эту программу установки для её завершения.

Когда частный ключ уже существует в другой системе, создайте папку .ssh в домашней папке текущего пользователя и скопируйте в неё частный ключ id_rsa.

Затем, этот частный ключ необходимо преобразовать в файл формата частного ключа PuTTY при помощи инструмента генерации PuTTY. Отыщите эту утилиту набрав в полосе поиска меню Start Windows "PuTTY Key Generator" и запустите её:

 

Рисунок 15-2


 

После запуска кликните по кнопке Load, расположенной в разделе Action и перейдите к своему файлу частного ключа ранее скопированный в вашу папку .ssh (обращаем внимание на то, что вам может потребоваться изменить фильтр типа файлов на All Files - *.* - для того чтобы этот файл ключа был отображаемым). После его обнаружения, выберите этот файл и загрузите его в PuttyGen. Когда получите приглашение на ввод, введите первоначально применявшуюся для шифрования этого файла фразу пароля. После импорта этого частного ключа сохраните его в качестве файла ключа PuTTY кликнув по кнопке Save Private Key. Для согласованности, сохраните этот файл ключа в той же папке .ssh, но снабдите его другим названием файла чтобы отличать его от файла первоначального ключа.

Запустите PuTTY из меню Start и введите значение IP адреса или имя хоста необходимого удалённого сервера на его главном экране прежде чем выберете категорию Connection -> SSH -> Auth -> Credentials в панели с левой стороны, как это выделено на Рисунке 15-3:

 

Рисунок 15-3


 

Кликните по кнопке Browse, следующей за полем Private key for authentication и отыщите и выберите сохранённый ранее файл частного ключа PuTTY. Затем, в качестве опции, отмотайте вверх в панели слева, выберите запись Session и введите название для сеанса в соответствующем поле Saved Sessions прежде чем кликните по кнопке Save. Это сохранит конфигурацию данного сеанса для последующего применения без повторного ввода настроек каждый раз.

Наконец, кликните по кнопке Open для установления необходимого соединения к удалённому серверу, введите значение имени пользователя и фразу пароля после выдачи приглашения на ввод для выполнения этого для завершения аутентификации.

Генерация Частного ключа при помощи PuTTYgen

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

Для создания новых ключей запустите PuTTYgen и кликните по кнопке Generate, выделенной на Рисунке 15-4:

 

Рисунок 15-4


 

Переместите свой указатель мыши для выработки данных случайным образом согласно инструкции, затем введите необязательную фразу пароля для шифрования получаемого частного ключа. После выработки необходимых ключей сохраните их файлы в удобные местоположения при помощи кнопок Save public key и Save private key. Как было обозначено в предыдущем разделе, такой частный ключ может применяться в PuTTY. Для установки этого частного ключа в необходимом удалённом сервере воспользуйтесь теми шагами, которые обсуждались ранее в разделе SSH внутри PowerShell в Windows.

Заключение

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

Данная глава предоставила обзор аутентификации на основе ключа SSH и обозначила те шаги, которые вовлечены в генерацию ключей и настройку клиентов в macOS, Linux и Windows, а также установку и управление общедоступными ключами в сервере RHEL9.