SSH hesla, klíče a bezpečná pohodlnost

Děláte-li správce serverů a přihlašujete-li s k více různým počítačům s různými hesly, snadno se vám to začne plést. A co více. Pokud by nějaká zákeřná osoba hacknula jeden z vašich serverů a začala si logovat všechna možná chybná hesla, která tam kdy zkoušel někdo zadat, dříve nebo později se nejspíše dozví všechna vaše hesla! Nemluvě o tom, že přemýšlení na téma, jaké heslo mám na tom a tom serveru, hodně zdržuje a odvádí od práce.

Co s tím? Vygenerujeme si klíče!

Slyšeli jste někdy něco o ssh klíčích? Veřejný a privátní klíč si můžete vygenerovat příkazem.

ssh-keygen

Pokud tento příkaz zadáte, budete dotázáni, zda-li si přejete nastavit „passphrase“, což znamená, jestli chcete onen klíč zakódovat heslem. Pokud nezadáte žádnou passphrase, riskujete, že kdo se zmocní vašeho privátního klíče, bude se moci všude hlásit bez hesla stejně jako vy. Proto je tedy dobré passphrase zadat.

Pokud už klíče mám, jen chci změnit passphrase, použiji:

ssh-keygen -p 

Používáním klíčů má oproti přihlašování heslem ještě výhodu v tom, že vaše původní heslo vůbec nebude přenášeno po síti.

Veřejný klíč nahrajeme na servery kam se chceme přihlašovat

Nahrání klíče provedeme následovně:

ssh-copy-id  root@192.168.0.1
# nebo používáme-li nějaký nestandardní port (pozor, bez těch apostrofů to nefunguje)
ssh-copy-id  'root@192.168.0.1 -p 326'

Nyní se místo našeho původního hesla lze přihlašovat pomocí passphrase. Vyzkoušejte si to.

ssh root@192.168.0.1

Stejnou proceduru můžeme zopakovat pro více různých serverů s různými hesly, přičemž naše passphrase zůstává stejná! Ona passphrase tak zůstává jako jediná věc kterou si musíme pamatovat. Všechna ostatní hesla mohou být někde hodně zašifrovaná nebo schovaná v bezpečí. Pokud by nám někdo ukradl naše privátní klíče, stejně nezná naši passphrase, takže jsou mu k ničemu.

Nechce se vám stále stejná passphrase zadávat pořád dokola?

Řešení se jmenuje keychain. Nainstalujte si balíček keychain, podle operačního systému který máte

aptitude install  keychain  # debian a ubuntu
pacman -S keychain # archlinux

nyní do vašeho ~/.bashrc nebo ~/.bash_profile přidejte řádek

eval $(keychain --eval --agents ssh -Q --quiet id_rsa)

Nyní budete na vaši passphrase dotázáni vždy jen jednou po nastartování počítače a to vždy, když poprvé otevřete okno s konzolí. Rozšifrovaný privátní klíč bude udržován v paměti a bude-li třeba, k přihlášení bude použit.

Pokud chcete vymazat odšifrovaný klíč v paměti, použijte příkaz

keychain --agents ssh --clear

Výše uvedený příkaz se může hodit, např. pokud si chceme otestovat přihlašování s heslem. (zda-li jsme heslo např. nezapomněli) Stačí když na výzvu Enter passphrase for key '/home/jatyvole/.ssh/id_rsa' zmáčkneme jen enter a budeme vyzváni na heslo, jako bychom přistupovali z počítače bez klíčů.

Je třeba více čtení? Doporučuji článek na archlinuxu wiki s názvem ssh keys

Další zvyšování bezpečnosti

Volte bezpečná hesla. Jaká hesla nevolit, vás může přesvědčit například tato tabulka obvyklých hesel v USA. Nebo též článek bulvárního novinky.cz Pokud má někdo, řekněme, databázi nejčastějších 20000 hesel, vyzkouší všechna a má překvapivě slušnou šanci, že se občas trefí.

