přejít na obsah přejít na navigaci

Linux E X P R E S, SSH receptem na bezpečnost 1

SSH receptem na bezpečnost 1

Počítačové sítě, které jsou založeny na IP (Internet Protocol), neobsahují žádné zabezpečení přenosu. Kdokoliv může odposlouchávat nebo dokonce modifikovat vaše data. Možná si řeknete, že neposíláte žádná důvěrné informace, ale pouhé přihlášení znamená, že se sítí přenáší vaše heslo v prostém textovém tvaru. A heslo je důvěrná informace.


V dávných dobách, kdy byly v síti pouze relativně malé skupiny účastníků, se zabezpečení nikterak neřešilo. Uživatelé a administrátoři používali pro vzdálené připojení nezabezpečené nástroje typu telnet, rsh, ftp nebo rcp. Způsobů, jak řešit zabezpečení přenosu i autentizace, je mnoho, ale právě SSH je známé jako velice flexibilní a hlavně jednoduše nasaditelný nástroj, který nepotřebuje rozsáhlou podporu v infrastruktuře.

Co je to SSH

SSH neboli Secure Shell mate lidi svým názvem, který byl zvolen podle svého "nebezpečného" předchůdce, programu rsh (remote shell). Ve skutečnosti žádný shell neposkytuje, to je záležitost hostitelského operačního systému. SSH dělá pouze jedinou věc a dělá ji velice dobře, vytváří transparentně šifrovaný komunikační kanál mezi dvěma místy v síti. Díky transparentnímu šifrování se programy, které komunikují přes zabezpečenou linku, nemusí o přítomnost SSH, anebo nějaké další zabezpečení, starat.

K čemu se dá použít

  • vzdálené přihlášení - můžete se bezpečně přihlásit ke vzdálenému systému;
  • přenos souborů - bezpečný způsob přenosu souborů přes síť programy sftp a scp;
  • spouštění příkazů na vzdálených počítačích - útočník nezjistí, jaké programy spouštíme a jaký je jejich výstup;
  • směrování portů - snadné zabezpečení nešifrovaného přenosu, včetně směrování protokolu X11.

Vzdálené přihlášení k terminálu

Pravděpodobně nejznámější použití, kdy se díky SSH přihlásíme na svůj uživatelský účet na vzdáleném počítači. Použití je velice jednoduché.

michal@localhost ~$ uname
Linux
michal@localhost ~$ ssh uzivatel@server_domena_com
uzivatel@server_domena_com's password:
Last login: Mon Mar 27 12:57:54 2006 from gateway.isp.com
uzivatel@server:~$ uname
FreeBSD

V tomto příkladu jsem se přihlásil ze svého počítače se systémem Linux (s velice nenápaditým názvem localhost) na vzdálený systém, který běží na FreeBSD (s rovněž nenápaditým jménem server). Pokud je náhodou vaše uživatelské jméno na obou strojích stejné, můžete pochopitelně prefix uzivatel@ vynechat.

Jak probíhá komunikace

SSH pracuje na architektuře typu klient/server a pro správné fungování musí být na počítači localhost klient SSH a na počítači server sshd (server SSH). V okamžiku, kdy klient odešle příkaz pro připojení na server, se mezi počítači vytvoří šifrovaný kanál a veškerá komunikace probíhá pouze tímto šifrovaným kanálem. Následuje autentizace uživatele, která zde probíhá pomocí hesla. Klient zadá uživateli výzvu a potom je pošle oním zašifrovaným kanálem serveru, který je ověří a v případě úspěchu povolí přihlášení. Všimněte si, že i samotné heslo je přenášeno šifrovaně, takže je útočník nemůže přečíst, jako v případě rsh.

Identifikace serveru

Předchozí popis byl velice zjednodušený. Už z principu fungování protokolu IP nemůžeme zaručit, že se vždy dostaneme na server.domena.com. Například podvržením odpovědi DNS serveru, který se stará o překlad názvu domény na IP adresu, se můžeme připojit na útočníkův server, kterému pošleme heslo. To, že je šifrované, mu nevadí, protože jeho SSH démon zná klíč a heslo dokáže rozšifrovat. Protokol SSH s takovouto situací počítá a umí jí předejít. Nejen server vyžaduje identifikaci po klientovi, ale i klient vyžaduje po serveru, aby prokázal, že je skutečně tím, za něhož se vydává.

