Linux E X P R E S

Facebook

Domácí počítačová síť - 6

sit.png

Naposledy jsme si nainstalovali základ funkčního systému. V dnešním díle si řekneme něco málo o balíčkovacím systému Debianu. Naučíme se balíček najít, zobrazit si o něm podrobné informace a následně ho i nainstalujeme. Ukážeme si, jak se dostat na počítač přes protokol SSH a jak ho alespoň částečně „zabezpečit“.


K čemu je balíčkovací systém

Balíčkovací systém slouží ke správě nainstalovaného softwaru. Pomocí patřičných balíčků můžete sestavit jednotlivé funkční části systému, přidávat do něj programy, odebírat je nebo aktualizovat. Díky balíčkovacímu systému už nikdy nebudete muset sledovat nové verze, bezpečnostní aktualizace či závislosti pro program, který právě používáte. Zdá se vám to tak trochu jako sci-fi? Pak se mýlíte...

V operačním systému Debian GNU/Linux existuje několik nástrojů pro práci s balíčky. Povídání o nich by jistě vydalo na několik knih, a já se proto zaměřím na svůj nejoblíbenější program – apt-get. Program apt-get je schopný stáhnout a nainstalovat (případně i odinstalovat) kterýkoliv z 15 000 distribučních balíčků. Aby tak mohl učinit, musíte mu nejdříve říct, kde má balíčky vyhledávat. To se provádí v souboru se zdroji, který najdeme v adresáři /etc/apt/ pod jménem sources.list. Jeho výpis v naší instalaci vypadá následovně:

deb ftp://ftp.cz.debian.org/debian/ stable main
deb-src ftp://ftp.cz.debian.org/debian/ stable main
deb http://security.debian.org/ stable/updates main

První slovo na řádku označuje typ archivu. Jedná-li se o řetězec „deb“, pak jsou jednotlivé balíčky v daném seznamu zdrojů již zkompilované (v binární podobě). V opačném případě se jedná o řetězec „deb-src“, který značí, že se jedná o balíčky s původním zdrojovým kódem. V tomto balíčku jsou navíc ještě dva soubory, které balíčkovacímu systému říkají, které změny je potřeba provést ke správnému přeložení a začlenění do systému. Ihned za řetězcem deb nebo deb-src následuje adresa zdroje. Program apt si umí poradit s mnoha systémy, a tak adresa zdroje může být použita například s protokolem HTTP, FTP, ISO nebo SSH. Poslední dvě sekce určují distribuci a komponenty. U distribucí můžeme vybírat ze stable, testing nebo unstable, u komponent pak například z main, contrib nebo non-free.

SSH neboli Secure Shell je klient/server protokol v síti TCP/IP, který umožňuje bezpečnou komunikaci mezi dvěma počítači pomocí transparentního šifrování přenášených dat. Pracuje na portu TCP/22. Pokrývá tři základní oblasti bezpečné komunikace: autentizaci obou účastníků komunikace, šifrování přenášených dat a integritu dat.

Protokol vyvinul v roce 1995 Tatu Ylönen. SSH je ve počítačové terminologii používán jako název přenosového (síťového) protokolu i jako název programu zprostředkovávající spojení. Data jsou přenášena mezi dvěma počítači přes nebezpečnou vnější síť vždy šifrovaně a volitelně s použitou kompresí.

Aby se balíčkovací systém nemusel neustále dotazovat na zdroje balíčků, uchovává si o nich informace lokálně na jiném místě. Synchronizaci těchto dvou míst pak můžeme udělat pomocí příkazu apt-get update . Následně lze provádět jakékoliv další operace s balíčky – například je zaktualizovat pomocí příkazu apt-get upgrade . Pokud bychom chtěli zaktualizovat celou distribuci na zcela jinou verzi (uvedenou v souboru /etc/apt/sources.lists), zadali bychom příkaz apt-get dist-upgrade .

Obrázek:  1.jpg

Upgrade systému

Instalujeme

Zaktualizovat systém už umíme, teď je ještě potřeba říct, jak do distribuce nějaký balíček vůbec dostat. Pokud neznáme přesný název balíčku s naším vytouženým programem, můžeme si pomoct díky funkci apt-cache search. Já bych chtěl do našeho nového systému nainstalovat OpenSSH démon (abychom mohli server spravovat vzdáleně), bohužel neznám přesný název balíčku, ve kterém je uložen. Do konzole tedy zadám apt-cache search OpenSSH . Výsledek bude:

keychain - key manager for OpenSSH
lg-issue67 - Issue 67 of the Linux Gazette.
libssl0.9.6 - SSL shared libraries (old version)
libssl0.9.7 - SSL shared libraries
putty-tools - command-line tools for SSH, SCP, and SFTP
secpanel - A graphical user interface for SSH and SCP
ssh - Secure rlogin/rsh/rcp replacement (OpenSSH)
ssh-askpass - under X, asks user for a passphrase for ssh-add
ssh-krb5 - Secure rlogin/rsh/rcp replacement (OpenSSH with Kerberos)

