
V tomto příspěvku vypracujeme postup pro nouzový přístup k SSH hostitelům pomocí bezpečnostních hardwarových klíčů v offline režimu. To je pouze jeden z přístupů a můžete si ho přizpůsobit podle svých potřeb. Budeme uchovávat certifikační autoritu SSH pro naše hostitele na bezpečnostním hardwarovém klíči. Tento systém bude fungovat prakticky na jakémkoli OpenSSH, včetně SSH s jednotným přihlášením.
Proč to všechno? No, je to varianta pro krajní případy. Je to zadní vrátka, která vám umožní přístup k vašemu serveru v případě, že z nějakého důvodu nic jiného nefunguje.
Proč používat certifikáty místo otevřených / uzavřených klíčů pro nouzový přístup?
- Na rozdíl od otevřených klíčů může doba platnosti certifikátů být velmi krátká. Můžete vygenerovat certifikát, který je platný na 1 minutu nebo dokonce 5 sekund. Po vypršení této doby už certifikát nebude použitelný pro nová připojení. To je ideální pro nouzový přístup.
- Můžete vytvořit certifikát pro libovolný účet na svých hostitelích a v případě potřeby posílat takovéto "jednorázové" certifikáty kolegům.
Co budete potřebovat
- Bezpečnostní hardwarové klíče, které podporují rezidentní klíče.
Rezidentní klíče jsou kryptografické klíče, které jsou plně uchovávány uvnitř bezpečnostního klíče. Někdy jsou chráněny alfanumerickým PIN kódem. Veřejná část rezidentního klíče může být exportována z bezpečnostního klíče, pokud je to nutné, společně s popisem uzavřeného klíče. Například USB klíče série Yubikey 5 podporují rezidentní klíče. Je žádoucí, aby byly určeny pouze pro nouzový přístup k hostiteli. Pro tento příspěvek budu používat pouze jeden klíč, ale měli byste mít další jako zálohu. - Bezpečné místo pro ukládání těchto klíčů.
- OpenSSH verze 8.2 nebo vyšší na vašem místním počítači a na serverech, ke kterým chcete získat nouzový přístup. Ubuntu 20.04 dodává OpenSSH 8.2.
- (není nutné, ale žádoucí) CLI nástroj pro ověřování certifikátů.
Příprava
Nejprve je nutné vytvořit certifikační autoritu, která bude umístěna na bezpečnostním hardwarovém klíči. Zasuňte klíč a spusťte:
$ ssh-keygen -t ecdsa-sk -f sk-user-ca -O resident -C [security key ID]Jako komentář (-C) jsem zadal yubikey-9-512-742@smallstep.com, abych nezapomněl, k jakému bezpečnostnímu klíči se tento certifikační orgán vztahuje.
Kromě přidání klíče k Yubikey budou lokálně vygenerovány dva soubory:
- sk-user-ca, deskriptor klíče, který odkazuje na soukromý klíč uložený v bezpečnostním klíči,
- sk-user-ca.pub, který bude veřejným klíčem pro váš certifikační orgán.
Ale nebojte se, na Yubikey je uložen ještě jeden soukromý klíč, který nelze extrahovat. Takže je to tady všechno spolehlivé.
Na hostitelích jako uživatel root přidejte (pokud jste ještě nepřidali) do konfigurace vašeho SSHD (/etc/ssh/sshd_config) následující:
TrustedUserCAKeys /etc/ssh/ca.pubPoté přidejte veřejný klíč (sk-user-ca.pub) na hostitele do /etc/ssh/ca.pub
Restartujte démon:
# /etc/init.d/ssh restartNyní můžeme zkusit přístup k hostiteli. Ale nejdříve budeme potřebovat certifikát. Vytvořte pár klíčů, který bude spojen s certifikátem:
$ ssh-keygen -t ecdsa -f emergencyCertifikáty a SSH páry
Někdy je lákavé použít certifikát jako náhradu za pár veřejný / soukromý klíč. Ale pro autentizaci uživatele jednoho certifikátu nestačí. Každý certifikát má také s ním spojený soukromý klíč. Proto musíme vygenerovat tento pár "nouzových" klíčů, než si vydáme certifikát. Důležité je, že podepsaný certifikát ukazujeme serveru s uvedením páru klíčů, pro které máme soukromý klíč.Takže, výměna veřejných klíčů je stále naživu. To platí i pro certifikáty. Certifikáty jednoduše zbavují server potřeby uchovávat veřejné klíče.
Dále vytvořte samotný certifikát. Potřebuji autorizaci uživatele ubuntu v 10minutovém intervalu. Můžete to udělat po svém.
$ ssh-keygen -s sk-user-ca -I test-key -n ubuntu -V -5m:+5m emergencyBudete vyzváni k podpisu certifikátu pomocí otisku prstu. Můžete přidat další uživatelská jména oddělená čárkami, například -n ubuntu,carl,ec2-user
Hotovo, nyní máte certifikát! Dále musíte nastavit správná oprávnění:
$ chmod 600 emergency-cert.pubPoté si můžete prohlédnout obsah vašeho certifikátu:
$ step ssh inspect emergency-cert.pubTakto vypadá můj:
emergency-cert.pub
Typ: ecdsa-sha2-nistp256-cert-v01@openssh.com uživatelský certifikát
Veřejný klíč: ECDSA-CERT SHA256:EJSfzfQv1UK44/LOKhBbuh5oRMqxXGBSr+UAzA7cork
Podepisující CA: SK-ECDSA SHA256:kLJ7xfTTPQN0G/IF2cq5TB3EitaV4k3XczcBZcLPQ0E
ID klíče: "test-key"
Sériové číslo: 0
Platnost: od 2020-06-24T16:53:03 do 2020-06-24T17:03:03
Principálové:
ubuntu
Kritické možnosti: (žádné)
Rozšíření:
permit-X11-forwarding
permit-agent-forwarding
permit-port-forwarding
permit-pty
permit-user-rcZde veřejný klíč představuje klíč emergency, který jsme vytvořili, a je spojen s certifikační autoritou sk-user-ca.
Konečně jsme připraveni spustit příkaz SSH:
$ ssh -i emergency ubuntu@my-hostname
ubuntu@my-hostname:~$- Nyní můžete vytvářet certifikáty pro jakéhokoli uživatele na hostiteli, který důvěřuje vaší certifikační autoritě.
- Můžete odstranit emergency. Můžete si ponechat sk-user-ca, ale nepotřebujete ho, protože je také na bezpečnostním klíči. Možná budete chtít také odstranit původní veřejný PEM klíč ze svých hostitelů (například v ~/.ssh/authorized_keys pro uživatele ubuntu), pokud jste ho používali pro nouzový přístup.
Nouzový přístup: postup
Vložte bezpečnostní klíč a spusťte příkaz:
$ ssh-add -KTímto způsobem přidáte veřejný klíč certifikační autority a popisovač klíče do SSH agenta.
Nyní exportujte veřejný klíč, abyste vytvořili certifikát:
$ ssh-add -L | tail -1 > sk-user-ca.pubVytvořte certifikát s dobou platnosti, například maximálně hodinu:
$ 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.pubA nyní znovu SSH:
$ ssh -i emergency username@hostPokud váš soubor .ssh/config způsobuje nějaké problémy při připojení, můžete spustit ssh s parametrem -F none, abyste se bez něj obešli. Pokud potřebujete poslat certifikát kolegovi, nejjednodušší a nejbezpečnější možností je . K tomu potřebujete pouze dva soubory — v našem případě je to emergency a emergency-cert.pub.
Co se mi na tomto přístupu líbí, je hardwarová podpora. Můžete umístit bezpečnostní klíče do trezoru a nikam nezmizí.
Na základě reklamy
Epic servery — to je s výkonnými procesory od AMD, frekvence jádra CPU až 3,4 GHz. Maximální konfigurace umožňuje řešení prakticky jakýchkoli úloh — 128 jader CPU, 512 GB RAM, 4000 GB NVMe. Připojte se!
Zdroj: habr.com
