Во овој пост, ќе развиеме процедура за итен пристап до 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, локално ќе се генерираат две датотеки:
- 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