4.2. SSH: bezpečná práce v síti

V dnešní době, kdy je více a více počítačů instalovaných do prostředí sítě, je často nezbytné, aby se k nim dalo vzdáleně přistupovat. Obvykle to znamená, že se uživatel přihlásí – zašle přihlašovací jméno a heslo. Pokud jsou však tyto údaje zasílány přes síť jako prostý text, může se stát, že je cestou někdo odposlechne a získá přístup k účtu uživatele, aniž by o tom oprávněný uživatel věděl. Kromě toho, že útočník takto získá přístup k souborům uživatele, může se dostat i k účtu uživatele root nebo napadat další počítače. V minulosti se přihlašovalo na vzdálené počítače programem telnet, který nenabízí žádné bezpečnostní mechanismy pro utajení přenášených údajů. Podobné chování mají i další často používané programy pro vzdálený přístup, např. ftp.

SSH naproti tomu nabízí ochranu přenášených informací. Šifruje jak přihlašovací údaje (login a heslo), tak i veškerou další komunikaci mezi počítači. Útočník stále může odposlouchávat, ale bez znalosti šifrovacího klíče nemůže získat původní obsah zasílaných dat. SSH tedy umožňuje bezpečně komunikovat se vzdálenými systémy přes nezabezpečenou síť, jako je např. Internet. Sada programů, které se v systému SUSE Linux starají o zabezpečení vzdáleného přístupu, se jmenuje OpenSSH.

4.2.1. Balíček OpenSSH

SUSE Linux instaluje balíček OpenSSH automaticky. Programy ssh, scp a sftp jsou pak dostupné jako alternativa programů telnet, rlogin, rsh, rcp a ftp. Ve výchozím nastavení je síťový přístup k systému možný jen pomocí OpenSSH nástrojů a pouze v případě, že je povolen na firewallu.

4.2.2. Program ssh

Program ssh vám umožní připojovat se na vzdálené stroje a interaktivně pracovat. Nahrazuje telnet i rlogin. Program slogin je jen symbolický odkaz na ssh. Například na vzdálený počítač sun se můžete přihlásit pomocí příkazu ssh sun. Vzdálený systém vás požádá o heslo (které máte nastavené na vzdáleném počítači sun).

Po úspěšném přihlášení můžete pracovat s příkazovým řádkem na vzdáleném stroji, nebo spouštět interaktivní aplikace, např. YaST. Pokud máte na vzdáleném počítači nastavené jiné přihlašovací jméno než na lokálním počítači, můžete se přihlásit s použitím jiného přihlašovacího jména příkazem ssh -l augustynka sun nebo ssh augustynka@sun.

Navíc můžete pomocí ssh spouštět příkazy na vzdáleném systému, stejně jako s programem rsh. Na následujícím příkladě si ukážeme, jak spustit příkaz uptime na počítači sun, a jak vytvořit adresář se jménem tmp. Výstup programů se zobrazí na terminálu lokálního počítače earth.

ssh slunce "uptime; mkdir tmp"
tux@slunce's password:
1:21pm  up  2:17,  9 users,  load average: 0.15, 0.04, 0.02

Uvozovky jsou nezbytné, aby byly obě instrukce zaslány jedním příkazem. Jen tak se druhý příkaz spustí na počítači sun.

4.2.3. Bezpečné kopírování pomocí scp

Program scp kopíruje soubory na vzdálený počítač. Je to bezpečná a šifrovaná náhrada za program rcp. Například příkaz scp dopis.tex sun: zkopíruje soubor dopis.tex z aktuálního adresáře lokálního počítače earth na počítač sun. Pokud máte na počítači sun jiné uživatelské jméno než na počítači earth, zadejte uživatelské jméno pro vzdálený počítač ve formátu username@host. Pro tento příkaz neexistuje volba -l.

Po zadání správného hesla začne scp přenášet soubor a zobrazuje při tom stav přenosu jako rostoucí řadu hvězdiček. Navíc zobrazuje i odhadovaný čas trvání přenosu. Tyto výstupy můžete vypnout použitím parametru -q.

Program scp také zvládá rekursivní kopírování celých adresářů. Příkaz scp -r src/ sun:backup/ zkopíruje obsah adresáře src/ včetně jeho podadresářů do adresáře backup/ na počítači sun. Pokud tento adresář neexistuje, scp ho automaticky vytvoří.

Parametrem -p řeknete scp, aby neměnil časové údaje u souborů. Volba -C zapne kompresi dat při přenosu, takže sníží velikost přenášených dat (zvýší se tím ale zatížení procesoru).

