Jednym z
podstawowych element≤w sieci jest bezpiecze±stwo. Aby je zapewniµ trzeba u┐ywaµ
odpowiednich narzΩdzi. Jednym z nich jest bezpieczny shell, inaczej zwany SSH. W
standardowych dystrybucjach Linuxa nie dostajemy go. Musimy siΩ sami postaraµ aby go
zdobyµ. Postanowi│em opisaµ jedn▒ z implementacji, napisan▒ przez Tatu Ylonen.
Opis dzia│ania
serwera SSH
G│≤wnym elementem serwera SSH jest demon sshd. ZastΩpuje on dwa
programy, kt≤re znajduj▒ siΩ w wiΩkszo╢ci dystrybucji: rlogin i rsh.
S│u┐y do prowadzenia bezpiecznej (kodowanej) komunikacji pomiΩdzy dwoma komputerami w
sieci.
Sssd jest demonem, kt≤ry nas│uchuje na kanale 22 i czeka na po│▒czenia ┐▒dane przez
klient≤w. Uruchamiany jest podczas startu systemu przez plik /etc/rc.local lub z innego,
r≤wnowa┐nego pliku. Uruchamia on osobne demony dla ka┐dego z po│▒cze±. Ka┐dy z nich
ma oddzielne dane dotycz▒ce kodowania, autoryzacji wykonywanych komend i plik≤w.
Sshd dzia│a tak jak opiszΩ poni┐ej. Ka┐dy z host≤w (komputer≤w) posiada sw≤j klucz
(host RSA key). Domy╢lnie ma on wielko╢µ 1024 bity. Jest on u┐ywany do identyfikacji
komputer≤w w sieci. W dodatku, kiedy serwer startuje, generuje sw≤j prywatny klucz
(server RSA key), maj▒cy wielko╢µ 768 bit≤w. Standardowo, je┐eli zostanie on u┐yty ,
to jest generowany po up│ywie godziny. Nigdy nie jest zapisywany na dysk.
W momencie kiedy klient po│▒czy siΩ z serwerem SSH, demon wysy│a sw≤j publiczny klucz
i klucz klienta. Klient por≤wnuje klucze ponownie i sprawdza czy nie zosta│y zmienione.
Po tej czynno╢ci generuje on 256 bitowy losowy numer. Koduje t▒ liczbΩ u┐ywaj▒c obu
kluczy (host key i server key) i wysy│a zakodowan▒ liczbΩ do serwera. Obie strony od
tej chwili u┐ywaj▒ tej liczby jako klucz we wszystkich kodowanych transmisji w danej
sesji. Reszta sesji jest kodowana z u┐yciem konwencjonalnych szyfr≤w. Obecnie s▒
zaimplementowane nastΩpuj▒ce algorytmy: IDEA, DES, 3DES, ARCFOUR i TSS. IDEA jest
u┐ywany domy╢lnie. Klient mo┐e wybraµ jednak dowolny z powy┐szych.
Po tych czynno╢ciach, server i klient rozpoczynaj▒ autoryzacjΩ. Klient zidentyfikowaµ
siebie, u┐ywaj▒c autoryzacji .rhosts, gdzie autoryzacja .rhosts jest kombinacj▒
czterech innych sposob≤w po╢wiadczania autentyczno╢ci. S▒ to: RSA host authentication,
RSA challenge-response authentication, TIS challenge response authentication lub
standardowy spos≤b wysy│ania has│a.
Autoryzacja rhosts jest normalnie wy│▒czona, poniewa┐ zasadniczo nie jest ona
bezpieczna, lecz mo┐e byµ w│▒czona przez odpowiedni▒ konfiguracjΩ serwera.
Bezpiecze±stwo serwera nie jest dot▒d pe│ne, dok▒d rshd, rlogind, rexecd i rexd s▒
w│▒czone. Najlepiej wiΩc wy│▒czyµ je wszystkie).
Je┐eli klient przejdzie pomy╢lnie proces autoryzacji uruchamiana jest uruchamiany proces
przygotowywania sesji. Od tej chwili mo┐e on ┐▒daµ takich rzeczy jak: alokacja pseudo
konsoli (pseudo-tty), przekazywania po│▒cze± X11, przekazywania po│▒cze± TCP/IP czy
przekazywania innych informacji przez bezpieczny kana│.
W ko±cu, klient mo┐e za┐▒daµ obs│ugi shella, lub wykonania jakiego╢ polecenia.
Serwer i klient przechodz▒ w≤wczas w tryb pe│nej sesji. W trybie tym, obie strony mog▒
wysy│aµ i odbieraµ przer≤┐ne dane.
Kiedy u┐ytkownik zechce przerwaµ po│▒czenie, to wszystkie przekierowania zostaj▒
zamkniΩte, serwer wysy│a polecenie ko±cz▒ce sesjΩ (exit status) do klienta i obie
strony roz│▒czaj▒ siΩ.
Sshd mo┐e byµ konfigurowany z linii polece± lub za ponoc▒ specjalnego pliku
konfiguracyjnego. Opcje wpisywane z linii polece± zamazuj▒ warto╢ci podawane w pliku
konfiguracyjnym.
Sshd czyta ponownie sw≤j plik konfiguracyjny po wys│aniu do niego sygna│u SIDGHUP.
Sk│adnia polecenia sshd
sshd [-b bity] [-d ] [-f plik_konfiguracyjny]
[-g czas_logowania] [-h plik_host_file]
[-i ] [-k czas_genrecji_klucza] [-p port]
[-q ] [-V wersja]
-b bity
Ustala ilo╢µ bit≤w w kluczu serwera (standardowo 768)
-d
Tryb Debug. Serwer wysy│a rozleg│y raport o dzia│aniu samego siebie do systemowych
log≤w, i nie umieszcza siebie jako procesu pracuj▒cego w tle. Demon w trybie tym nie
dzieli siΩ na poszczeg≤lne procesy i obs│uguje tylko jedno po│▒czenie. Opcja ta
powinna byµ u┐ywana tylko wtedy, gdy zamierzamy debugowaµ nasz serwer.
-f plik_konfiguracyjny
Podaje nazwΩ pliku konfiguracyjnego. Domy╢lnie jest to: /etc/ssh/sshd_config
-g czas_logowania
Podaje jak▒ ilo╢µ czasu ma klient aby przeprowadziµ autoryzacjΩ. Domy╢lnie jest to
600 sekund. Je┐eli klient nie przeprowadzi jej przez zadany czas serwer roz│▒cza siΩ.
Warto╢µ r≤wna zero, wy│▒cza jakiekolwiek limity.
-h plik_host_file
Specyfikuje nazwΩ pliku, z kt≤rego bΩdzie pobierany host key. (Domy╢lnie jest to /etc/ssh/ssh_host_key).
Opcja to musi byµ podana, je┐eli nie uruchamiamy procesu sshd z prawami roota .
(Standardowo pliku tego nie mo┐e odczytaµ nikt inny)
-i
Podaje, ┐e sshd bΩdzie uruchomiany z inetd. Normalnie sshd nie jest uruchamiany w ten
spos≤b, poniewa┐ wymaga to generacji klucza przed odpowiedzi▒ do klienta, co mo┐e
wi▒zaµ siΩ z dziesi▒tkami sekund czekania. Klient m≤g│by czekaµ zbyt d│ugo, gdyby
klucz regenerowany by│ za ka┐dym razem. Mimo to, przy ma│ych kluczach (np. 512 bit≤w),
u┐ywania inetd mo┐e byµ wykonalne.
-k czas_genrecji_klucza
Okre╢la jak czΩsto ma byµ generowany klucz serwera (server key). Domy╢lnie jest to
3600 sekund, czyli jedna godzina. Powodem czΩstszej generacji klucza mo┐e byµ to, ┐e
nie jest on nigdzie trzymany, i po godzinie staje siΩ │atwa do rozkodowania, co mo┐e
prowadziµ do przechwycenia naszej maszyny.
-p port
Okre╢la port, na kt≤rym serwer bΩdzie nas│uchiwa│ (standardowo jest to port nr. 22)
-q
Tryb w kt≤rym ┐adne informacje nie s▒ zapisywane do log≤w systemowych. Normalnie
pocz▒tek po│▒czenia, autoryzacja i roz│▒cznie s▒ zapisywane w logach.
-V wersja
Tryb pracy zgodnej z SSH wersj▒ 2.
Sk│adnia pliku konfiguracyjnego
Sshd odczytuje konfiguracjΩ z /etc/ssh/ssh_config (lub z pliku okre╢lonego w
linii polece±, w opcji -t). Plik ten zawiera pary klucz - warto╢µ. Ka┐da z nich jest
zapisana w jednej linii. Linie puste i zaczynaj▒ce siΩ od znaku '#' s▒ traktowane jako
komentarz i s▒ pomijane.
Poni┐ej znajdziecie listΩ wszystkich dopuszczalnych kluczy. Wielko╢µ liter nie gra w
nich roli:
AllowGroups
Po tej dyrektywie mo┐na wypisaµ dowoln▒ ilo╢µ grup u┐ytkownik≤w i wzorc≤w grup
oddzielonych od siebie spacjami. Je┐eli wpisze siΩ tutaj cokolwiek, to zalogowaµ siΩ
bΩdzie m≤g│ tylko taki u┐ytkownik kt≤rego grupa podstawowa jest zgodna z kt≤rym╢ ze
wzorc≤w. We wzorcach mo┐na stosowaµ znaki * i ?. Znacz▒ one to samo co w systemie
plik≤w. Domy╢lnie wszystkie grupy s▒ uprawnione do logowania.
UWAGA. Aby proces autoryzacji przebieg│ pomy╢lnie inne elementy musz▒ byµ spe│nione.
AllowGroups i DenyGroups s▒ tylko jednymi z opcji.
AllowHosts
Po tej dyrektywie mo┐emy wypisaµ dowoln▒ ilo╢µ numer≤w IP, nazw host≤w i wzorc≤w
oddzielonych spacjami. Wymienione hosty bΩd▒ mog│y logowaµ siΩ na serwerze.
Domy╢lnie wszystkie adresy IP i nazwy host≤w s▒ dopuszczalne.
AccountExpireWarningDays
Okre╢la kiedy zacz▒µ wy╢wietlaµ ostrzegawcze komunikaty o wyga╢niΩciu konta.
Warto╢µ okre╢la ilo╢µ dni przed wyga╢niΩciem wa┐no╢ci. Standardowo jest to 14
dni. Kiedy ustawi siΩ warto╢µ 0, ostrze┐enia s▒ wy│▒czone.
AllowTcpForwarding
Okre╢la, czy 'TCP forwarding' ma byµ u┐ywany. Standardowo opcja to ma warto╢µ 'yes'.
Nale┐y zauwa┐yµ, ┐e wy│▒czenie 'TCP forwarding' , nie wp│ywa w ┐adnym razie na
poprawΩ bezpiecze±stwa. U┐ytkownik mo┐e sam w ka┐dej chwili zainstalowaµ sw≤j
prywatny 'TCP forwarding'
AllowUsers
Klucz ten podaje listΩ u┐ytkownik≤w, kt≤rzy mog▒ logowaµ siΩ na serwer. Mo┐na
tutaj wypisaµ dowoln▒ liczbΩ nazw, wzorc≤w lub wzorc≤w w postaci u┐ytkownik@host,
Hostem mo┐e byµ te┐ dowolny adres IP.
CheckMail
Okre╢la czy sshd ma wy╢wietlaµ informacje, kiedy dostajesz nowego maila.
DenyGroups
Okre╢la grupy kt≤re wykluczaj▒ u┐ywanie sshd. Je┐eli kt≤ry╢ z u┐ytkownik≤w, ma
ustawion▒ jako g│≤wn▒ grupΩ kt≤r▒╢ z wymienionych tutaj, to nie bΩdzie m≤g│
korzystaµ z ssh.
DenyHosts
Lista host≤w z kt≤rych nie mo┐na │▒czyµ siΩ z serwerem ssh.
DenyUsers
U┐ytkownicy wymienieni po tej dyrektywie nie mog▒ korzystaµ z ssh.
FascistLogging
Okre╢la czy u┐ywaµ tzw. 'Rozleg│ego logowania'. 'Rozleg│ego logowania' narusza
prywatno╢µ u┐ytkownik≤w, wiΩc nie jest czΩsto stosowane. Mo┐na tu wpisaµ 'yes' lub
'no'. Domy╢lnie ustawione jest 'no'.
ForcedEmptyPasswdChange
Okre╢la czy wymuszaµ zmianΩ has│a, je┐eli has│o jest puste (tylko w czasie
pierwszego logowania). Mo┐na tu wpisaµ 'yes' lub 'no'. Domy╢lnie ustawione jest 'no'.
ForcedPasswdChange
Okre╢la czy wymuszaµ zmianΩ has│a w wypadku wyga╢niΩcia jego wa┐no╢ci.
Mo┐na tu wpisaµ 'yes' lub 'no'. Domy╢lnie ustawione jest 'yes'.
HostKey
Okre╢la lokalizacjΩ pliku z prywatnym kluczem. Standardowo jest to plik: /etc/ssh/ssh_host_key
IdleTimeout time
Ustawia czas maksymalny czas bezczynno╢ci. Podawana warto╢µ mo┐e byµ w sekundach (s),
minutach (m), godzinach (h), dniach (d) i w tygodniach (w). Je┐eli po│▒czenie bΩdzie
bezczynne przez ten czas proces sshd jest zabijany, a po│▒czenie roz│▒czane.
IgnoreRhosts
Okre╢la, ┐e pliki rhosts i shosts nie bΩd▒ u┐ywane podczas autoryzacji. Pliki /etc/hosts.equiv
i /etc/ssh/shosts.equiv bΩd▒ jednak nadal u┐ywane. Standardowo jest ustawiona
warto╢µ 'no'
IgnoreRootRhosts
Okre╢la, ┐e pliki rhosts i shosts nie bΩd▒ u┐ywane podczas autoryzacji roota.
Domy╢lnie jest tu ustawiona warto╢µ IgnoreRhosts
KeepAlive
Okre╢la czy serwer ma wysy│aµ komunikaty keepalive do klient≤w. Je┐eli kt≤ry╢ z
nich zostanie np. wy│▒czony, to fakt tez zostanie odnotowany. Oznacza to, ┐e w razie
przypadkowych i tymczasowych zator≤w w sieci, klienci mog▒ byµ roz│▒czani. Z drugiej
strony, gdy komunikaty keepalive nie bΩd▒ wysy│ane, mo┐e to spowodowaµ wzrost ilo╢ci
zasob≤w u┐ywanych przez serwer. Domy╢lnie opcja to jest w│▒czona. DziΩki temu
unikamy zawieszenia sesji.
KerberosAuthentication
Okre╢la czy autoryzacja za pomoc▒ Kerberos V5 jest dozwolona. Realizowana jest ona za
pomoc▒ tzw. Bilet≤w Kerberosa lub je┐eli PasswordAuthentication jest ustawione na 'yes'
za pomoc▒ hase│ sprawdzanych przez Kerberos KDC lub DCE Security Server. Domy╢lnie
ustawione jest 'no'
KerberosOrLocalPasswd
Je┐eli autoryzacja za pomoc▒ hasel przy pomocy Kerberos nie powiedzie siΩ, to has│o
bΩdzie sprawdzone w inny dopuszczalny spos≤b taki jak z pliki /etc/passwd czy SedureID.
Domy╢lnie mamy ustawione tutaj 'no'.
KerberosTgtPassing
Okre╢la czy Kerberos V5 TGT ma byµ przekierowywany na ten serwer. Domy╢lnie ustawione
jest 'yes'
KeyRegenerationInterval
Okre╢la jak czΩsto ma byµ generowany klucz serwera (server key). Domy╢lnie jest to
3600 sekund, czyli jedna godzina. Powodem czΩstszej generacji klucza mo┐e byµ to, ┐e
nie jest on nigdzie trzymany, i po godzinie staje siΩ │atwa do rozkodowania, co mo┐e
prowadziµ do przechwycenia naszej maszyny.
ListenAddress
Okre╢la adres IP interfejsu na kt≤rym bΩdzie nas│uchiwa│ sshd.
LoginGraceTime
Serwer roz│▒cza siΩ po podanym tutaj czasie, je┐eli u┐ytkownik nie zalogowa│ siΩ.
Je┐eli podamy tu 0 to nie bΩdzie ┐adnego limitu. Domy╢lnie czas ten ustawiony jest na
600 sekund.
PasswordAuthentication
Okre╢la czy autoryzacja za pomoc▒ has│a jest dopuszczalna. Standardowo jest
dopuszczalna
PasswordExpireWarningDays
Okre╢la ilo╢µ dni przed up│yniΩciem wa┐no╢ci has│a, przy kt≤rych sshd ma
wy╢wietlaµ komunikat to tym fakcie. Standardowo jest to 14 dni. Kiedy ustawi siΩ 0,
u┐ytkownik nie bΩdzie powiadamiany o zbli┐aj▒cym siΩ wyga╢niΩciu has│a.
PermitEmptyPasswords
Gry logowanie przy u┐yciu hase│ jest dozwolone, okre╢la czy bΩdzie mo┐na logowaµ
siΩ gdy posiada siΩ puste has│o. Domy╢lnie jest 'yes'
PermitRootLogin
Okre╢la czy root mo┐e logowaµ siΩ przy u┐yciu ssh. Mo┐na ustawiµ 'yes', 'nopwd' lub
'no'. Standardowo jest 'yes'. 'nopwd' wy│▒cza logowanie dla roota przez podawanie
has│a. 'no' wy│▒cza ca│kowicie mo┐liwo╢µ logowania siΩ roota.
PidFile
Okre╢la po│o┐enie pliku zawieraj▒cego ID procesu g│≤wnego demona sshd. Standardowo
jest to : /etc/sshd.pid lub /var/run/sshd.pid.
Port
Okre╢la numer portu na kt≤rym nas│uchuje sshd. Domy╢lnie jest to port numer 22.
PrintMotd
Okre╢la czy sshd powinien wy╢wietlaµ plik /etc/motd po zalogowaniu siΩ
u┐ytkownika. Standardowo jest ustawiona warto╢µ 'yes'
QuietMode
Tryb w kt≤rym ┐adne informacje nie s▒ zapisywane do log≤w systemowych. Normalnie
pocz▒tek po│▒czenia, autoryzacja i roz│▒cznie s▒ zapisywane w logach.
RandomSeed
Okre╢la po│o┐enie pliku ssh_random_seed. Domy╢lnie jest ustawiony na /etc/ssh/ssh_random_seed
Plik tek jest tworzony i upgradowany automatycznie.
RhostsAuthentication
Okre╢la czy autoryzacja przy pomocy rhosts lub /etc/hosts.equiv jest
wystarczaj▒ca. Normalnie nie powinna byµ wystarczaj▒ca, poniewa┐ nie jest bezpieczna.
Zamiast tej opcji powinno byµ u┐ywane RhostsRSAAuthentication. Domy╢lnie opcja ta ma
warto╢µ 'no'.
RhostsRSAAuthentication
Okre╢la czy rhosts lub /etc/hosts.equiv razem z 'RSA host authentication' jest
dozwolona. Standartowo jest dozwolona.
RSAAuthentication
Okre╢la czy autoryzacja RSAAuthentication jest dopuszczalna. Standartowo jest
dopuszczalna.
ServerKeyBits
Standardowa ilo╢µ bit≤w klucza serwera (server key). Domy╢lnie jest to 768 bit≤w.
Minimalna warto╢µ to 512 bit≤w.
SilentDeny
Okre╢la czy nie dozwolone po│▒czenie maj▒ byµ roz│▒czane bez ┐adnych komunikat≤w
i zapis≤w w plikach log.
StrictModes
Okre╢la czy sshd ma sprawdzaµ prawa dostΩpu to katalogu domowego u┐ytkownika i pliki
rhosts przed jego zalogowaniem. Opcja ta jest po┐▒dana, poniewa┐ mo┐e uchroniµ
nowicjuszy przed przypadkowym zostawieniem kt≤ry╢ plik≤w z prawami zapisu dla ca│ego
╢wiata
SyslogFacility
Dodaje dodatkowe udogodnienia podczas logowania z sshd. Mo┐liwe warto╢ci to:
DAEMON, USER, AUTH, LOCAL0, LOCAL1, LOCAL2, LOCAL3, LOCAL4, LOCAL5, LOCAL6, LOCAL7.
Domy╢lnie ustawiona jest warto╢µ DEAMON
TISAuthentication
Okre╢la czy autoryzacja za pomoc▒ TIS authsrv jest dopuszczalna. Domy╢lnie nie jest.
Umask
Ustawia domy╢ln▒ warto╢µ umask dla sshd i jego dzieci. PamiΩtaj o dodaniu 0 'przed
liczb▒ (inaczej nie bΩdzie to liczba oktalna).
X11Forwarding
Okre╢la czy 'X11 forwarding ' jest dozwolone. Standardowo jest dozolone.
X11DisplayOffset
Okre╢la numer pierwszego ekranu dostΩpnego dla sshd pod X11.
Zapobiega to wp│ywaniu sshd na prawdziwego X11
XAuthLocation
Okre╢la ╢cie┐kΩ do programu xauth
Instalacja
serwera i dodatkowe informacje
Instalacja serwera jest zale┐na od rodzaju
pliku jaki posiadamy. Z naszej strony mo┐na pobraµ wersjΩ specjalnie przygotowan▒ dla
RedHat Linux i innych pochodnych od niej dystrybucji. Jest to plik RPM. Przed instalacj▒
w│a╢ciwego serwera nale┐y pobraµ i zainstalowaµ plik ssh-1.2.27-7us.i386.rpm
Aby go zainstalowaµ nale┐y wpisaµ w linii polece±:
rpm --install ssh-1.2.27-7us.i386.rpm
rpm --install ssh-server-1.2.27-7us.i386.rpm
Ca│y proces instalacji przebiegnie samemu i zostanie tylko konfiguracja demona, kt≤rej
opis znajdziecie powy┐ej.
Gdy posiagamy wersjΩ ╝r≤d│ow▒ serwera, to
musimy najpierw j▒ rozpakowaµ i skompilowaµ. Aby rozpakowaµ archiwum wykonujemy
polecenie:
zcat ssh-1.2.27-7us.i386.tar.gz|tar xvf -
NastΩpnie konfigurujemy plik Makefie:
./configure
kompilujemy server:
make
i w ko±cu instalujemy go w systemie:
make install
Identycznie podtΩpujemu z plikiem ssh-server-1.2.27-7us.i386
.Teraz pozastaje nam jedynie odpowiednio go skonfiurowaµ i pracowaµ.
WersjΩ instalacyjn▒ tego serwera, specjalnie
przygotowan▒ pod RedHata mo┐na pobraµ z dzia│u Download. Najnowsz▒ wersjΩ programu, oraz dodatkowe
informacje na jego temat znajdziecie pod adresem: http://www.cs.hut.fi/ssh |