Proto, pokud se přihlašujete k novému serveru poprvé, musíte si dát trochu více práce navíc:

michal@localhost ~$ ssh uzivatel@novy-server_domena_com
The authenticity of host 'novy-server.domena.com (216.132.9.143)' can't be established.
RSA key fingerprint is 35:c4:a1:c6:a1:17:99:4b:c9:08:ac:c1:b6:55:c1:1c.
Are you sure you want to continue connecting (yes/no)? yes
uzivatel@novy-server_domena_com's password:
uzivatel@novy-server:~$

Zde SSH klient vypíše varování o tom, že nemohl ověřit identitu serveru a ptá se vás, zda jej má přidat do seznamu známých hostitelů a vytiskne otisk (fingerprint) jeho klíče. Pokud se k danému serveru připojujete poprvé, můžete na tuto otázku bez obav odpovědět ano (ale paranoidnější z vás si mohou pochopitelně ověřit fingerprint ještě z jiného zdroje). Identifikace se uloží do souboru ~/.ssh/known_hosts.

Pokud se k danému serveru připojujete vícekrát a jeho identifikace se změní, objeví se velmi sugestivní varování:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@       WARNING: POSSIBLE DNS SPOOFING DETECTED!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
The RSA host key for server.domena.com has changed,
and the key for the according IP address 216.132.9.142
is unchanged. This could either mean that
DNS SPOOFING is happening or the IP address for the host
and its host key have changed at the same time.
Offending key for IP in /home/michal/.ssh/known_hosts:10
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
15:ec:62:65:90:1d:40:12:47:08:00:bc:38:db:d6:5a.
Please contact your system administrator.
Add correct host key in /home/michal/.ssh/known_hosts to get rid of this message.
Offending key in /home/michal/.ssh/known_hosts:53
RSA host key for server.domena.com has changed and you have requested strict checking.
Host key verification failed.

To může mít dvě příčiny. Buďto správci přeinstalovali sshd (například z důvodu pádu systému), nebo se vás skutečně někdo pokouší napadnout. Rozhodně byste neměli dané varování podcenit a raději kontaktovat správce systému. Dané hlášení nezmizí do té doby, než provedete ruční úpravu souboru ~/.ssh/known_hosts. V závislosti na nastavení klienta ten buďto odmítne přihlášení, anebo alespoň vypne některé doplňkové funkce SSH (jako například X11 forwarding).

Přenosy souborů

Všichni pravděpodobně známe FTP (File Transfer Protocol), což je starý a poměrně nebezpečný protokol používaný pro přenos souborů. Nebezpečný jak z principu fungování, tak tím, že nešifruje ani data, ani heslo, která prochází volně po síti a nikterak nebrání možnému podstrčení dat útočníkem. Všichni také známe program cp, který se používá ke kopírování dat na počítači. SSH poskytuje bezpečné náhrady obou příkazů, které se nazývají sftp a scp. Funkčně mezi nimi není absolutně žádný rozdíl, pouze prvně jmenovaný se ovládá stejně jako jeho nebezpečný předek ftp a scp zase používá stejnou syntaxi jako program cp.

Příklad použití sftp.
michal@localhost ~$ sftp uzivatel@server_domena_com
Connecting to server.domena.com...
uzivatel@server_domena_com's password:
sftp> ls
Desktop                   Documents                         WWW
mail                      soubor.txt                        squeak
sftp>sftp> GET soubor.txt
Fetching /home/users/uzivatel/soubor.txt to soubor.txt
/home/users/uzivatel/soubor.tx 100%    9     0.0KB/s   00:00
sftp>^D
michal@localhost ~$ cat soubor.txt
Staženo!
Příklad použití scp.
michal@localhost ~$ scp uzivatel@server_domena_com:~/soubor.txt .
uzivatel@server_domena_com's password:
soubor.txt                                  100%    9     0.0KB/s   00:00
michal@localhost ~$ cat soubor.txt
Staženo!

Scp provádí i globbing na vzdáleném systému.

