
В този пост ще разработим процедура за аварийен достъп до хостове SSH, използвайки хардуерни ключове за сигурност в офлайн режим. Това е само един от подходите и можете да го адаптирате според нуждите си. Ще съхраняваме център за сертификация SSH за нашите хостове на хардуерния ключ за сигурност. Тази схема ще работи практически на всяка версия на OpenSSH, включително SSH с единен вход.
Защо всичко това? Е, това е вариант за краен случай. Това е бекдор, който ще ви позволи да получите достъп до вашия сървър, в случай че поради някаква причина нищо друго не работи.
Защо да използвате сертификати вместо отворени / затворени ключове за аварийен достъп?
- В отличие от отворените ключове, срокът на валидност на сертификатите може да бъде много кратък. Можете да генерирате сертификат, валиден за 1 минута или дори 5 секунди. След изтичането на този срок сертификатът става недействителен за нови връзки. Това е идеално за аварийен достъп.
- Можете да създадете сертификат за всяка акаунт на вашите хостове и при необходимост да изпращате подобни "еднократни" сертификати на колеги.
Какво ще ви е необходимо
- Хардуерни ключове за сигурност, които поддържат резидентни ключове.
Резидентните ключове са криптографски ключове, които се съхраняват изцяло в ключа за сигурност. Понякога те са защитени с буквено-цифров PIN код. Отворената част на резидентния ключ може да бъде експортирана от ключа за сигурност, ако е необходимо — заедно с дескриптора на затворения ключ. Например, 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-9-512-742@smallstep.com, за да не забравя към ключа за сигурност, който се отнася за този сертификатен център.
Освен добавянето на ключа към 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
Тип: ecdsa-sha2-nistp256-cert-v01@openssh.com потребителски сертификат
Публичен ключ: ECDSA-CERT SHA256:EJSfzfQv1UK44/LOKhBbuh5oRMqxXGBSr+UAzA7cork
Подписващ CA: SK-ECDSA SHA256:kLJ7xfTTPQN0G/IF2cq5TB3EitaV4k3XczcBZcLPQ0E
Идентификатор на ключа: "test-key"
Сериен номер: 0
Валиден: от 2020-06-24T16:53:03 до 2020-06-24T17:03:03
Принципали:
ubuntu
Критични опции: (няма)
Разширения:
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:~$- Сега можете да създавате сертификати за всеки потребител на хоста, който доверява на вашия център за сертификация.
- Можете да изтриете emergency. Можете да запазите sk-user-ca, но не е нужно, тъй като той също е на Security ключа. Може би ще искате да изтриете и оригиналния публичен ключ PEM от вашите хостове (например в ~/ .ssh / authorized_keys за потребителя ubuntu), ако сте го използвали за спешен достъп.
Спешен достъп: план за действие
Включете Security ключа и стартирайте командата:
$ 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, за да го пропуснете. Ако трябва да изпратите сертификата на колега, най-простият и безопасен вариант е . За това са необходими само два файла — в нашия случай това са emergency и emergency-cert.pub.
Това, което ми харесва в този подход, е хардуерната поддръжка. Можете да съхранявате Security ключовете в сейф, и те никъде няма да изчезнат.
Реклама
Епични сървъри — това е с мощни AMD процесори, с тактова честота на CPU до 3.4 GHz. Максималната конфигурация позволява решаването на почти всякакви задачи — 128 ядра CPU, 512 GB RAM, 4000 GB NVMe. Присъединете се!
Източник: habr.com
