Už delší dobu používám místo klasického jména a hesla k přihlašování na server SSH klíč. Abych se vyhnul odhadnutí snadného hesla přes bruteforce útok, používal jsem opravdu silné heslo. Navíc heslo bylo dobré čas od času měnit a když jste se dlouho někde nepřihlašovali, tak jste pak prostě hádali, které heslo by to tak mohlo být.

Hesla obecně jsou pak náchylná na to, že je někdo odposlechne, stáhne jejich databázi, nebo hashe, zkrátka používat jen heslo dnes nestačí.

Přešel jsem tedy na ověřování pomocí SSH klíče.

Jak to funguje

Funguje to tak, že server vygeneruje náhodná data, která vám pošle. Vy je svým privátním klíčem podepíšete a pošlete mu je zpátky. Na serveru máte uložen veřejný klíč, kterým on ověří pravost vašeho podpisu a pustí vás dovnitř.

Největší výhodou pak je, že vlastně nedochází k odeslání privátního klíče na server – vše probíhá na vaší bezpečné stanici a kdyby byl server kompromitovaný či nedůvěryhodný, je vám to jedno.

Veřejný klíč tedy můžete nahrát na libovolný počet serverů a všude se přihlašovat svým jediným unikátním privátním klíčem.

Není třeba chránit jen SSH, ale i další služby. Jak a proč zabezpečit RDP je popsáno zde: https://www.spajk.cz/jak-hacknout-server-pres-rdp-a-jak-tomu-zabranit/

Jak na to

Nejprve si vygenerujeme pár klíčů. Ty pak zkopírujeme do domovského adresáře na serveru.

🤖 Tenhle web je bez reklam! 🤖
💸 Nesbírám a neprodávám data návštěvníků. 💸
🕵️‍♂️ Respektuji Vaše soukromí. 🕵️‍♂️
🌎 Píšu pro dobro lidstva. 🌎

❤️ Líbí se Vám článek? ❤️

Kupte mi kafe!

ssh-keygen -t rsa
#Generating public/private rsa key pair.
#Enter file in which to save the key (/home/spajk/.ssh/id_rsa):

Program se zeptá kam klíče uložit, stačí zmáčknout ENTER pro uložení do výchozího umístění.

Pro vyšší bezpečnost nedoporučuji používat pro přihlašování váš hlavní/admin účet (v mém případě spajk), ale vytvořit si pro přihlášení jedinečnou identitu.

Nyní je potřeba zadat frázi, neboli heslo k certifikátu, kterým bude certifikát zašifrován. Lze jej sice nechat bez hesla, ale to nedoporučuji. Pokud by se k certifikátu někdo dostal, mohl by jej zneužít. A to nechcete.

Klíče jsou tedy vygenerovány a uložily se do vašeho domovského adresáře do složky .ssh.

Klíče jsou dva id_rsa a id_rsa.pub. Přípona *.pub znamená public, neboli veřejný – toto je tedy část, kterou nahrajete na server. Oproti tomu klíč id_rsa je teď něco jako klíč od vašeho bytu – bezpečně jej uložte na místo, kde se k němu nikdo nedostane.

Osobně doporučuji změnit jeho název a přidat mu příponu *. private, aby bylo jasné, o jak důležitý soubor se jedná.

Tím je klientská část hotová.

Nahráváme klíč na server

Veřejný klíč je nyní potřeba nahrát na servery, kam se chceme přihlašovat a to konkrétně do složky /home/spajk/.ssh/authorized_keys. K tomu slouží třeba příkaz:

ssh-copy-id username@remote_host

Tento nástroj je k dispozici na většině systémů, pokud ho tam nemáte, nebo jste spíš na grafiku, použijte třeba WinSCP.

Manuální přidání klíče

Pokud nakopírujete na server veřejný klíč manuálně, tak je potřeba přidat ho do ověřených klíčů, aby fungoval. Pro zobrazení obsahu klíče zadejte:

cat ~/.ssh/id_rsa.pub
Výsledkem by měl výstup v tomto tvaru:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== demo@test

Na serveru zkontrolujte, zda existuje složka ~/.ssh a pokud ne, tak ji vytvořte:

mkdir -p ~/.ssh

Přejděte do ní a vložte výpis vašeho klíče do souboru authorized_keys:

echo výpis_veřejného_klíče >> ~/.ssh/authorized_keys

V příkazu výše nahraďte výpis_veřejného_klíče tím co vzešlo z příkazu cat ~/.ssh/id_rsa.pub Vypadat by to mělo nějak takto: ssh-rsa AAAA....

Nastavte oprávnění:

chmod -R go= ~/.ssh

To pro jistotu rekurzivně odebere ke složce všechny případná oprávnění grup a dalších.

Úprava konfigurace služby

Jakmile je veřejný tam klíč na serveru nahrán, doporučuji přesunout id_rsa do bezpečného umístění.

Pokud chcete zapnout/vynutit používání SSH klíčů na serveru, je potřeba upravit konfiguraci.

nano /etc/ssh/sshd_config

Zde pak hledejte volby:

RSAAuthentication yes
PubkeyAuthentication yes

Pokud byste chtěli přihlašování přes SSH klíče vyloženě vynutit, (doporučuji) pak přidejte ještě tyto řádky a ještě zakažte přihlašování roota přes SSH:

ChallengeResponseAuthentication no
PasswordAuthentication no
UsePAM no
PermitRootLogin no

Tímto způsobem se vyhnete nejen bruteforce útokům, ale i naučíte další uživatele více dbát na bezpečnost. Jakmile je hotovo, jen restartujeme službu SSH serveru:

systemctl restart sshd

A tím je hotovo. Nyní se můžete bezpečně přihlašovat na vše linuxové servery.

PS: Někomu možná přijde nepohodlné používat dva faktory – klíč a heslo (passphrase). Možná Vás potěší, že klíč i frázi umí uložit klienti jako Putty či Termius do své keše a vše pak probíhá na jedno kliknutí. V případě použití aplikace Termius je vše chráněno pomocí biometriky na vašem tabletu/telefonu, což se dá pokládat za slušnou multifaktorovou autentizaci.

🤖 Tenhle web je bez reklam! 🤖
💸 Nesbírám a neprodávám data návštěvníků. 💸
🕵️‍♂️ Respektuji Vaše soukromí. 🕵️‍♂️
🌎 Píšu pro dobro lidstva. 🌎

❤️ Líbí se Vám článek? ❤️

Kupte mi kafe!