Статья также доступна на украинском (перейти к просмотру).
Оглавление
- Вопросы безопасной аутентификации на сервере
- Практическое использование файла know_hosts
- Демонстрация работы с know_hosts
- Использование утилиты ssh-keyscan
- Использование утилиты ssh-keygen
- Проблемы при работе с know_hosts
- Управление реакцией системы и процессом верификации хостов
Вопросы безопасной работы в сети, в частности, усовершенствования защиты при аутентификации на сервере Linux актуальны. Использование файла know_hosts для фиксации параметров безопасности удаленных серверов для их дальнейшей идентификации является одним из следующих путей. Рассмотрим основные характеристики файла, правила использования и продемонстрируем работу с ним на конкретных примерах.
Вопросы безопасной аутентификации на сервере
В настоящее время соединение и работа с удаленным сервером в основном происходят с использованием шифрованных соединений и каналов, которые снабжаются известным протоколом SSH (Secure Shell), в частности, его OpenSSH реализацией. Этот протокол является заменой устаревших аналогов типа RSH, FTP, Telnet и других, в которых не используются методы шифрования при соединении и передаче данных и поэтому они опасны для использования. SSH устраняет проблему с безопасностью типа «человек посередине», когда злоумышленник, может иметь доступ к промежуточной сети, может перехватить ваши данные и вместо них «подсунуть» свои – зараженные вирусом. Вообще же, вариантов манипуляций с данными здесь может быть множество, если вы работаете через посредство незащищенного протокола.
Безопасность канала SSH обеспечивается не только непосредственно методами или алгоритмами шифрования данных, но и различными подходами, связанными с использованием ключей. Одним из таких подходов является верификация удаленных хостов, к которым вы подключаетесь.
Сама идея такой верификации не нова, поскольку уже давно используется верификация веб-узлов в защищенном варианте протокола HTTP, то есть у HTTPS с методами шифрования типа SSL или TLS. Это позволяет избежать многих проблем при работе в веб-пространстве. Фактически, SSH использует тот же принцип верификации хостов, что и в указанном выше протоколе, только с некоторыми отличиями. В частности, в процессе верификации здесь отсутствует третья доверенная Certificate Authority сторона, такая как Thawte или Verisign в случае HTTPS, подтверждающая подлинность и подписавшая открытый ключ. Вместо нее такой стороной выступает сам пользователь, который может проверить открытый ключ удаленного сервера и удостоверить его идентичность. Достаточно сделать это только раз, поскольку SSH в автоматическом режиме сохранит открытый ключ удаленного хоста во время первого сеанса соединения, причем не только в пользовательском файле $HOME/.ssh/know_hosts, но и в системном файле /etc/ssh/known_hosts, что обеспечит в дальнейшем автоматическое подключение к удаленному хосту без каких-либо запросов к пользователю. Только в этом случае канал будет защищен на всех уровнях.
Практическое использование файла know_hosts
Для полноценной работы с know_hosts необходимо обеспечить наличие обновленной версии протокола SSH на вашей станции. Для этого запустим из терминала группу команд.
$ apt update
$ apt list --upgradable
$ apt install ssh $ apt install openssh-server
Демонстрация работы с know_hosts
Просмотрим содержимое файла know_hosts с помощью соответствующей команды:
$ cat ~/.ssh/known_hosts
Теперь попробуем установить соединение с одним из удаленных хостов и после завершения сеанса снова проверим содержимое указанного файла. Введем в терминале:
$ ssh ukrobyava.com.ua
Выходом команды будет сообщение о том, что аутентификация не может быть установлена для указанного адреса удаленного хоста, выведен отпечаток открытого ключа и предложено выбрать один из вариантов: продолжить соединение, отказаться или ввести соответствующий отпечаток ключа. Выбираем первый вариант и подтверждаем выбор. В результате, как показано ниже, появляется сообщение о том, что запись для хоста ukrobyava.com.ua в формате ECDSA будет добавлена в список файла know_hosts и соединение закрывается. Очевидно, автоматическая верификация хоста именно поэтому и не произошла, что отсутствовала соответствующая запись в файле know_hosts. Ниже мы проверим этот тезис.
Теперь снова проверим содержимое файла know_hosts, чтобы убедиться, что новая запись появилась. Введем команду:
$ cat ~/.ssh/known_hosts
Из изображения видно, что новая запись действительно появилась (последняя в списке). В нем можно увидеть открытый ключ удаленного хоста, начинающийся с символа «А», а заканчивающийся знаком уравнения «=». После этого попытаемся снова подключиться к тому же хосту. Введем в терминале:
$ ssh ukrobyava.com.ua
В результате нам будет предложено ввести пароль доступа для SSH соединения с удаленным хостом. Это означает, что верификация указанного хоста теперь будет происходить автоматически. Это стало возможным именно благодаря записи в файле know_hosts, то есть наш тезис подтвердился. Конечно, после ввода существующего пароля соединение будет установлено.
Использование утилиты ssh-keyscan
Для формирования списков открытых ключей удаленных машин для know_hosts используется утилита ssh-keyscan с соответствующими параметрами. Воспользуемся ею для добавления записи для определенного хоста:
$ ssh-keyscan -t rsa kievobyava.kiev.ua >> ~/.ssh/known_hosts
Как видим, выход команды содержит информацию о версии протокола SSH и операционной системе (ОС) хоста, то есть команда сработала. Проверим содержимое know_hosts:
$ cat ~/.ssh/known_hosts
Из содержимого файла видно, что запись о хосте «kievobyava.kiev.ua» с rsa кодированием добавлена, то есть команда работает.
Использование утилиты ssh-keygen
Для управления, генерирования и конвертации ключей проверки подлинности машин можно воспользоваться возможностями утилиты ssh-keygen, которая имеет большой набор соответствующих параметров. Указанная утилита способна обеспечить формирование ключей, как для ssh(1), так и для более современной версии протокола – ssh(2). Если утилита используется без параметров, формируется ключ типа RSA.
К примеру, воспользуемся утилитой для поиска и получения оттиска ключа хоста kievobyava.kiev.ua:
$ ssh-keygen -F kievobyava.kiev.ua
Мы видим, что утилита успешно выполнила задачу и нашла нужную информацию в файле know_hosts.
Для перегруженных систем иногда бывает очень важно не только оперативно найти, но и удалить запись о том или ином хосте. Это можно сделать с помощью параметра R указанной утилиты. Например, удачным запись об одном из добавленных нами хостов.
Введем в терминале:
ssh-keygen -R ukrobyava.com.ua
С выхода команды видим, что запись была удалена и помещена в файл .ssh/know_hosts.old на случай необходимости его обновления.
На всякий случай проверим содержимое know_hosts, чтобы убедиться, что это действительно так.
Введем:
$ cat ~/.ssh/known_hosts
Да, действительно, запись о хосте «ukrobyava.com.ua» была удалена.
Проблемы при работе с know_hosts
Наиболее распространенная проблема использования файла заключается в том, что не всегда ключ, предоставляющий удаленный сервер, совпадает с ключом, который уже записан в файле для этого сервера. Чаще это связано с обновлением оборудования или изменением настроек на сервере. При этом может быть выдано сообщение, типа «REMOTE HOST IDENTIFICATION HAS CHANGED!». В этом случае можно попытаться удалить из файла запись для этого сервера и добавить его снова. Вероятнее всего, проблема исчезнет, ??поскольку информация о ключах обновится и станет актуальной.
Возможна также ситуация, когда при попытке подключения к несуществующему хосту вы увидите сообщение типа «POSSIBLE DNS SPOOFING DETECTED!». Должны соответствующим образом реагировать. Желательно проверить запись о хосте на соответствие реалиям, в частности, поле IP-адреса.
Управление реакцией системы и процессом верификации хостов
Вообще же возможности SSH позволяют управлять реакцией системы в случае несоответствия ключа. Для этого существует параметр StrictHostKeyChecking, находящийся в файле конфигурации ssh_config. Он может принимать три значения: no, ask и yes.
В первом варианте (no) соединение устанавливается в любом случае без запроса к пользователю. При этом ключ автоматически добавляется в список хостов.
Во втором варианте (ask) если отсутствует ключ удаленного хоста, то в терминале будет выведен его отпечаток и предложено подтвердить. Если будет установлено соединение, но ключи не совпадут, то вход в систему будет приостановлен и выдано сообщение REMOTE HOST IDENTIFICATION HAS CHANGED!, о чем мы уже говорили выше. Это значение параметра установлено по умолчанию.
Третий вариант (yes) самый безопасный, поскольку вы вообще не сможете войти в систему, если в списке хостов сервер отсутствует. Однако, если ключ найден, но он не совпадает, то получите то же сообщение, что и для второго варианта.
Лучше всего управлять процессом верификации удаленных хостов с помощью системного файла /etc/ssh/known_hosts, что позволит установить одинаковый и достоверный список хостов для всех без исключения пользователей системы и быстро обновлять файл в случае изменения конфигурации системы. Следует также убедиться, что вы получили все типы ключей: rsa, dsa, rsa1 и другие.
Предлагаем Вам воспользоваться нашими услугами по аренде серверного оборудования. Предоставление настройки сервера в течение 24 часов, бесперебойное питание, качественный интернет, поддержка 24/7.
Подписывайтесь на наш телеграмм-канал https://t.me/freehostua, чтобы быть в курсе новых полезных материалов. Смотрите наш канал Youtube на https://www.youtube.com/freehostua.
Мы в чем ошиблись, или что-то упустили?
Напишите Об этом в комментариях, мы с удовольствием ответим и обсуждим Ваши замечания и предложения.
Дата: 05.11.2022 Автор: Евгений
|
|
Авторам статьи важно Ваше мнение. Будем рады его обсудить с Вами:
comments powered by Disqus