Je jasné, že balík s programem se jmenuje ssh. Já jsem ale nevěřící Milan, a tak si to pro jistotu ještě ověřím pomocí příkazu apt-cache show ssh :

...
Description: Secure rlogin/rsh/rcp replacement (OpenSSH)
This is the portable version of OpenSSH, a free implementation of
the Secure Shell protocol as specified by the IETF secsh working
group.
Ssh (Secure Shell) is a program for logging into a remote machine
and for executing commands on a remote machine.
It provides secure encrypted communications between two untrusted
hosts over an insecure network.  X11 connections and arbitrary TCP/IP
ports can also be forwarded over the secure channel.
It is intended as a replacement for rlogin, rsh and rcp, and can be
used to provide applications with a secure communication channel.
This package provides both the ssh client and the sshd server.
...
In some countries it may be illegal to use any encryption at all
without a special permit.

Označení „Secure Shell“ je mírně zavádějící, protože nejde ve skutečnosti o shell ve smyslu interpret příkazů. Název byl odvozen z existujícího programu rsh, který má podobné funkce, ale není zabezpečený. Zdroj Wikipedie

Je jasné, že jde opravdu o OpenSSH démon. Nyní ho tedy můžeme nainstalovat pomocí příkazu apt-get install ssh . Balíčkovací systém si následně automaticky načte databázi balíčků, vytvoří strom závislostí k ssh a nainstaluje ho. V případě, že je potřeba v balíku ještě něco donastavit, zobrazí přesný popis nastavení a patřičné volby (ano/ne). My vše potvrdíme stiskem klávesy [Enter] na položce Ano. Jakmile z terminálu zmizí poslední menu a ukáže se opět login, máme nainstalováno.

OpenSSH – Kdo chce kam...

Protože síťové servery bývají obvykle umístěny někde daleko v serverovnách, případně „zahrabány“ doma pod stolem, používáme pro přístup do nich takzvanou „vzdálenou administraci“. Na valné většině linuxových serverů najdete jednu z implementací protokolu SSH. Osobně se mi osvědčil OpenSSH server, který je převzat z BSD. Jedná se o velmi dobře odladěný SSH server s mnoha možnostmi konfigurace a nadstandardními funkcemi. Pokud OpenSSH stále nemáte nainstalovaný, učiňte tak příkazem apt-get install ssh . Instalační program se vás dotáže, zda-li má být spouštěn s nastaveným SUID bitem, což potvrdíme stiskem klávesy [Enter]. Dále se nás bude dotazovat, zda-li má běžet samostatně, nebo být spouštěn z démonu inetd. Osobně dávám přednost, když běží SSH server samostatně, ale ani vybráním druhé položky nic nezkazíte. Inetd je démon, který se stará o některé servery, jako je například FTP, NTP, SMTP a zastřešuje je pod sebe.

Třetí nabídka se týká volby protokolu. Na výběr máme protokol verze 1, nebo verze 2. Zvolíme verzi 2, neboť je bezpečnější. Po dokončení instalace se sever automaticky spustí a připraví si své „prostředí“. Od této chvíle se na svůj linuxový server můžeme přihlásit. Z Linuxu tak učiníte zadáním ssh uzivatel@pocitac , z OS Windows pak pomocí programu putty.

Můj testovací router má IP adresu 192.168.1.2. Jestliže bych se chtěl přihlásit jako root, zadal bych ssh root@192.168.1.2 a stiskl [Enter]. Odpovědí serveru by bylo něco takového:

The authenticity of host '192.168.1.2 (192.168.1.2)' can't be established.
RSA key fingerprint is 58:e3:00:c3:6d:13:b7:98:fe:13:be:34:5a:75:d8:d0.
Are you sure you want to continue connecting (yes/no)?

RSA (iniciály autorů Rivest, Shamir, Adleman) je šifra s veřejným klíčem, jedná se o první algoritmus, který je vhodný jak pro podepisování, tak šifrování. Bezpečnost RSA je postavena na předpokladu, že rozložit číslo na součin prvočísel (faktorizace) je velmi obtížná úloha. Z čísla n = pq je tedy v rozumném čase prakticky nemožné zjistit činitele p a q. Zdroj Wikipedia

V prvním kroku nám systém říká, že nemá „otisk“ protistrany, a tak nemůže spojení ověřit. Při prvním přihlášení tuto hlášku můžete potvrdit napsáním „yes“. Počítač si otisk uloží do své databáze a bude si ho pamatovat. V dalším kroku budete muset zadat své heslo. Pokud vše proběhlo správně, SSH vás přihlásí k serveru. V případě, že by se hláška „The authenticity of host '192.168.1.2 (192.168.1.2)' can't be established.“ někdy v budoucnu objevila znovu, je 100% jasné, že se nehlásíte na stroj, který jste chtěli (někdo ho vyměnil za jiný), nebo se mezitím změnily klíče. Na tyto situace si dávejte opravdu pozor a vždy zkoumejte, co bylo příčinou změny klíče.