Nepoužívejte též stejné heslo jako používáte např. na váš email všude možně. Pokud se zaregistrujete na nějakou pochybnou stránku a použijete přitom svůj email a stejné heslo, pochybný provozovatel má rázem přístup ke všem vaši emailům! Tedy kdyby měl zájem. Proč? Email zná a heslo dost možná stejné jako na jeho službu.

Podle mého názoru též není rozumné, aby používali OS Windows. Jakákoli podepsaná webová java applet aplikace může nainstalovat odposlouchávač klávesnice… Má totiž přístup nejen k vaší zvukové kartě, ale i disku. Musí být sice podepsaná, ale může být podepsaná sama sebou. Nějak o podobných záležitostech páni experti zapomínají hovořit. Napadá mne, že by možná šlo úplně to stejné provést i v Linuxu, protože odposlouchávat klávesnici lze zjevně i jako neroot uživatel. Ale Windows je též velmi nebezpečné už kvůli tomu, jak je rozšířené, a různé špehovací programy jsou mnohem rozšířenější… Kdybyste si ale přece jen nedali říct, tak používat klíče je možné i např. s programem putty. Útočník/špión to má přecejen ztíženo, protože kromě odposlechnutého hesla musí ukrást i klíče. A protože možná nečetl tento článek a je to pravděpodobně obyčejný widowsák, tak možná neví, jak a kde je má hledat.

Často se doporučuje zakázat přihlašování jako root. Proč? Budete-li se přihlašovat jako např uživatel milan22, útočník nejen, že musí uhádnout heslo, ale musí uhádnout i přihlašovací jméno. Zakázat přihlašování jako root můžete editací souboru /etc/ssh/sshd_config. Přidejte tam

PermitRootLogin no

Pokud ale chcete dovolit přihlašování na uživatele root pomocí klíčů (což je bezpečnější), tak použijte variantu

PermitRootLogin without-password

Pokud máte více různých lidí, kteří se občas potřebují hlásit na servery jako root, není rozumné jim všem prozrazovat opravdové rootovské heslo. Jednak ho budou věčně zapomínat a psát si je nevhodná místa jako do mailů nebo na papírek na stůl, a když někdo z týmu vypadne, abychom všem měnili heslo! Místo toho jim nakopírujte jen jejich veřejný klíč. Kopírování je možné provést i ručně, stačí přidat obsah souboru /home/pepa/.ssh/id_rsa.pub (ten vám může Pepa poslat emailem, třeba jako přílohu) jako další řádek na serveru v soubor authorized_keys.

Tedy:

cat id_rsa.pub>> ~/.ssh/authorized_keys

Pepa má svobodu si passphrase zvolit, jak je mu libo. A nemusí to měnit vždy, když mu změní oprávnění. Pokud již nebudete chtít, aby měl uživatel Pepa root přístup na daný server, prostě jen smažete příslušnou řádku ze souboru authorized_keys na serveru.

Jinak by vás též mohl zajímat můj předchozí příspěvek na téma bezpečné ukládání hesel pomocí šifrování části dat v domovském adresáři .

Potíže? Troubleshootings?

Pokud jste nakopírovali klíče, ale přesto se vám nedaří se přihlásit bez hesla, na serveru, na který se snažíte přihlásit napište.

tail -f /var/log/auth.log

Dost možná se dozvíte, že problém je něco takového:

Jan  3 11:42:57 astP2 sshd[11846]: Authentication refused: bad ownership or modes for file /root/.ssh/authorized_keys

Pokud svůj domácí počítač uspím (suspend to ram) a pak po probuzení v konzoli stačí jen zmáčknout šipku nahoru (minulý příkaz) a enter a jsem opět nalogován. Nicméně musím poměrně dlouho čekat, než stávající spojení vytimeoutuje. To mohu zkrátit na 10 vteřin, pokud přidám do soubor /etc/ssh/ssh_config řádek ConnectTimeout 10 . (nějak mě to ale nezafungovalo, takž možná je něco špatně)

 
stranky_uzivatelu_4smart/ssh_keygen_keychain.txt · Poslední úprava: 2015/08/20 16:10 autor: misa