Linux E X P R E S

Facebook

Autentizace pomocí klíčů

Jistě jste si všimli, že pokud mluvíme o komunikaci protokolem SSH, bavíme se o zabezpečeném kanálu, nikoliv bezpečném. Pokud budete mít komunikaci zabezpečenou sebelepší šifrou a ztratíte lístek se svým heslem, na server se může útočník dostat. Co je ale horší - lidé si vytvářejí snadno zapamatovatelná a často také jednoduše uhádnutelná hesla. A to je největší problém autentizace osob pomocí hesel.


V Linuxu používáme balík OpenSSH obsahující jak SSH server (sshd), tak i klient (ssh). Tato implementace používá asymetrické šifrování RSA pro výměnu komunikačních klíčů a dále symetrické šifry 3DES, Blowfish, AES a Arcfour pro vlastní přenos (RSA je výpočetně náročná šifra, pro vlastní přenos dat jsou vhodnější symetrické šifry). Vše je naprosto transparentní.

Image

Protokol SSH, který OpenSSH implementuje a který vytváří pracovní skupina při IETF, umožňuje autentizovat uživatele pomocí RSA klíčů. V praxi to zkrátka znamená, že při připojování po vás server nechce heslo, ale také veřejný klíč. Server s ním zakóduje bezpečnostní token, a pokud jej klient správně dekóduje (samozřejmě tajným klíčem, který má jen on) a pošle zpět serveru, je vpuštěn do systému.

Mezi hlavní výhody tohoto způsobu ověřování uživatelů je právě absence hesla. Uživatelé si nic nemusejí pamatovat, nic si nepíší na lístečky a nelepí si je na monitor. Ještě větší přínos však vidím v naprostém znemožnění útoku hrubou silou - pokud bude autentizace hesly úplně zakázána.

Pokud se připojujete na server poprvé, klient zobrazí hlášení, že nezná veřejný klíč serveru. Obvykle zobrazí také otisk klíče, tzv. fingerprint a vyžaduje explicitní potvrzení ("Yes"). Napoprvé tuto hlášku můžete odklepnout, ti otrlejší si mohou poznačit otisk do deníčku. Vždy, když se bude klient znovu připojovat, tak veřejný klíč serveru srovná s tím, který již zná.

Kdykoliv však uvidíte znovu toto hlášení, kontaktujte administrátora serveru. Pakliže vám potvrdí, že s klíči na serveru nic nedělal, buďte velmi obezřetní. Můžete se totiž přihlásit na úplně cizí (podvržený - například změnou DNS záznamu) server. Každý správný administrátor tajný klíč serveru zálohuje a při upgrade systému jej obnoví.

Je velmi důležité, abyste této poznámce na okraji porozuměli, jinak se vystavujete nebezpečí, že si někdo "zahraje na váš server" (útok man-in-the-middle). Zpráva s fingerprintem ve vás prostě musí vyvolávat mimořádné podezření.

Jak tedy ve Windows na to? O programu Putty jsme se již zmiňovali. Obsahuje program puttygen.exe, kterým si můžete vygenerovat svoji dvojici klíčů. Po klepnutí na tlačítko program požádá o náhodné pohyby myší nad šedou plochou okna (potřebuje vygenerovat dostatečně "dobrá" náhodná data). Poté budete dotázání na tzv. passphrase - heslo, kterým bude tajný klíč zašifrován.

Asi jste si již uvědomili, že pokud by se někdo zmocnil tajného klíče, mohl by se hlásit na všechny servery, které by pomocí něj autentizovaly vstup. A jelikož se pohybujeme ve vodách operačního systému Windows (kde "pluje" spoustu spywaru, malwaru a trojanů - ty mají hesla velmi rády), zvolíme dostatečně silné heslo (šest znaků by vám mělo dát dostatečný čas pro změnu klíče po odcizení). Nyní stačí klíče uložit do vámi zvoleného adresáře, nezapomeňte si správně pojmenovat, který je veřejný (public) a který soukromý (private)! V dialogu dole můžete změnit nastavení klíče, já důrazně doporučuji šifru RSA a verzi SSH 1 (pro tu je i tento návod). Délka 1024 bitů je pro účely autentizace dostačující.

A nyní ta legrační část. Veřejný klíč musíte nějakým způsobem dostat na server. Můžete použít SCP (viz minulé číslo LinuxEXPRESu), nebo jej poslat klidně e-mailem. Nemusíte zkrátka použít zabezpečený kanál, protože z veřejného klíče útočník ten tajný nemůže odvodit. Jakmile jej budete mít nakopírovaný na serveru, vytvořte v adresář ~/.ssh, pokud ještě neexistuje. Do něj nakopírujte veřejný klíč a pojmenujte jej authorized_keys. Pokud takový soubor existuje, připojte jej na konec pomocí příkazu cat muj_klic >> authorized_keys.

Nyní si na ploše vytvoře zástupce s programem pageant.exe, který se rovněž dodává s balíkem putty (musíte si stáhnout ZIP variantu nebo installer, pokud máte jen binárku putty.exe). Jako parametr zadejte cestu k soukromému klíči (do uvozovek, pokud máte v cestě mezery). Nyní, když se budete chtít připojovat pomocí klíče, stačí spustit Pageant, ten se zeptá na heslo ke klíči a po zadání se schová do ikonové oblasti. Putty si od něj klíč při spojení vyžádá. Hotovo, nezapomeňte pečlivě zamykat stanici pokaždé, když se od ní jen na chvíli vzdálíte!

V Linuxu si klíče vygenerujete programem ssh-keygen (parametr -t udává metodu: rsa1 pro SSH1, rsa a dsa pro SSH2), který je vygeneruje rovnou do adresáře ~/.ssh, s čímž počítá i klient. Na server pak stačí dopravit soubor ~/.ssh/id_rsa.pub (eventuálně dsa při použití tohoto algoritmu) podobným způsobem. Jen připomenu, že pokud použijete protokol SSH2, pak cílový soubor pojmenujte authorized_keys2.

Diskuze (2) Nahoru