4.2.4. Bezpečný přenos souborů pomocí sftp

Program sftp lze použít místo scp pro bezpečný přenos souborů. Během sftp relace můžete používat některé z příkazů známých z ftp. Program sftp se hodí hlavně pro situace, kdy předem neznáte názvy souborů na vzdáleném počítači.

4.2.5. SSH démon (sshd) – strana serveru

Pro práci s SSH klienty ssh a scp musí v pozadí běžet SSH server (démon) naslouchající na TCP/IP portu 22. Démon při prvním spuštění generuje tři páry klíčů. Každý pár sestává ze soukromého a veřejného klíče. Proto se jedná o tzv. proceduru založenou na veřejném klíči. Aby byla zaručena bezpečnost komunikace pomocí SSH, musí mít přístup k soukromému klíči pouze administrátor systému. Ve standardní instalaci jsou přístupová práva k souborům podle toho nastavena. Soukromé klíče jsou potřebné pouze lokálně pro démona SSH a nesmíte je nikomu poskytnout. Veřejné části klíče (soubory s příponovou .pub) jsou zasílány klientům požadujícím spojení; mohou je číst všichni uživatelé.

Spojení je vždy iniciováno klientem. Čekající démon si s klientem nejdříve vymění identifikační data (zjistí jakou verzi protokolu, případně jaký program a port, používá protější strana). Protože na požadavek odpovídá potomek hlavního procesu démona SSH, může současně běžet více různých SSH spojení.

Pro komunikaci mezi serverem a klientem podporuje program OpenSSH verzi 1 i 2 protokolu SSH. Nově instalovaný systém SUSE Linux používá standardně verzi 2. Pokud chcete u staršího systému po aktualizaci i nadále používat verzi 1, držte se instrukcí popsaných v souboru /usr/share/doc/packages/openssh/README.SuSE. V tomto dokumentu také najdete informace o tom, jak v několika krocích přejít z prostředí verze SSH 1 na verzi SSH 2.

Pokud používáte SSH verze 1, zasílá server svůj veřejný klíč stroje a klíč serveru, který je SSH démonem znovu vytvářen každou hodinu. Oba umožňují SSH klientovi zašifrovat libovolně zvolený klíč relace, který je zaslán SSH serveru. SSH klient také serveru oznámí, jaký šifrovací algoritmus používá.

Verze 2 protokolu SSH nevyžaduje klíč serveru. Obě strany používají pro výměnu klíčů algoritmus Diffie-Helman.

Pokud chcete rozšifrovat klíč relace, musíte znát soukromý klíč stroje i serveru, které nelze odvodit z veřejných klíčů. Pouze kontaktovaný SSH démon může rozšifrovat klíč relace pomocí svých soukromých klíčů (více viz man /usr/share/doc/packages/openssh/RFC.nroff). Počáteční fázi relace můžete podrobně sledovat, pokud zapnete u klienta SSH tzv. "užvaněný" režim volbou -v.

Výchozí je verze 2 SSH protokolu. Verzi 1 můžete vynutit přepínačem -1. Klient si po prvním kontaktu se serverem ukládá jeho veřejný klíč stroje do souboru ~/.ssh/known_hosts. Tak se zabrání útokům cizích serverů s falešnými jmény a IP adresami (tzv. "man-in-the-middle" útok). Takový útok je odhalen buď díky klíči stroje nepřítomnému v ~/.ssh/known_hosts nebo díky neschopnosti serveru rozšifrovat klíč relace kvůli tomu, že nemá odpovídající soukromé klíče.

Doporučujeme vám zálohovat na bezpečné místo veřejný i soukromý klíč (uloženy jsou v /etc/ssh/). Můžete tak odhalit manipulace s klíči, a pokud budete muset reinstalovat systém, můžete opět použít staré klíče. Tak ušetříte uživatele znepokojivých varování o změně klíče. Pokud se v případě varování o změně klíče ověří, že se skutečně jedná o správný SSH server, musí uživatel odstranit existující záznam o tomto serveru ze souboru ~/.ssh/known_hosts.

4.2.6. Mechanismus ověřování pomocí SSH

