Secure shell (SSH), vzdálené připojení
Secure shell je systém pro interaktivní (login) i neinteraktivní (vzdálené
spouštění procesů) připojování ke vzdáleným
počítačům. Slouží jako náhrada programů telnet, rlogin a rsh. Navíc poskytuje plně
zabezpečenou komunikaci mezi počítači přes potenciálně nebezpečnou síť. Také
umožňuje zabezpečení X11 spojení aplikací X-Windows (X-tunel)
i libovolných jiných TCP/IP spojení.
Secure shell (SSH) pracuje na principu klient-server. Serverovou část zajišťuje
neustále běžící démon sshd, klientem je program ssh.
Součástí instalace systému SSH je také program scp, který využívá SSH
spojení ke vzdálenému kopírování souborů s využitím všech
bezpečnostních principů SSH.
SSH ke své činnosti používá šifrovací metodu s asymetrickým šifrovacím klíčem - tzn. že k zašifrování zprávy je třeba jiná informace (šifrovací klíč) než ke zpětnému dešifrování (dešifrovací klíč). Dále platí, že ze znalosti šifrovacího klíče nelze snadno určit dešifrovací klíč. Šifrovací klíč se obvykle označuje jako veřejný, zatímco dešifrovací se nazývá privátní. Veřejný klíč, na rozdíl od privátního, bývá obecně veřejně přístupný, sdílen po síti a není předmětem tajemství. Nesymetrické šifrování se používá ke dvěma základním účelům:
Asymetrické šifry se v SSH většinou nepoužívají přímo k přenosu dat, ale slouží jednak k ověření identity a jednak k tomu aby si oba počítače bezpečně vyměnily šifrovací klíče "obyčejné", tj. symetrické šifrovací metody, kterou budou používat pro šifrování dat. Dohodnutý klíč je většinou hodně dlouhý, symetrická šifrovací metoda je výpočetně rychlá a bezpečná. Oba počítače si dokáží bezpečně dohodnout klíč symetrické šifry, ikdyž o sobě nic nevědí a neustále je někdo odposlouchává. Problém by mohl způsobit jen útočník, který jejich vzájemnou komunikaci průběžně pozměňuje. Takový útok lze detekovat jen pomocí asymetrické šifrovací metody a jen v tom případě, pokud oba počítače vzájemně znají své veřejné šifrovací klíče. Autentizace:
Po připojení na vzdálený počítač pomocí SSH si oba komunikující procesy nejprve dohodnou společnou šifrovací metodu, pomocí asymetrických klíčů si vymění pracovní symetrické klíče a těmi pak zašifrují veškerou další komunikaci.
V této fázi porovnává klient veřejný klíč serveru s jemu známou databází veřejných klíčů (soubor ~/.ssh/known_hosts) a tím ověřuje identitu serveru - vyloučí možnost, že se za server vydává někdo jiný.
Následně server ověřuje totožnost přihlašovaného uživatele. K dispozici má několik způsobů ověření, nejčastěji se používá RSA klíč uživatele nebo uživatelské heslo.
Pokud má uživatel (klient) svůj vlastní pár (veřejný+privátní) klíčů (tj. privátní ~/.ssh/id_rsa a veřejný ~/.ssh/id_rsa.pub) a takto označený uživatel je pro server nastaven jako důvěryhodný (tím, že tento veřejný klíč byl zkopírován na server do souboru ~/.ssh/authorized_keys), pak server použije uložený klíč k ověření, že jde skutečně o daného důvěryhodného uživatele a přístup okamžitě povolí.
Pokud nelze ověřit totožnost uživatele klíčem, ani jiným způsobem (viz man ssh), zeptá se server na heslo, podobně jako to dělá program telnet, jen s tím rozdílem, že heslo nikdy necestuje sítí nezašifrované, neboť server s klientem již tou dobou komunikují zašifrovaným kanálem.
Generování klíčového páru (ať už pro počítač či pro uživatele) se provádí utilitou ssh-keygen, která uloží privátní klíč do souboru ~/.ssh/id_dsa a veřejný klíč do souboru ~/.ssh/id_dsa.pub v uživatelově domovském adresáři. K dosažení bezpečnosti je třeba vždy dodržet ochranu privátního klíče, tak aby nebyl přístupný cizím osobám/uživatelům ani důvěryhodným administrátorům jiných serverů. Novější verze 2 SSH umí použít nejen asymetrickou šifrovací metodu RSA jako verze 1, ale volitelně i další metody (DSA).
Jak "připravit" SSH pro RSA autentizaci
Uživatel nejprve zvolí šifrovací metodu (dopor. DSA) a na svém klientském
počítači pomocí programu ssh-keygen -t dsa
vytvoří pár klíčů.
$ ssh-keygen -t dsaTento příkaz vygeneruje klíčový pár o délce 1024 bitů. Délka klíče se pro program ssh-keygen definuje přepínačem -b. Minimální délka je stanovena na 512 bitů, za bezpečnou se dnes považuje délka minimálně 1024 bitů.
Poté je potřeba veřejnou část (~/.ssh/id_dsa.pub) přenést na server, např. pomocí SSH s ručním zadáním hesla. Obsah souboru (jediná dlouhá řádka) se přidá na konec souboru ~/.ssh/authorized_keys v domovském adresáři uživatele na serveru. Pozor, soubory v .ssh adresáři musí mít taková práva, aby je nebylo možné zneužít.
client$ scp .ssh/id_dsa.pub server:mujklic.pub password: zadá heslo client$ ssh server password: zadá heslo server$ cat mujklic.pub >> .ssh/authorized_keys server$ exit client$ ssh server # test přístupu bez hesla server$ # podařilo se...
Úkol 1:
Na vašem hostitelském počítači si vytvořte si vlastní pár šifrovacích klíčů.
Přeneste veřejný klíč na virtuální počítač FC4 a přidejte na konec souboru
/root/.ssh/authorized_keys
.
Ověřte, zda je možné se přihlašet bez hesla jako uživatel root.
Úkol 2:
Vytvořte jiný pár klíčů na virtuálním stroji. Přeneste klíče na hostitelský
počítač a vložte na konec souboru Úkol 3:
Zjistěte, zda-li se můžete přihlašet bez dalšího nastavování
z vašeho virtuálního stroje bez zadání hesla na počítač sunray1. Výsledek
promyslete a zdůvodněte!
Úkol 4:
Povolte RSA přihlašování z vašeho hostitelského počítače zpět na váš hostitelský
počítač. Mezi jakou skupinou počítačů je nyní možné se vzájemně hlásit bez
hesla?
Tunelování protokolu X11 Úkol 5:
Spusťte grafický program Úkol 6:
Připojte se postupně na počítač sunray1 a z něho na sunray2. Předávání
X-protokolu lze řetězit. Nyní, grafická aplikace (dtpad) spuštěná na
počítači sunray2 předává žádosti o grafické vykreslování skrz druhé SSH
spojení na počítač surnay1, kde se žádosti dešifrují, aby se hned zase
zašifrovaly a prvním SSH kanálem se předaly na lokální počítač. Zobrazte si
nastavení proměnných DISPLAY podél celé cesty. Otevřená síťová spojení na
počítačích sunray můžete vypisovat příkazem Tunelování portů Experiment I - zpřístupnění vzdáleného zdroje
Zobecnění: Experiment II - zpřístupnění lokálního zdroje
Zobecnění: Experiment III - využití tunelování ke zpřístupnění
webu Pokud si chcete pro účely experimentování vytvořit stroj se zablokovaným web přístupem, použijte
virtuální stroj FC4, na kterém provedete příkaz~/.ssh/authorized_keys
.
Ověřte, že se můžete přihlašet z virtuálního stroje na váš počítač bez
zadávání hesla.
Pokud při přihlašování na vzdálený počítač použijete přepínač -X, pak SSH
démon na protější straně provede autentizaci a kromě spuštění vašeho login
shellu začne poslouchat na portu 6010 a současně nastaví proměnnou DISPLAY
na hodnotu localhost:10
. Grafické aplikace spuštěné na
vzdáleném počítači pak ke zobrazování svých oken používají X-server s
adresou localhost
a pořadovým číslem 10
.
Jednotlivé X-servery normálně poslouchají na TCP portu 6000 + pořadové číslo
serveru. V tomto případě navazují spojení na otevřený port SSH démona, který
spojení přijme a všechna data transportuje šifrovaným kanálem k lokálnímu
X-serveru, kde se SSH klient chová jako X-klient zobrazující svá okna.
/usr/openwin/demo/xeyes
z počítače
sunray1. Seznam otevřených datových kanálů jdoucích skrz vaše SSH spojení
získáte klávesovou zkratkou ~#
. Všiměte si rozdílu v nastavení
proměnné DISPLAY na lokálním a na vzdáleném počítači.
netstat -n
.
SSH umožňuje provádět tunelování (forwarding) TCP/IP portů. To znamená,
že spojení, které by jinak bylo provedeno nechráněně, je přesměrováno do
zabezpečeného SSH kanálu a na druhé straně SSH serverem předáno na
požadovaný port.
Použijeme techniku forwardování portů k vytvoření bezpečného kanálu mezi
prohlížečem a webovským serverm, který přijímá pouze
požadavky z hostitelského počítače, na kterém běží jeho virtuální stroj.
Pracujte ve dvojicích. Na vzdáleném virtuálním stroji (tj. u vašeho kolegy)
spusťte web server. Z vašeho počítače nemáte přístup na web server
virtuálního stroje vašeho kolegy, protože celý vyrtuální stroj je za
firewallem blokujícím přístup překladem adres.
Web server si zpřístupníte, pokud se na vzdálený hostitelský počítač
přihlásíte příkazem:
ssh -L 8000:10.0.6.1:80 vzdalenePC
Pro každé TCP spojení navazované na váš počítač na port 8000 se vytvoří nový
datový tok šifrovaným kanálem na protější počítač, odkud budou data
pokračovat jako obyčejné TCP spojení na IP adresu 10.0.6.1 port 80, což je
adresa webového serveru na virtuálním stroji vzdáleného počítače.
Pokud ve vašem prohlížeči vypnete proxy a zadáte adresu
http://localhost:8000
, získáte obsah web serveru běžícího na
virtuálním stroji vzdáleného počítače. Ověřte!
$ ssh -L local_port:dest_host:dest_port servername
Příkaz znamená, že veškerá příchozí spojení na lokální port
local_port
jsou bezpečně přenášena na SSH server
servername
a z něho předávána pomocí odchozího TCP spojení
na počítač dest_host
port dest_port
.
Ten samý zdroj (web server) lze zpřístupnit témuž klientovi i tehdy, pokud
se hlásíte SSH spojením jdoucím ze vzdáleného stroje směrem k vám.
Nejprve ukončete SSH spojení s parametrem -L
. Váš
spolupracující kolega pak provede přihlášení z jeho počítače na váš počítač,
příkazem:
ssh -R 8000:10.0.6.1:80 vasePC
Váš web prohlížeč by měl opět fungovat.
$ ssh -R remote_port:dest_host:dest_port servername
Příkaz znamená, že veškerá příchozí spojení na port
remote_port
vzdáleného počítače servername
jsou bezpečně přenášena na SSH klienta
a z něho předávána pomocí odchozího TCP spojení
na počítač dest_host
port dest_port
.
Pokud jste na síti, kde nemáte přístup na web, ale můžete navázat SSH
spojení na školní počítače, můžete si web zpřístupnit příkazem:
ssh -L 3128:147.32.80.9:80 sunray1
Ve vašem prohlížeči si pak nastavíte server PROXY na adresu
localhost
port 3128
. Zdůvodněte, proč lze pak
prohlížeč použít bez jakéhokoli omezení.
iptables -I OUTPUT
-p tcp --dport 80 -j REJECT
který zablokuje odchozí web spojení.
SSH port forwarding zákaz obejde.