Предписваме процедура за авариен достъп до SSH хостове с хардуерни ключове

Предписваме процедура за авариен достъп до SSH хостове с хардуерни ключове

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

За какво е всичко това? Е, това е краен вариант. Това е задна врата, която ще ви позволи да получите достъп до вашия сървър, когато по някаква причина нищо друго не работи.

Защо да използвате сертификати вместо публични/частни ключове за спешен достъп?

  • За разлика от публичните ключове, сертификатите могат да имат много кратък живот. Можете да генерирате сертификат, който е валиден за 1 минута или дори 5 секунди. След този период сертификатът ще стане неизползваем за нови връзки. Това е идеално за авариен достъп.
  • Можете да създадете сертификат за всеки акаунт на вашите хостове и, ако е необходимо, да изпратите такива „еднократни“ сертификати на колеги.

Какво ви трябва

  • Хардуерни ключове за сигурност, които поддържат резидентни ключове.
    Резидентните ключове са криптографски ключове, които се съхраняват изцяло в ключа за защита. Понякога те са защитени с буквено-цифров ПИН. Публичната част на резидентния ключ може да бъде експортирана от ключа за сигурност, по желание заедно с манипулатора на частния ключ. Например USB ключовете от серията Yubikey 5 поддържат резидентни ключове.Препоръчително е те да са предназначени само за авариен достъп до хоста. За тази публикация ще използвам само един ключ, но трябва да имате допълнителен за резервно копие.
  • Безопасно място за съхранение на тези ключове.
  • OpenSSH версия 8.2 или по-нова на вашия локален компютър и на сървърите, до които искате да имате авариен достъп. Ubuntu 20.04 се доставя с OpenSSH 8.2.
  • (по избор, но препоръчително) CLI инструмент за проверка на сертификати.

Обучение

Първо, трябва да създадете сертифициращ орган, който ще се намира на хардуерния защитен ключ. Поставете ключа и стартирайте:

$ ssh-keygen -t ecdsa-sk -f sk-user-ca -O resident -C [security key ID]

Като коментар (-C) посочих [имейл защитен]така че да не забравите към кой защитен ключ принадлежи този сертифициращ орган.

В допълнение към добавянето на ключа към Yubikey, два файла ще бъдат генерирани локално:

  1. sk-user-ca, манипулатор на ключ, който се отнася до личния ключ, съхранен в ключа за сигурност,
  2. sk-user-ca.pub, който ще бъде публичният ключ за вашия сертифициращ орган.

Но не се притеснявайте, Yubikey съхранява друг частен ключ, който не може да бъде извлечен. Следователно тук всичко е надеждно.

На хостове, като root, добавете (ако още не сте го направили) следното към вашата SSHD конфигурация (/etc/ssh/sshd_config):

TrustedUserCAKeys /etc/ssh/ca.pub

След това на хоста добавете публичния ключ (sk-user-ca.pub) към /etc/ssh/ca.pub

Рестартирайте демона:

# /etc/init.d/ssh 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: [email protected] 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

Тук публичният ключ е аварийният ключ, който създадохме, а sk-user-ca е свързан със сертифициращия орган.

Най-накрая сме готови да изпълним SSH командата:


$ ssh -i emergency ubuntu@my-hostname
ubuntu@my-hostname:~$

  1. Вече можете да създавате сертификати за всеки потребител на хост, който се доверява на вашия сертифициращ орган.
  2. Можете да премахнете спешния случай. Можете да запазите sk-user-ca, но не е необходимо, тъй като той също е на ключа за сигурност. Може също така да искате да премахнете оригиналния PEM публичен ключ от вашите хостове (например в ~/.ssh/authorized_keys за потребителя на ubuntu), ако сте го използвали за авариен достъп.

Авариен достъп: План за действие

Поставете ключа за сигурност и изпълнете командата:

$ 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, за да го заобиколите. Ако трябва да изпратите сертификат на колега, най-лесният и сигурен вариант е Вълшебна червеева дупка. За да направите това, имате нужда само от два файла - в нашия случай, аварийно и аварийно-cert.pub.

Това, което ми харесва в този подход, е хардуерната поддръжка. Можете да поставите ключовете си за сигурност в сейф и те няма да отидат никъде.

Относно правата на рекламата

Епични сървъри - евтин VPS с мощни процесори от AMD, честота на процесорното ядро ​​до 3.4 GHz. Максималната конфигурация ви позволява да решите почти всеки проблем - 128 CPU ядра, 512 GB RAM, 4000 GB NVMe. Присъедини се към нас!

Предписваме процедура за авариен достъп до SSH хостове с хардуерни ключове

Източник: www.habr.com

Добавяне на нов коментар