michal@localhost ~$ ls soubor.*
soubor.jpg
michal@localhost ~$ scp uzivatel@server_domena_com:~/soubor.* .
uzivatel@server_domena_com's password:
soubor.txt                                  100%    9     0.0KB/s   00:00
soubor.text                                 100%    9     0.0KB/s   00:00

Spouštění příkazů na vzdálených počítačích

Ne vždy chceme a potřebujeme interaktivní shell. V mnoha případech potřebujeme pouze vzdáleně spustit nějaký příkaz a nechat si zobrazit jeho výstup na lokálním systému. To se hodí pro skripty nebo úlohy spouštěné z cronu. Jediným problémem je zadávání hesla, ale to se díky klíčům a programu ssh-agent dá vyřešit (viz dále).

michal@localhost ~$ ssh uzivatel@server_domena_com /usr/bin/w
uzivatel@server_domena_com's password:
21:57:06 up 4 days, 11:54, 48 users,  load average: 0.45, 0.34, 0.23
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
uzivatel pts/6    gateway.isp.com  21:56   43.00s  0.06s  0.06s -ksh
...

Jak samotný příkaz tak jeho výstup jsou bezpečně šifrovány pomocí SSH, takže se k nim potencionální útočník nemůže dostat.

Nahoru

Odkazy

Příspěvky

Re: SSH receptem na bezpečnost 1
13. 12. 2006, 20:21:09
Odpovědět  Odkaz 
Dobrý den, musel jsem reinstalovat router - zamrzl mi hdd. Tím se mi změnil ssh klíč. Pokud se na router chci přihlásit z windows přes winscp tak mi to vytiskne pouze varování o tom, že byl změněn ssh klíč, to odkliknu a jsem tam. Bohudík mám nainstalovanej Linux, ale bohužel nevím, co mám konkrétně editovat v souboru ~/.ssh/known_hosts aby mi to akceptovalo novej klíč. V linuxu se zatím ještě učím a nerad bych to kvůli kravině reinstaloval. Pomůžete mi někdo prosím. Děkuji
Jirka Vrba Re: SSH receptem na bezpečnost 1
baf 13. 12. 2006, 22:26:14
Odpovědět  Odkaz 
Problem bude na strane klienta, tedy windows. Ten si hlida, aby se nekdo nevydaval za ocekavany server. Takze na strane windows je potreba smazat zaznam s IP adresou tveho routeru. Pri dalsim pripojeni si ulozi aktualni.
Milan Kozák Re: SSH receptem na bezpečnost 1
Milan Kozák 14. 12. 2006, 08:16:14
Odpovědět  Odkaz 
V ~/.ssh/known host staci smazat radku, ktera obsahuje IP adresu (domenove jmeno) routeru, na ktery se chces pripojit.

Pokud bych chtel smazat napriklad server radius.fofrnet.cz (195.39.10.10), nasel bych si radek zacinajici "radius.fofrnet.cz,195.39.10.10 ssh-rsa AAAA..." a ten smazal.

Pokud pouzivas editor, ktery zalamuje radky, tak male upozorneni - vetsinou je cely retezec dlouhy na 2 a pul radku.

Jinak doporucuji hesla v SSH uplne vypnout a prihlasovat se pomoci klice. Ten vygenerujes a nahrajes na server velice jednoduchym zpusobem

Vygenerovani klice provedete prikazem <b>ssh-keygen -t dsa</b>

Upload klice na server provedete prikazem: (vse na jednom radku)
<b>cat ~/.ssh/id_dsa.pub | ssh uzivatel@ip_adresa_pocitace "(mkdir .ssh&>/dev/null; chmod 700 .ssh && cat - >> .ssh/authorized_keys )&&chmod 600 .ssh/authorized_keys"
</b>

P.S. Nahradte uzivatel@ip_adresa_pocitace za skutecne udaje napriklad root@195.39.10.10 nebo treba hodza@radius.fofrnet.cz.

Přidat názor

Nejsou podporovány žádné značky, komentáře jsou jen čistě textové. Více o diskuzích a pravidlech najdete v nápovědě.
Diskuzi můžete sledovat pomocí RSS kanálu rss



 
 

Top články z OpenOffice.cz