V tomto příspěvku vyvineme postup pro nouzový přístup k hostitelům SSH pomocí hardwarových bezpečnostních klíčů offline. Toto je jen jeden přístup a můžete si jej přizpůsobit tak, aby vyhovoval vašim potřebám. Certifikační autoritu SSH pro naše hostitele uložíme na hardwarový bezpečnostní klíč. Toto schéma bude fungovat na téměř každém OpenSSH, včetně SSH s jediným přihlášením.
K čemu to všechno je? No, tohle je poslední možnost. Jedná se o zadní vrátka, která vám umožní získat přístup k vašemu serveru, když z nějakého důvodu nefunguje nic jiného.
Proč používat certifikáty místo veřejných/soukromých klíčů pro nouzový přístup?
- Na rozdíl od veřejných klíčů mohou mít certifikáty velmi krátkou životnost. Můžete vygenerovat certifikát, který je platný 1 minutu nebo dokonce 5 sekund. Po uplynutí této doby bude certifikát nepoužitelný pro nová připojení. To je ideální pro nouzový přístup.
- Můžete si vytvořit certifikát pro jakýkoli účet na svých hostitelích a v případě potřeby takové „jednorázové“ certifikáty poslat kolegům.
Co potřebujete
- Hardwarové bezpečnostní klíče, které podporují rezidentní klíče.
Rezidentní klíče jsou kryptografické klíče, které jsou zcela uloženy v bezpečnostním klíči. Někdy jsou chráněny alfanumerickým PINem. Veřejnou část rezidentního klíče lze exportovat z bezpečnostního klíče, volitelně spolu s popisovačem soukromého klíče. Rezidentní klíče podporují například USB klíče Yubikey řady 5. Je vhodné, aby byly určeny pouze pro nouzový přístup k hostiteli. Pro tento příspěvek použiji pouze jeden klíč, ale měli byste mít další pro zálohování. - Bezpečné místo pro uložení 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 mít nouzový přístup. Ubuntu 20.04 se dodává s OpenSSH 8.2.
- (volitelné, ale doporučené) Nástroj CLI pro kontrolu certifikátů.
Trénink
Nejprve musíte vytvořit certifikační autoritu, která bude umístěna na hardwarovém bezpečnostním klíči. Vložte klíč a spusťte:
$ ssh-keygen -t ecdsa-sk -f sk-user-ca -O resident -C [security key ID]
Jako komentář (-C) jsem uvedl [chráněno e-mailem]abyste nezapomněli, ke kterému bezpečnostnímu klíči tato certifikační autorita patří.
Kromě přidání klíče do Yubikey budou lokálně vygenerovány dva soubory:
- sk-user-ca, popisovač klíče, který odkazuje na soukromý klíč uložený v bezpečnostním klíči,
- sk-user-ca.pub, což bude veřejný klíč vaší certifikační autority.
Ale nebojte se, Yubikey uchovává další soukromý klíč, který nelze získat. Proto je zde vše spolehlivé.
Na hostitelích jako root přidejte (pokud jste to ještě neudělali) do své konfigurace SSHD (/etc/ssh/sshd_config):
TrustedUserCAKeys /etc/ssh/ca.pub
Poté na hostiteli přidejte veřejný klíč (sk-user-ca.pub) do /etc/ssh/ca.pub
Restartujte démona:
# /etc/init.d/ssh restart
Nyní se můžeme pokusit o přístup k hostiteli. Nejprve ale potřebujeme certifikát. Vytvořte pár klíčů, který bude přidružen k certifikátu:
$ ssh-keygen -t ecdsa -f emergency
Certifikáty a páry SSH
Někdy je lákavé použít certifikát jako náhradu za pár veřejný/soukromý klíč. Samotný certifikát však k ověření uživatele nestačí. Ke každému certifikátu je také přiřazen soukromý klíč. To je důvod, proč musíme vygenerovat tento „nouzový“ pár klíčů, než si vystavíme certifikát. Důležité je, že serveru ukážeme podepsaný certifikát s uvedením páru klíčů, pro který máme soukromý klíč.Výměna veřejného klíče je tedy stále naživu. Funguje to i s certifikáty. Certifikáty jednoduše eliminují potřebu, aby server ukládal 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 emergency
Budete požádáni o podepsání certifikátu pomocí otisku prstu. Můžete přidat další uživatelská jména oddělená čárkami, například -n ubuntu,carl,ec2-user
To je vše, nyní máte certifikát! Dále musíte zadat správná oprávnění:
$ chmod 600 emergency-cert.pub
Poté si můžete prohlédnout obsah svého certifikátu:
$ step ssh inspect emergency-cert.pub
Takhle vypadá můj:
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
Zde je veřejný klíč nouzový klíč, který jsme vytvořili, a sk-user-ca je spojen s certifikační autoritou.
Nakonec jsme připraveni spustit příkaz SSH:
$ ssh -i emergency ubuntu@my-hostname
ubuntu@my-hostname:~$
- Nyní můžete vytvářet certifikáty pro libovolného uživatele na hostiteli, který důvěřuje vaší certifikační autoritě.
- Nouzový stav můžete odstranit. Můžete uložit sk-user-ca, ale nemusíte, protože je také na bezpečnostním klíči. Můžete také chtít odstranit původní veřejný klíč PEM ze svých hostitelů (například v ~/.ssh/authorized_keys pro uživatele ubuntu), pokud jste jej použili pro nouzový přístup.
Nouzový přístup: Akční plán
Vložte bezpečnostní klíč a spusťte příkaz:
$ ssh-add -K
Tím se do agenta SSH přidá veřejný klíč a deskriptor klíče certifikační autority.
Nyní exportujte veřejný klíč a vytvořte certifikát:
$ ssh-add -L | tail -1 > sk-user-ca.pub
Vytvořte certifikát s datem vypršení platnosti, například ne delším než 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.pub
A teď znovu SSH:
$ ssh -i emergency username@host
Pokud váš soubor .ssh/config způsobuje nějaké problémy při připojování, můžete spustit ssh s volbou -F none a obejít jej. Pokud potřebujete poslat certifikát kolegovi, je nejjednodušší a nejbezpečnější možnost
Co se mi na tomto přístupu líbí, je hardwarová podpora. Bezpečnostní klíče můžete uložit do trezoru a nikam nezmizí.
Jako reklama
Epické servery - Je
Zdroj: www.habr.com