A zase ta bezpečnost

Pomocí SSH se do systému nemusíte dostat pouze vy, ale také cizí útočníci. Z tohoto důvodu se provádí řada opatření. Jedním z nejjednodušších je změna portu, na kterém SSH démon naslouchá. Přihlaste se proto na server s uživatelskými právy root. Následně můžete zeditovat hlavní konfigurační soubor SSH démonu, který se nachází v adresáři /etc/ssh pod jménem sshd_config. Pro editaci používám editor vi, který je v defaultní instalaci. Pokud vám tento editor nevyhovuje (z editoru se vyskočí pomoci znaku :q! [Enter]), můžete si nainstalovat například prohlížeč souborů Midnight Commander (apt-get install mc), který má editor mcedit ve stylu Norton Commanderu. Důležité položky v konfiguračním souboru pro nás jsou:

ListenAddress 192.168.1.2
Port 2200
PermitRootLogin no

Položka ListenAdress udává, na kterých IP adresách démon naslouchá. Pakliže máte více ethernetových rozhraní (více IP adres), nadefinujte zde pouze rozhraní (IP adresy), přes které přistupujete. V opačném případě stačí řádek zakomentovat znakem #. Analogicky to samé platí pro položku Port. Standardně běží SSH server na portu 22, kde ho také hledá a zkouší prolomit spousta automatických robotů. Jednoduchým řešením je přesměrovat démona na jiný volný port. Poslední položkou, která stojí za povšimnutí, je položka PermiRootLogin. Jestliže je její hodnota nastavena na NO, nelze se přímo přihlásit na root účet. Je potřeba se nejprve přihlásit na účet s nižšími právy a z něj se pomocí programu su přepnout. Jedná se o další obranný mechanismus. V tomto případě by útočník musel prolomit dvě hesla za sebou.

Zcela odlišná situace nastává, pokud se potřebujete na server dostat bez hesla. Pro tyto účely se dříve používal soubor .rhosts (dnes je to považováno za zásadní bezpečnostní riziko). My použijeme přihlášení na základě ověřených klíčů. Jejich vytvoření je otázka chvilky.

V první řadě příkazem mssh-keygen -t rsa vytvoříme na našem počítači takzvaný keypair. Zde budeme dotazováni na cestu ke klíčům a keyphrasse – obojí pouze potvrdíme klávesou [Enter]. Následně svoje klíče nahrajeme na server, na který chceme přistupovat. Nejjednodušší metoda, jak toho docílit, je pomocí příkazu

ssh-copy-id -i ~/.ssh/id_rsa.pub uzivatel@pocitac

Nesmíte ovšem zapomenout změnit přihlašovací údaje uzivatel@pocitac za správné (v mém případě root@gateway_hodza_net). Po vyplnění hesla se zkopírují klíče na správné místo a upraví se jednotlivá práva k souborům. Při dalším přihlášení již po nás server nebude heslo vyžadovat.

Existuje ještě celá řada způsobů, jak SSH útokům zabránit. Mezi ně patří například speciální PAM moduly či různé skripty, které po překročení maximálního počtu pokusů blokují útočníka. Občas lze na serverech vidět portknocking nebo také blokovací pravidla v souboru /etc/hosts.deny.

Pluggable Authentication Modules neboli PAM je mechanismus pro integraci více nízkoúrovňových autentizačních schémat do API, což umožňuje programům opírajícím se o autentizaci uložit uživatelské údaje nezávisle na použitém mechanismu přihlášení. PAM byl poprvé vyvinut v roce 1996 firmou Sun Microsystems, později se stal standardním modulem UNIX/Linux systémů. V současné době je podporováno na AIX, HP-UX, Solaris, Linux, FreeBSD, Mac OS X a NetBSD. Zdroj Wikipedie

PortKnocking (nebo-li klepání na porty) je metoda autentizace založená na otevření určitého portu na firewallu k povolení síťového provozu zasláním předem domluvené posloupnosti paketů. Po obdržení této sekvence paketů firewall dynamicky upraví svá filtrovací pravidla tak, aby povolil komunikaci se vzdáleným uzlem v síti.

Dnešní díl rozhodně nechci brát jako vyčerpávající návod k balíčkovacímu systému Debian, spíše bych to nazval velmi lehkým úvodem. Také o OpenSSH bych se rád v dalších dílech rozepsal (převážně do oblasti tunelování síťového provozu, kde jdou s tímto programem dělat takříkajíc „psí kusy“). Prozatím je to vše – příště si povíme něco o firewallech.

Diskuze (1) Nahoru