Ebben a bejegyzésben egy eljárást dolgozunk ki az SSH-állomásokhoz való vészhelyzeti hozzáféréshez hardveres biztonsági kulcsok offline használatával. Ez csak egy megközelítés, és saját igényeihez igazíthatja. A hardver biztonsági kulcsán tároljuk a gazdagépeink SSH-tanúsítványkibocsátóját. Ez a séma szinte minden OpenSSH-n működik, beleértve az egyszeri bejelentkezéses SSH-t is.
Mire való ez az egész? Nos, ez az utolsó lehetőség. Ez egy hátsó ajtó, amely lehetővé teszi, hogy hozzáférjen a szerveréhez, amikor valamilyen oknál fogva semmi más nem működik.
Miért használjunk tanúsítványokat nyilvános/magán kulcsok helyett vészhelyzeti hozzáféréshez?
- A nyilvános kulcsokkal ellentétben a tanúsítványok élettartama nagyon rövid lehet. Létrehozhat egy tanúsítványt, amely 1 percig vagy akár 5 másodpercig is érvényes. Ezen időszak után a tanúsítvány használhatatlanná válik az új kapcsolatokhoz. Ez ideális vészhelyzeti hozzáféréshez.
- Bármely fiókhoz létrehozhat tanúsítványt a gazdagépen, és szükség esetén elküldheti az ilyen „egyszeri” tanúsítványokat kollégáinak.
Amire szüksége van
- Rezidens kulcsokat támogató hardveres biztonsági kulcsok.
A rezidens kulcsok olyan kriptográfiai kulcsok, amelyeket teljes egészében a biztonsági kulcsban tárolnak. Néha alfanumerikus PIN-kód védi őket. A rezidens kulcs nyilvános része exportálható a biztonsági kulcsból, opcionálisan a privát kulcs kezelőjével együtt. Például a Yubikey 5 sorozatú USB kulcsok támogatják a rezidens kulcsokat, célszerű csak a gazdagéphez való vészhelyzeti hozzáférésre szolgálni. Ehhez a bejegyzéshez csak egy kulcsot fogok használni, de szükség van egy másikra is a biztonsági mentéshez. - Biztonságos hely a kulcsok tárolására.
- OpenSSH 8.2-es vagy újabb verziója a helyi számítógépen és azokon a kiszolgálókon, amelyekhez vészhelyzeti hozzáférést szeretne elérni. Az Ubuntu 20.04 OpenSSH 8.2-vel érkezik.
- (opcionális, de ajánlott) CLI-eszköz a tanúsítványok ellenőrzéséhez.
Edzés
Először is létre kell hoznia egy hitelesítési hatóságot, amely a hardver biztonsági kulcsán található. Helyezze be a kulcsot, és futtassa:
$ ssh-keygen -t ecdsa-sk -f sk-user-ca -O resident -C [security key ID]
Megjegyzésként (-C) jeleztem [e-mail védett]így nem felejti el, hogy melyik biztonsági kulcshoz tartozik ez a tanúsító hatóság.
Amellett, hogy hozzáadjuk a kulcsot a Yubikey-hez, két fájl jön létre helyben:
- sk-user-ca, egy kulcsfogó, amely a biztonsági kulcsban tárolt privát kulcsra utal,
- sk-user-ca.pub, amely a tanúsító hatóság nyilvános kulcsa lesz.
De ne aggódjon, a Yubikey egy másik privát kulcsot is tárol, amelyet nem lehet visszakeresni. Ezért itt minden megbízható.
A gazdagépeken rootként adja hozzá (ha még nem tette meg) a következőket az SSHD konfigurációjához (/etc/ssh/sshd_config):
TrustedUserCAKeys /etc/ssh/ca.pub
Ezután a gazdagépen adja hozzá a nyilvános kulcsot (sk-user-ca.pub) az /etc/ssh/ca.pub fájlhoz
Indítsa újra a démont:
# /etc/init.d/ssh restart
Most megpróbálhatjuk elérni a gazdagépet. De először bizonyítványra van szükségünk. Hozzon létre egy kulcspárt, amely társítva lesz a tanúsítvánnyal:
$ ssh-keygen -t ecdsa -f emergency
Tanúsítványok és SSH-párok
Néha csábító lehet tanúsítványt használni a nyilvános/privát kulcspár helyettesítésére. De a tanúsítvány önmagában nem elegendő a felhasználó hitelesítéséhez. Minden tanúsítványhoz tartozik egy privát kulcs is. Ezért kell létrehoznunk ezt a "vészhelyzeti" kulcspárt, mielőtt tanúsítványt állítanánk ki magunknak. Az a fontos, hogy az aláírt tanúsítványt mutassuk meg a szervernek, jelezve, hogy melyik kulcspárhoz van privát kulcsunk.Tehát a nyilvános kulcscsere továbbra is él és virul. Ez még tanúsítványokkal is működik. A tanúsítványok egyszerűen kiküszöbölik annak szükségességét, hogy a szerver nyilvános kulcsokat tároljon.
Ezután hozza létre magát a tanúsítványt. Ubuntu felhasználói engedélyre van szükségem 10 perces időközönként. Meg tudod csinálni a magad módján.
$ ssh-keygen -s sk-user-ca -I test-key -n ubuntu -V -5m:+5m emergency
A rendszer felkéri, hogy írja alá a tanúsítványt az ujjlenyomatával. Hozzáadhat további felhasználóneveket vesszővel elválasztva, például -n ubuntu,carl,ec2-user
Ez az, most már van bizonyítványod! Ezután meg kell adnia a megfelelő engedélyeket:
$ chmod 600 emergency-cert.pub
Ezt követően megtekintheti a tanúsítvány tartalmát:
$ step ssh inspect emergency-cert.pub
Az enyém így néz ki:
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
Itt a nyilvános kulcs az általunk létrehozott vészkulcs, az sk-user-ca pedig a hitelesítési hatósághoz van társítva.
Végül készen állunk az SSH parancs futtatására:
$ ssh -i emergency ubuntu@my-hostname
ubuntu@my-hostname:~$
- Mostantól létrehozhat tanúsítványokat bármely olyan gazdagépen lévő felhasználó számára, amely megbízik a tanúsító hatóságában.
- Eltávolíthatja a vészhelyzetet. Az sk-user-ca fájlt elmentheti, de nincs rá szüksége, mivel az is a biztonsági kulcson van. Érdemes lehet eltávolítani az eredeti PEM nyilvános kulcsot is a gazdagépekről (például az ~/.ssh/authorized_keys fájlból az ubuntu felhasználó számára), ha vészhelyzeti hozzáférésre használta.
Vészhelyzeti hozzáférés: cselekvési terv
Illessze be a biztonsági kulcsot, és futtassa a parancsot:
$ ssh-add -K
Ez hozzáadja a tanúsító hatóság nyilvános kulcsát és kulcsleíróját az SSH-ügynökhöz.
Most exportálja a nyilvános kulcsot egy tanúsítvány létrehozásához:
$ ssh-add -L | tail -1 > sk-user-ca.pub
Hozzon létre egy tanúsítványt, amelynek lejárati dátuma például legfeljebb egy óra:
$ 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
És most újra SSH:
$ ssh -i emergency username@host
Ha az .ssh/config fájl problémát okoz a csatlakozás során, akkor az ssh-t a -F none kapcsolóval futtatva megkerülheti. Ha igazolást kell küldenie egy kollégának, a legegyszerűbb és legbiztonságosabb megoldás
Amit szeretek ebben a megközelítésben, az a hardveres támogatás. A biztonsági kulcsokat egy széfbe helyezheti, és nem mennek sehova.
A Reklám Jogairól
Epic szerverek - Van
Forrás: will.com