- PVSM.RU - https://www.pvsm.ru -
В этом посте мы разработаем процедуру для экстренного доступа к хостам SSH, используя аппаратные ключи безопасности в автономном режиме. Это всего лишь один из подходов, и вы можете адаптировать его под себя. Мы будем хранить центр сертификации SSH для наших хостов на аппаратном ключе безопасности. Эта схема будет работать практически на любом OpenSSH, включая SSH с единым входом.
Зачем всё это? Ну, это вариант на крайний случай. Это бэкдор, который позволит вам получить доступ к своему серверу в том случае, когда по какой-то причине больше ничего не помогает.
Зачем использовать сертификаты вместо открытых / закрытых ключей для экстренного доступа?
Для начала нужно создать центр сертификации, который будет находиться на аппаратном ключе безопасности. Вставьте ключ и запустите:
$ ssh-keygen -t ecdsa-sk -f sk-user-ca -O resident -C [security key ID]
В качестве комментария (-C) я указал yubikey-9-512-742@smallstep.com, чтобы не забыть, к какому ключу безопасности относится этот центр сертификации.
Кроме добавления ключа к Yubikey, локально будет сгенерировано два файла:
Но не волнуйтесь, на Yubikey хранится ещё один закрытый ключ, который невозможно извлечь. Поэтому тут всё надёжно.
На хостах от имени пользователя root добавьте (если ещё не добавили) в конфигурацию вашего SSHD (/etc/ssh/sshd_config) следующее:
TrustedUserCAKeys /etc/ssh/ca.pub
Затем на хосте добавьте открытый ключ (sk-user-ca.pub) в /etc/ssh/ca.pub
Перезагрузите сервер:
systemctl sshd restart
Теперь мы можем попробовать получить доступ к хосту. Но сначала нам понадобится сертификат. Создайте пару ключей, которая будет связана с сертификатом:
$ ssh-keygen -t ecdsa -f emergency
Сертификаты и SSH-пары
Иногда так и тянет использовать сертификат как замену пары открытый / закрытый ключ. Но для аутентификации пользователя одного сертификата недостаточно. Каждый сертификат также имеет закрытый ключ, связанный с ним. Вот почему нам нужно сгенерировать эту пару «экстренных» ключей, прежде чем мы выдадим себе сертификат. Важно то, что подписанный сертификат мы показываем серверу, с указанием пары ключей, для которых у нас есть закрытый ключ.Таким образом, обмен открытыми ключами всё ещё жив-здоров. Это прокатывает даже с сертификатами. Сертификаты просто избавляют сервер от необходимости хранить открытые ключи.
Далее создайте сам сертификат. Мне нужна авторизация пользователя ubuntu в 10-минутном интервале. Вы можете сделать по-своему.
$ ssh-keygen -s sk-user-ca -I test-key -n ubuntu -V -5m:+5m emergency
Вам будет предложено подписать сертификат с помощью отпечатка пальцев. Вы можете добавить дополнительные имена пользователей, разделенные запятыми, например, -n ubuntu,carl,ec2-user
Всё, теперь вас есть сертификат! Далее нужно указать правильные разрешения:
$ chmod 600 emergency-cert.pub
После этого вы можете ознакомится с содержимым вашего сертификата:
$ step ssh inspect emergency-cert.pub
Вот как выглядит мой:
emergency-cert.pub
Type: ecdsa-sha2-nistp256-cert-v01@openssh.com user certificate
Public key: ECDSA-CERT SHA256:EJSfzfQv1UK44/LOKhBbuh5oRMqxXGBSr+UAzA7cork
Signing CA: SK-ECDSA SHA256:kLJ7xfTTPQN0G/IF2cq5TB3EitaV4k3XczcBZcLPQ0E
Key ID: "test-key"
Serial: 0
Valid: from 2020-06-24T16:53:03 to 2020-06-24T17:03:03
Principals:
ubuntu
Critical Options: (none)
Extensions:
permit-X11-forwarding
permit-agent-forwarding
permit-port-forwarding
permit-pty
permit-user-rc
Здесь открытый ключ — это созданный нами ключ emergency, а с центром сертификации связан sk-user-ca.
Наконец-то мы готовы запустить команду SSH:
$ ssh -i emergency ubuntu@my-hostname
ubuntu@my-hostname:~$
Вставьте ключ безопасности и запустите команду:
$ ssh-add -K
Таким образом вы добавите открытый ключ центра сертификации и дескриптор ключа в SSH-агент.
Теперь экспортируйте открытый ключ, чтобы сделать сертификат:
$ ssh-add -L | tail -1 > sk-user-ca.pub
Создайте сертификат со сроком годности, например, не более часа:
$ ssh-keygen -t ecdsa -f emergency
$ ssh-keygen -Us sk-user-ca.pub -I test-key -n [username] -V -5m:+60m emergency
$ chmod 600 emergency-cert.pub
И теперь вновь SSH:
$ ssh -i emergency username@host
Если ваш файл .ssh/config вызывает какие-то проблемы при подключении, вы можете запустить ssh с параметром -F none, чтобы обойтись без него. Если вам нужно отправить сертификат коллеге, самый простой и безопасный вариант — это Magic Wormhole [1]. Для этого понадобится всего два файла — в нашем случае это emergency и emergency-cert.pub.
Что мне нравится в этом подходе, так это аппаратная поддержка. Вы можете поместить ключи безопасности в сейф, и они никуда не денутся.
Эпичные серверы — это дешёвые VPS [2] с мощными процессорами от AMD, частота ядра CPU до 3.4 GHz. Максимальная конфигурация позволяет решить практически любые задачи — 128 ядер CPU, 512 ГБ RAM, 4000 ГБ NVMe. Присоединяйтесь!
Автор: Mikhail
Источник [3]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/ssh/354893
Ссылки в тексте:
[1] Magic Wormhole: https://github.com/warner/magic-wormhole
[2] дешёвые VPS: https://vdsina.ru/cloud-servers?partner=habr34
[3] Источник: https://habr.com/ru/post/510546/?utm_source=habrahabr&utm_medium=rss&utm_campaign=510546
Нажмите здесь для печати.