В тази публикация ще разработим процедура за спешен достъп до 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, два файла ще бъдат генерирани локално:
- sk-user-ca, манипулатор на ключ, който се отнася до личния ключ, съхранен в ключа за сигурност,
- 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:~$
- Вече можете да създавате сертификати за всеки потребител на хост, който се доверява на вашия сертифициращ орган.
- Можете да премахнете спешния случай. Можете да запазите 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, за да го заобиколите. Ако трябва да изпратите сертификат на колега, най-лесният и сигурен вариант е
Това, което ми харесва в този подход, е хардуерната поддръжка. Можете да поставите ключовете си за сигурност в сейф и те няма да отидат никъде.
Относно правата на рекламата
Епични сървъри -
Източник: www.habr.com