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

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

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

  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 јадра на процесорот, 512 GB RAM, 4000 GB NVMe. Придружи ни се!

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

Извор: www.habr.com

Додадете коментар