Vlastní autentizace, v nejjednodušší formě, sestává z vložení hesla, jak bylo uvedeno výše. Cílem SSH bylo přinést snadno použitelný, ale bezpečný, software. Protože cílem je nahradit rsh a rlogin, SSH musí poskytovat autentizační metodu vhodnou pro každodenní použití. SSH toho dosahuje pomocí dalšího páru klíčů generovaného uživatelem. Balíček SSH k tomuto účelu obsahuje pomocný program ssh-keygen. Příkazem ssh-keygen -t rsa nebo ssh-keygen -t dsa se vygeneruje pár uživatelských klíčů a uživatel je dotázán, do jakého souboru se mají uložit.

Potvrďte standardní název a odpovězte na žádost o zadání hesla. I když vám program navrhne použít prázdné heslo, je lepší zadat netriviální heslo o délce 10 až 30 znaků. Potvrďte zopakováním hesla. Následně se uloží klíče do souborů, v našem příkladě do id_rsa (soukromý) a id_rsa.pub (veřejný) a program zobrazí celou cestu k souborům.

Pro změnu hesla u již vygenerovaných klíčů použijte (podle typu vašeho klíče) příkaz ssh-keygen -p -t rsa nebo ssh-keygen -p -t dsa. Nyní si na vzdáleném počítači, kam se chcete přihlašovat, uložte váš veřejný klíč (id_rsa.pub) do souboru ~/.ssh/authorized_keys. Při přihlášení pak budete dotázáni na heslo ke klíči. Pokud se tak nestane, překontrolujte, zda jste vše správně uložili.

Tato procedura může vypadat složitěji, než samotné přihlašování pomocí přihlašovacího jména a hesla. SSH ale nabízí další nástroj, program ssh-agent, který si pamatuje privátní klíče během sezení. Celé sezení (X session) se musí spustit jako potomek programu ssh-agent. Nejjednodušší cestou je nastavit na začátku konfiguračního souboru .xsession proměnnou usessh na yes a přihlásit se přes KDM nebo XDM. Eventuálně spusťte X Window pomocí příkazu ssh-agent startx.

Nyní můžete používat ssh nebo scp jako obvykle. Pokud jste uložili na vzdálené počítače váš veřejný klíč, nebude po vás systém vyžadovat heslo. Nezapomeňte ale, pokud odejdete od počítače, zamknout váš desktop (např. pomocí xlock).

Veškeré změny SSH protokolu 2 oproti dřívější verzi jsou popsány v souboru /usr/share/doc/packages/openssh/README.SuSE.

4.2.7. X server, ověřování a přeposílací mechanismy

Kromě vylepšení bezpečnostních mechanismů popsaných výše, SSH také zjednodušuje používání vzdálených aplikací pro X server. Jestliže spustíte ssh s parametrem -X, proměnná DISPLAY se na vzdáleném stroji nastaví na hodnotu počítače, odkud se přihlašujete, a veškerý výstup X aplikací bude přeposílán na vzdálený počítač přes existující ssh spojení. Navíc tyto aplikace spuštěné vzdáleně a zobrazované lokálně nemohou být díky přenosu přes ssh odposlechnuty útočníkem.

Pokud při spouštění přidáte parametr -A, bude se ssh-agent autentizační mechanismus přenášet i na stroje, na které se připojíte. Můžete se tedy bez zadávání hesel přihlašovat na další počítače. Stačí abyste všude uložili váš veřejný klíč.

Oba tyto mechanismy jsou standardně vypnuty, ale lze je kdykoliv zapnout v systémovém souboru /etc/ssh/sshd_config nebo v uživatelském souboru ~/.ssh/config.

Program ssh můžete také použít pro přesměrování TCP/IP spojení. V následujícím příkladě SSH přesměruje SMTP a POP3 port:

ssh -L 25:sun:25 earth

Tedy každé SMTP spojení, které půjde na port 25 (SMTP) počítače earth, je přes šifrovaný kanál přesměrováno na SMTP port počítače sun. To se může hodit, pokud nepoužíváte SMTP server s funkcemi SMTP-AUTH nebo POP-before-SMTP. Z jakéhokoliv místa připojeného k síti lze veškerý poštovní provoz přesměrovat na hlavní poštovní server. Stejně tak lze přesměrovat POP3 spojení (port 110) z počítače earth na počítač sun pomocí příkazu:

ssh -L 110:sun:110 earth

Oba dva příkazy musíte spustit jako superuživatel root, protože jde o přesměrování privilegovaných portů. Elektronická pošta je normálními uživateli odesílána a přijímána pomocí existujícího SSH spojení. SMTP a POP3 host musí být nastaven na localhost. Další informace naleznete v manuálových stránkách k jednotlivým programům a v adresáři /usr/share/doc/packages/openssh.