2004 01 Praca z OpenSSH [Administracja]

background image

styczeń 2004

44

dla początkujących

Praca z OpenSSH

Piotr Machej

W

dobie powszechnej dostępności Interne-
tu
coraz więcej osób zdaje sobie sprawę
z czyhających w nim niebezpieczeństw.
Minęły już czasy, gdy można było swo-

bodnie korzystać z Telnetu nie martwiąc się, że ktoś pod-
słucha nasze hasło i włamie się nam na konto. Standardem
w łączeniu się ze zdalnymi komputerami jest obecnie SSH
w wersji 2 (Secure SHell, czyli bezpieczna powłoka).

W niniejszym artykule omówimy instalację, konfigura-

cję i wykorzystanie programu OpenSSH, bezpłatnej i wolnej
wersji oprogramowania obsługującego protokół SSH. Dzięki
niemu możemy logować się na zdalne maszyny i kopiować
między nimi pliki bez obawy o to, że ktoś podsłucha nasze
hasło czy przesyłane dane.

Przykład użycia

Grałem właśnie w Tux Racer, gdy na komórkę przyszedł
SMS od jednego ze znajomych. Prosił ze łzami (wirtu-
alnymi) w oczach o udostępnienie mu jakiegoś konta,
z którego mógłby wchodzić na IRC bez ograniczeń (bez
flagi restricted ).

Ponieważ bardzo go lubię, od razu (no, prawie – naj-

pierw dojechałem do mety) przełączyłem się na mój Multi
GNOME Terminal
, aby zalogować się na serwer stojący
na drugim końcu Polski. Oczywiście do połączenia
wykorzystałem OpenSSH, a nie Telnet – przecież nie
pozwolę, aby ktoś mógł podsłuchać moją transmisję. Po
podaniu hasła przeprowadziłem rutynowe sprawdzenie,
czy z serwerem wszystko w porządku (a jakże, stoi bez
problemów już drugi miesiąc od ostatniego wyłączenia
prądu). Zalogowałem się na konto root, a następnie utwo-
rzyłem znajomemu konto. Wysłałem do niego wiadomość
z nazwą użytkownika i hasłem, które zmienił zaraz po
zalogowaniu. Po chwili otrzymałem od niego kolejnego
SMS-a. Powiadamiał mnie w nim, że już utworzył sobie
zgrabny tunel (korzystając z OpenSSH), biegnący przez
mój serwer do serwera IRC. W ten sposób mógł nadal
rozmawiać z użyciem swojego ulubionego mIRC-a, a rów-
nocześnie wszystkim rozmówcom wydawało się, że jest

zalogowany na moim serwerze. Oczywiście flagi restric-
ted
też już nie miał.

Korzystając z okazji sprawdziłem jeszcze, co ciekawego

jest udostępnione w sieci lokalnej podłączonej do zdalnego
serwera. Gdy znalazłem (sądząc po nazwie) zestaw mango-
wych tapet, nie mogłem się powstrzymać, aby nie pobrać
ich do siebie. Oczywiście znów korzystając z szyfrowanego
kanału. A później wróciłem do przerwanego turnieju w Tux
Racer
.

Instalacja serwera i klienta

Takie oprogramowanie, jak OpenSSH, znajduje się
w zasadzie w każdej współczesnej dystrybucji Linuksa.
Jeśli specjalnie nie wykluczyliśmy pakietów z instalacji, to
powinniśmy mieć je już na dysku – wtedy można przejść od
razu do rozdziału o konfiguracji. Chciałbym jednak zwrócić
uwagę na pewną sprawę. Ze względów bezpieczeństwa
należy dbać o to, aby w systemie była zainstalowana naj-
bardziej aktualna wersja OpenSSH, jak również i innych
kluczowych, narażonych na ataki programów. Spróbujmy
więc pobrać i zainstalować najnowszą wersję OpenSSH.

Numeracja wersji

Zaczynamy od uruchomienia przeglądarki interne-
towej (przykładowo Mozilla) oraz otwarcia witry-
ny http://predict.chem.uw.edu.pl/openssh/, która jest
zlokalizowanym w Polsce odpowiednikiem strony http:
//www.openssh.com/
. Sprawdzamy na niej, jaki jest numer
najnowszej wersji programu (w chwili pisania artykułu jest
to numer 3.7.1). Następnie wybieramy odnośnik "Linux,

O autorze:

Autor zakończył studia zaoczne na V roku Informatyki na

Politechnice Opolskiej. Z Linuksem (i ogólnie systemami

uniksowymi) ma styczność od wielu lat. Obecnie admi-

nistruje siecią blokową złożoną z dziesięciu komputerów.

Kontakt z autorem: autorzy@linux.com.pl.

Rysunek 1.

Na głównej stronie projektu OpenSSH możemy

sprawdzić najnowszy numer wersji

background image

45

www.linux.com.pl

openssh

Solaris, FreeBSD, NetBSD, AIX, IRIX, HP-UX and many
more
" znajdujący się po lewej stronie pod napisem "For
other OS's
" (Dla innych systemów operacyjnych). Możemy
również po prostu otworzyć witrynę wpisując adres http:
//predict.chem.uw.edu.pl/openssh/portable.html
. Znajduje
się na niej spis serwerów FTP, z których można pobrać
aktualne wersje oprogramowania.

Wybieramy serwer, który nam odpowiada (ja pole-

cam

ftp://sunsite.icm.edu.pl/pub/OpenBSD/OpenSSH/

portable/ ), a następnie sprawdzamy, czy znajduje się na
nim aktualna wersja OpenSSH. W chwili pisania artyku-
łu najnowszym plikiem był openssh-3.7.1p2.tar.gz. Jak
widać, numer wersji zgadza się z tym, który odczytaliśmy
na głównej stronie (3.7.1). Znajdująca się po nim literka
p oznacza, że jest to wersja przenośna, przeznaczona na
systemy inne niż OpenBSD (w tym również dla Linuksa).
Aktualny plik pobieramy na dysk.

Użytkownicy dystrybucji Aurox zamiast pobierać wyżej

wymieniony plik mogą wejść do podkatalogu rpm/RH90/
i pobrać odpowiednie pakiety rpm (dla wersji 3.7.1 są to
pliki openssh-3.7.1p2-1.i386.rpm, openssh-askpass-3.7.1p2-
1.i386.rpm
,

openssh-askpass-gnome-3.7.1p2-1.i386.rpm,

openssh-clients-3.7.1p2-1.i386.rpm, openssh-server-3.7.1p2
-1.i386.rpm
). Ewentualnie możemy pobrać pakiet openssh-
3.7.1p2-1.src.rpm
z podkatalogu rpm/SRPMS/ i samodziel-
nie go przebudować.

Instalacja pakietów

Jeśli pobraliśmy pakiety rpm, możemy zainstalować je
w systemie. Potrzebujemy do tego uprawnień super-
użytkownika
, więc zaczynamy od wydania polecenia

su

-

i podania hasła użytkownika root. Następnie przecho-

dzimy do katalogu, w którym znajdują się pobrane pakie-
ty i wydajemy polecenie:

rpm -Uvh openssh-3.7.1p2-1.i386.rpm

S

openssh-askpass-3.7.1p2-1.i386.rpm

S

openssh-askpass-gnome-3.7.1p2-1.i386.rpm

S

openssh-clients-3.7.1p2-1.i386.rpm

S

openssh-server-3.7.1p2-1.i386.rpm

Jeśli wolimy zbudować pakiety samodzielnie, w katalogu
z pakietem źródłowym (w naszym przykładzie z plikiem
openssh-3.7.1p2-1.src.rpm) wydajemy polecenie

rpmbuild

--rebuild openssh-3.7.1p2-1.src.rpm

. Jeśli nie mamy w sys-

temie programu rpmbuild, to powinniśmy zainstalować
pakiet rpm-build z drugiej płyty CD dystrybucji Aurox.
Po zakończeniu budowania pakiety zostaną umieszczone
w katalogu /usr/src/redhat/RPMS/i386/.

Użytkownicy dystrybucji opartych o inne systemy

pakietów mogą samodzielnie skompilować program (w
sposób opisany w Ramce Kompilacja) lub pobrać go
z wykorzystaniem odpowiednich dla dystrybucji systemów
zarządzania pakietami (przykładowo apt-get w Debianie).

Uruchomienie serwera

Po zainstalowaniu OpenSSH, plik serwera (sshd) powinien
znajdować się w katalogu /usr/sbin/ lub /usr/local/sbin/
– zależnie od instalacji. Jeśli mamy wątpliwości, możemy
jego lokalizację sprawdzić poleceniem

which sshd

, wywoła-

nym z konta użytkownika root.

W dystrybucji Aurox możemy go uruchomić polece-

niem

/etc/rc.d/init.d/sshd start

, a zatrzymać za pomocą

/etc/rc.d/init.d/sshd stop

. Jeśli zmieniamy konfigurację

programu, powinniśmy go zrestartować. Służy do tego
polecenie

/etc/rc.d/init.d/sshd restart

.

Zwykle chcemy, aby serwer OpenSSH uruchamiał się

przy starcie systemu. W tym celu uruchamiamy polecenie

ntsysv

i upewniamy się, że przy pozycji sshd znajduje się

gwiazdka. Jeśli nie, to zaznaczamy ją i wciskamy OK.

Kompilacja ze źródeł

W katalogu, w którym mamy plik ze źródłami programu (w
naszym przykładzie jest to plik openssh-3.7.1p2.tar.gz), wyda-
jemy polecenie

tar xvzf openssh-3.7.1p2.tar.gz

. Utworzy

ono podkatalog o nazwie openssh-3.7.1p2/ i umieści w nim
rozpakowane źródła. Wchodzimy do katalogu poleceniem

cd

openssh-3.7.1p2/

.

Teraz możemy wydać polecenie

./configure

. Domyślnie

OpenSSH instaluje się w podkatalogach katalogu /usr/local/
(dokładne ścieżki zostaną wypisane na ekranie). Jeśli chcemy
to zmienić, możemy użyć przykładowo polecenia

./configure

--prefix=/usr

.

Następnie wydajemy polecenie

make

, co spowoduje prze-

prowadzenie właściwej kompilacji. Po jej zakończeniu musimy
skorzystać z uprawnień użytkownika uprzywilejowanego.
Wydajemy polecenie

su

i podajemy hasło użytkownika root,

a następnie przeprowadzamy instalację OpenSSH poleceniem

make install

.

Jeśli chcemy skorzystać z innych opcji konfiguracyjnych,

możemy się z nimi zapoznać wydając polecenie

./configure

--help

. Warto też zapoznać się z plikami README i INSTALL

umieszczonymi w katalogu ze źródłami.

Rysunek 2.

Po wykonaniu ./configure należy sprawdzić,

czy ustawienia nam odpowiadają

background image

styczeń 2004

46

dla początkujących

W innych dystrybucjach skrypty te mogą być w innych

katalogach lub może ich w ogóle nie być. Jeśli nie wiemy,
jak poradzić sobie inaczej, to możemy uruchamiać serwer
poleceniem

/usr/sbin/sshd

, restartować go poleceniem

killall -HUP sshd

, a wyłączać poprzez

killall sshd

.

Konfiguracja serwera

Pliki konfiguracyjne OpenSSH znajdują się w katalogu
/etc/ssh/. Podstawowym plikiem jest /etc/ssh/sshd_config.
Możemy edytować go naszym ulubionym edytorem tek-
stowym (jak zwykle preferuję edytor Vim, ale każdy może
wybrać taki, jaki lubi najbardziej).

Większość opcji w tym pliku ujęta jest w komentarze (na

początku linii znajduje się znak

#

). Są to opcje posiadające

wartości domyślne. Jeśli chcemy je zmienić, należy usunąć
znak

#

z początku wybranej linii i zmienić wartość opcji.

Powstaje pytanie, które opcje zmieniać. Pomimo tego,

że serwer działa dobrze nawet na domyślnych opcjach,
warto dostosować je do własnych potrzeb. W ramce
wymieniłem wybrane opcje konfiguracyjne. Bardziej
dociekliwym Czytelnikom polecam lekturę podręcznika
systemowego (

man sshd_config

), w którym znajdą opis

pozostałych opcji.

Konfiguracja klienta

Domyślne opcje konfiguracyjne klienta są zwykle zado-
walające dla większości użytkowników. Wielu z nich
nie zdaje sobie jednak sprawy z ilości dostępnych opcji.
Głównym plikiem konfiguracyjnym jest plik /etc/ssh/
ssh_config
. Zawiera on ustawienia wspólne dla wszyst-
kich użytkowników. Oprócz tego, każdy z użytkowników
może utworzyć własny plik konfiguracyjny o nazwie
~/.ssh/config oraz dodać opcje podczas wpisywania pole-
cenia w linii komend.

Kolejność pobierania danych przez OpenSSH jest nastę-

pująca:

• parametry podane w linii komend;
• opcje zawarte w pliku konfiguracyjnym użytkownika

(~/.ssh/config);

• opcje zawarte w systemowym pliku konfiguracyjnym

(/etc/ssh/ssh_config).

Dla każdej opcji pobierana jest tylko pierwsza napotka-
na wartość (pozostałe są ignorowane). Jeśli więc jakaś
opcja znajdzie się w kilku miejscach pliku ~/.ssh/config,
to zostanie jej przypisana pierwsza napotkana wartość.
A jeśli dodatkowo użytkownik ustawi opcję w linii
komend, to wszystkie jej wystąpienia w plikach konfigu-
racyjnych zostaną zignorowane.

Opcje w pliku konfiguracyjnym mogą być pogru-

powane w zależności od komputera, którego dotyczą
– różne opcje dla każdego komputera, z którym się łączy-
my. Każda taka sekcja zaczyna się od linii o treści:

Wybrane opcje konfiguracyjne serwera:

Port – określa, na jakim porcie serwer nasłuchuje przycho-

dzących połączeń (domyślnie ustawiona na wartość 22);

Protocol – określa, które wersje protokołu SSH są obsłu-

giwane przez serwer (domyślnie obsługiwane są obie,
więc opcja przyjmuje wartość 2,1);

ListenAddress – wskazuje adresy, na których serwer

nasłuchuje przychodzących połączeń (domyślnie nasłuch
prowadzony jest na wszystkich dostępnych adresach);

• LoginGraceTime – wyznacza czas, po jakim serwer zrywa

połączenie, jeśli użytkownik nie zdążył się zalogować
poprawnie (domyślnie wynosi 2 minuty, a ustawienie tej
opcji na 0 wyłącza limit czasu);

PermitRootLogin – określa, czy można logować się

bezpośrednio na konto użytkownika root. Zalecane jest
ustawienie tej opcji na no, gdyż utrudnia to zadanie
ewentualnemu włamywaczowi (najpierw musi zdobyć
konto zwykłego użytkownika). Oprócz wartości yes i no
są dostępne jeszcze without-password oraz forced-
commands-only
. Wartość without-password sprawia,
że użytkownik root nie może zalogować się korzystając
z hasła systemowego (nadal jednak może użyć klucza
publicznego). Z kolei forced-commands-only pozwala
mu na zautoryzowanie się z pomocą klucza publicznego,
jednak dopuszcza tylko wykonanie komendy podanej
w wywołaniu OpenSSH.

PubkeyAuthentication – pozwala na autoryzację z użyciem

klucza publicznego (domyślnie ustawiona na yes (tak));

AuthorizedKeysFile – wskazuje plik w katalogu domowym

użytkownika, który zawiera klucze publiczne osób mogą-
cych logować się na konto;

PasswordAuthentication – pozwala na autoryzację z uży-

ciem hasła systemowego (domyślnie ustawiona na yes
(tak));

PermitEmptyPasswords – tę opcję lepiej pozostawić usta-

wioną na no, dzięki czemu nie będzie możliwe logowanie
się na konta z pustymi hasłami;

Subsystem sftp – konfiguruje dodatkową usługę bezpiecz-

nego transferu plików (SFTP).

Rysunek 3.

PuTTY jest bardzo wygodnym klientem SSH pod

Windows – pozwala nawet korzystać z klucza prywatnego

background image

47

www.linux.com.pl

openssh

Host nazwa.serwera

Należy wiedzieć, że nazwa_serwera powinna być dokład-
nie tą nazwą, którą wpisujemy w linii poleceń podczas uru-
chamiania OpenSSH. Wynika to z tego, że nazwa ta nie jest
konwertowana do postaci kanonicznej przed porównaniem
z wartością opcji Host. Jeśli zależy nam, aby jakieś opcje
dotyczyły wszystkich serwerów, to umieszczamy je w sekcji

Host *

. Sekcja ta powinna znajdować się na samym końcu

pliku (ze względu na to, że pobierane są tylko pierwsze
wystąpienia opcji).

Praca z OpenSSH

OpenSSH najczęściej wykorzystujemy do bezpiecznego
logowania się na konta na zdalnych serwerach. W takim
przypadku wywołanie programu jest proste:

ssh użytkownik@adres.serwera

Ewentualnie możemy skorzystać z postaci:

ssh -l użytkownik adres.serwera

Jeśli na zdalnym serwerze mamy taką samą nazwę użyt-
kownika, jak na lokalnym, możemy używać skróconej pos-
taci:

ssh adres.serwera

Jeśli ze zdalnym komputerem łączymy się po raz pierwszy,
pojawi się napis podobny do poniższego:

The authenticity of host '192.168.0.24 (192.168.0.24)'
can't be established.
RSA key fingerprint is 78:49:c7:a5:de:6b:6c:41:e6:
45:22:bd:87:b0:a4:c1.
Are you sure you want to continue connecting (yes/no)?

Dla każdego komputera, z którym się łączymy, OpenSSH
przechowuje w pliku ~/.ssh/known_hosts tzw. odcisk
palca (fingerprint). Podczas każdego połączenia wartość
ta jest sprawdzana, co pozwala wykryć potencjalne ataki
DNS spoofing. Jeśli jesteśmy pewni, że łączymy się do wła-
ściwego komputera, to wpisujemy yes i wciskamy [Enter].
Warto zaznaczyć, że przy tym pytaniu nie wystarczy
wpisać y – musi to być całe słowo yes.

Po połączeniu zostaniemy zapytani o hasło. Jeśli

podamy je prawidłowo, zostaniemy zalogowani na zdalnym
serwerze. Od tej chwili możemy pracować tak, jakbyśmy
siedzieli przed ekranem zdalnego komputera (oczywiście
pomijając ewentualne opóźnienia).

Wykonywanie poleceń

Czasem na zdalnym komputerze chcemy wykonać tylko
jedno polecenie, przykładowo wyświetlić spis nawiąza-
nych połączeń. Nie musimy wtedy uzyskiwać dostępu do
linii poleceń – wystarczy, jeśli zapoznamy się z wynikiem
działania polecenia. W tym celu do opisanych wcześniej
sposobów wywołania OpenSSH powinniśmy dopisać
polecenie, które chcemy wykonać na zdalnym kompu-
terze, np.:

Klienci pod Windows

Wielu użytkowników nadal pracuje w systemach z rodziny Win-
dows
. Nawet użytkownicy Linuksa nieraz sięgają po „okienka”.
Nie są oni pozbawieni możliwości korzystania z SSH. Jeśli chcą
połączyć się z jakimś zdalnym serwerem lub skopiować z niego
plik, mogą skorzystać z jednego z klientów SSH pod Windows.
Wybór jest dosyć szeroki, ale większość programów jest płatna
(zwykle udostępnione są jako shareware lub trial). Chlubnymi
wyjątkami są programy PuTTY oraz WinSCP.

PuTTY

Jest to bardzo wygodny i funkcjonalny program. Istotne jest
również to, że program ten jest w pełni darmowy, a jego kod
jest publicznie dostępny. Jak od razu zauważymy, jest to właści-
wie zestaw kilku programów. Z punktu widzenia przeciętnego
użytkownika, najbardziej przydatne będą programy putty.exe,
pscp.exe i psftp.exe. Pierwszy z nich służy do logowania się na
zdalne maszyny z użyciem między innymi protokołu SSH (sta-
nowi niejako odpowiednik programu OpenSSH opisywanego
w artykule). Drugi i trzeci to kolejno odpowiedniki opisywanych
programów SCP i SFTP. Najlepiej po prostu pobrać instalator
całości (plik putty-0.53b-installer.exe – może być inny numer
wersji), dzięki czemu będziemy mieli zainstalowane wszystkie
pliki z wyjątkiem puttytel.exe (klient pozwalający tylko na połą-
czenia z telnetem).

WinSCP

Tekstowe interfejsy programów SCP i PSCP mogą zrazić użyt-
kowników przyzwyczajonych do posługiwania się myszką. Dla
nich wybawieniem będzie WinSCP. Program ten, z wyglądu
podobny do Total Commandera, pozwala na sprawne kopiowa-
nie plików pomiędzy lokalnym i zdalnym komputerem. Obsługu-
je zarówno SCP, jak i SFTP.

Rysunek 4.

WinSCP na pierwszy rzut oka bardzo przypomina

program Total Commander

background image

styczeń 2004

48

dla początkujących

ssh gerard@192.168.0.35 netstat -nat

Wynik polecenia możemy zapisać w lokalnym pliku:

ssh 192.168.0.5 who > spis.txt

Oczywiście przy każdym z tych poleceń musimy podać
hasło. Jeśli wykonywanie polecenia trwa dłużej, a nie
chcemy mieć zajętej dodatkowej konsoli, możemy spowo-
dować, że OpenSSH natychmiast po pobraniu hasła zosta-
nie przeniesione w tło. Służy do tego parametr -f, który
można wykorzystać w następujący sposób:

ssh -f -L gerard 192.168.4.75 sleep 20

Klucze czy hasła? Oto jest pytanie

Logując się na zdalny serwer z pomocą OpenSSH mamy
pewien komfort psychiczny. Oto bowiem nasza transmisja
jest szyfrowana. Jesteśmy bezpieczni. Zaraz, czy na pewno?
A jeśli ktoś zobaczy, jak wpisujemy hasło? Tak, wtedy on

również może zalogować się na zdalnym serwerze (o ile
zna jego adres) wykorzystując naszą nazwę użytkownika
i poznane hasło. Czy można się przed tym jakoś zabezpie-
czyć? W pewnym stopniu tak.

OpenSSH pozwala na wykorzystanie do logowania się

pary kluczy RSA lub DSA. Jeden z kluczy (zwany publicz-
nym) przechowywany jest na serwerze, na który chcemy
się logować. Natomiast drugi, zabezpieczony hasłem
(zwany kluczem prywatnym) powinniśmy przechowywać
na swoim koncie i absolutnie nie udostępniać go innym
użytkownikom.

Jakie są zalety takiego rozwiązania? Jak już wiemy,

w przypadku stosowania hasła systemowego, wystarczy,
gdy ktoś je odgadnie, podsłucha lub w inny sposób się
z nim zapozna. To daje mu pełny dostęp do naszego konta
na zdalnym serwerze. A co, jeśli pozna hasło chroniące
klucz prywatny? Nic. Bez samego klucza prywatnego hasło
nic mu nie da. Podobnie, gdy uda mu się zdobyć klucz
prywatny, musiałby jeszcze dodatkowo poznać chroniące
go hasło. Jak więc widać, jest to dodatkowa bariera dla
ewentualnego włamywacza.

Klucze RSA dają jeszcze jedną możliwość. Nie musimy

ustawiać hasła chroniącego klucz prywatny. W takim przy-
padku na zdalny komputer logujemy się wydając jedno
polecenie (

ssh użytkownik@adres.serwera

) i nie musimy

nawet podawać żadnego hasła. Jest to wygodne, lecz
możliwości tej należy używać ostrożnie – jeśli ktoś uzyska
dostęp do naszego klucza prywatnego, to wszystkie zdalne
systemy, na których umieściliśmy nasz klucz publiczny,
będą stały dla niego otworem.

Stwórzmy teraz nasze klucze RSA. Wydajemy pole-

cenie:

ssh-keygen -t rsa

Jako typ klucza możemy podać rsa1 (klucz RSA dla starszej
wersji SSH), rsa (klucz RSA dla SSH w wersji 2.) oraz dsa
(klucz DSA dla SSH w wersji 2.).

Zostajemy zapytani o nazwę pliku, w którym ma

zostać zapisany klucz prywatny (domyślnie jest to plik
~/.ssh/id_rsa), a następnie o chroniące go hasło. Hasło
to powinno być trudne do odgadnięcia. Najlepiej, jeśli
będzie miało co najmniej 10 znaków (w tym litery duże
i małe oraz cyfry). Musi jednak równocześnie być łatwe
do zapamiętania, gdyż zapomnianego hasła nie da się
odzyskać – w takim przypadku musimy generować
klucze od nowa. Możemy nie ustawiać hasła, jednak nie
jest to zalecane. Po powtórnym wpisaniu hasła klucze
są generowane i zapisywane na dysku. Klucz prywatny
domyślnie znajduje się w pliku ~/.ssh/id_rsa, natomiast
klucz publiczny w pliku ~/.ssh/id_rsa.pub.

Jeśli kiedyś stwierdzimy, że chcemy zmienić hasło

chroniące nasz klucz prywatny, możemy to zrobić wyda-
jąc polecenie

ssh-keygen -p -f ~/.ssh/id_rsa

. Bedziemy

musieli podać dotychczasowe hasło oraz (dwukrotnie)
nowe hasło.

Wybrane opcje OpenSSH:

-1 – wymusza pracę w wersji 1. protokołu SSH;
-2 – wymusza pracę w wersji 2. protokołu SSH;
-C – włącza kompresję danych (opłacalne jedynie na

modemach i innych wolnych łączach);

-f – przenosi OpenSSH w tło tuż przed wykonaniem pole-

cenia;

-F plik_konfiguracyjny – wskazuje alternatywny plik kon-

figuracyjny użytkownika (zamiast domyślnego ~/.ssh/
config
);

-i nazwa_pliku – wskazuje, który plik z kluczem prywatnym

ma być wykorzystany do autoryzacji;

-l nazwa_użytkownika – podaje nazwę użytkownika, na

którego konto chcemy się zalogować;

-L port:host:port_hosta – pozwala na przekierowanie

połączeń z lokalnego komputera poprzez szyfrowany tunel
do zdalnego komputera, a następnie do komputera host
(więcej na ten temat w rozdziale Tworzenie tuneli);

-N – powoduje, że zdalna komenda nie jest wykonywana

(opcja ta użyteczna jest właściwie tylko przy tworzeniu
tuneli i działa jedynie w wersji 2. protokołu SSH);

-R port:host:port_hosta – pozwala na przekierowanie

połączeń ze zdalnego komputera poprzez szyfrowany
tunel do lokalnego komputera, a następnie do komputera
host;

-o opcje – pozwala podać dodatkowe opcje (w postaci

używanej w pliku konfiguracyjnym), dla których nie ma
osobnych przełączników;

-p port – numer portu na zdalnym komputerze, z którym

chcemy się połączyć;

-q – blokuje drukowanie wszelkich ostrzeżeń i komunika-

tów diagnostycznych;

-v – drukuje dodatkowe komunikaty (przydatne podczas

rozwiązywania problemów);

-V – wyświetla numer wersji programu.

background image

49

www.linux.com.pl

openssh

No dobrze, mamy nasze klucze, ale co teraz z nimi

zrobić? Otóż klucz prywatny (~/.ssh/id_rsa) pozostawiamy
w spokoju. Pod żadnym pozorem nie udostępniamy go
nikomu. Natomiast klucz publiczny (~/.ssh/id_rsa.pub) prze-
syłamy na zdalny komputer. Możemy tego dokonać dowol-
ną metodą – poprzez SCP, pocztą czy przez wystawienie na
stronie WWW. Załóżmy, że użyliśmy SCP:

scp ~/.ssh/id_rsa.pub gerard@192.168.0.5:~/

Teraz logujemy się na zdalny komputer (

ssh

gerard@192.168.0.5

). Musimy umieścić klucz publiczny

w pliku .ssh/authorized_keys (lub innym, jeśli zmienialiśmy
wartość opcji AuthorizedKeysFile w pliku /etc/ssh/sshd_
config
). Plik ten przechowuje klucze publiczne wszystkich
użytkowników, którzy mogą się logować na nasze konto
bez podawania hasła systemowego. Dokonujemy tego
poleceniem

cat ~/id_rsa.pub >> ~/.ssh/authorized_keys

.

Jeśli plik wcześniej nie istniał, to zostanie utworzony.
Powinniśmy wtedy zmienić prawa dostępu do niego pole-
ceniem

chmod 600 ~/.ssh/authorized_keys

. Plik id_rsa.pub

możemy już usunąć ze zdalnego serwera –

rm ~/id_rsa.pub

.

Pozostawiamy go jednak w naszym katalogu ~/.ssh/ wraz
z kluczem prywatnym.

Teraz podczas logowania się na zdalny komputer

zamiast hasła systemowego będziemy podawać hasło chro-
niące klucz prywatny. Nie jest ono przesyłane siecią, więc
jest bezpieczniejsze od hasła systemowego.

Kluczy prywatnych możemy mieć więcej i wykorzy-

stywać je zależnie od potrzeb. Podczas wywoływania
programu OpenSSH (jak również SCP) możemy wskazać
potrzebny nam plik z kluczem prywatnym korzystając
z opcji -i. Przykładowe wywołanie programu mogłoby

mieć postać:

ssh -l gerard -i ~/.ssh/id_rsa 192.168.0.5

Przypomnę tylko, że aby logowanie się z użyciem kluczy
było możliwe, to w konfiguracji serwera (plik /etc/ssh/sshd_
config
) musi być ustawiona opcja

PubkeyAuthentication

yes

(domyślnie ma właśnie taką wartość).

Bezpieczne przesyłanie plików,

czyli SCP

OpenSSH nie tylko pozwala nam na bezpieczną pracę
w linii poleceń na zdalnym komputerze. Oprócz tego,
mamy do dyspozycji program SCP, dzięki któremu możemy
kopiować pliki z i na zdalny komputer (a nawet pomię-
dzy dwoma zdalnymi komputerami) z wykorzystaniem tej
samej autoryzacji, którą oferuje OpenSSH. Oczywiście SCP
zapewnia również takie samo bezpieczeństwo komunikacji,
jak OpenSSH.

Podstawowe wywołanie programu SCP jest bardzo

proste:

scp plik_źródłowy plik_docelowy

. Zarówno

plik_źródłowy, jak i plik_docelowy, mogą być podawane
w jednej z postaci:

nazwa_pliku (np. plik.txt);
host:nazwa_pliku (np. 192.168.0.1:/home/gerard/plik

.txt);

użytkownik@host:nazwa_pliku

(np. gerard@192.168.0.1:/home/gerard/plik.txt).

W drugim przypadku jako nazwa użytkownika na zdalnej
maszynie domyślnie jest przyjmowana nazwa użytkowni-
ka, który wydał polecenie

scp

. Jeśli więc chcemy skopio-

wać jakiś plik ze zdalnego serwera, możemy skorzystać
z polecenia

scp gerard @192.168.0.5:/etc/passwd .

. Zosta-

niemy wtedy zapytani o hasło użytkownika gerard,
a po jego poprawnym podaniu do bieżącego katalogu na
naszym lokalnym komputerze zostanie skopiowany plik
/etc/passwd z komputera o adresie 192.168.0.5.

W wywołaniu programu SCP możemy podać kilka

dodatkowych opcji, np. może przydać się opcja -r,
odpowiadająca za rekursywne pobieranie podkatalogów.
Polecenie

scp -r ~/drzewo/ gerard @192.168.0.5:las/

spo-

woduje, że podkatalog drzewo/ znajdujący się w naszym
katalogu domowym zostanie skopiowany wraz z całą
zawartością do podkatalogu las/ znajdującego się w kata-
logu domowym użytkownika gerard na komputerze
o adresie 192.168.0.5.

Niektóre pozostałe opcje są wymienione w ramce

Wybrane opcje SCP.

FTP też może być bezpieczne

Kopiowanie plików z użyciem SCP jest bezpieczne, ale
często niezbyt wygodne. Wielu użytkowników jest przy-
zwyczajonych do korzystania z FTP, które jednak przesyła
hasła i dane niezabezpieczonym kanałem. W pakiecie

Wybrane opcje SCP:

-a – włącza wyświetlanie statystyk dla każdego pliku;
-A – wyłącza wyświetlanie statystyk dla każdego pliku;
-B – włącza tryb wsadowy (nie pyta o hasła i frazy kodują-

ce);

-C – włącza kompresję;
-i nazwa_pliku – wskazuje, który plik z kluczem prywatnym

ma być wykorzystany do autoryzacji;

-l liczba – ogranicza szybkość przesyłania danych do

liczba kilobitów na sekundę;

-o opcje – pozwala przekazać dodatkowe opcje do progra-

mu OpenSSH;

-p – chroni czasy modyfikacji, dostępu i prawa oryginalne-

go pliku;

-q – wyłącza wyświetlanie statystyk;
-Q – włącza wyświetlanie statystyk;
-r – kopiuje rekursywnie całe katalogi;
-S ścieżka_dostępu – wskazuje umiejscowienie programu

OpenSSH;

-v – drukuje dodatkowe komunikaty (przydatne podczas

rozwiązywania problemów).

background image

styczeń 2004

50

dla początkujących

OpenSSH mamy do dyspozycji bezpieczny odpowiednik
FTP. Jest to program SFTP. W najprostszej postaci urucha-
miamy go poleceniem:

sftp użytkownik@zdalny.serwer.ssh

Po podaniu hasła mamy do dyspozycji interfejs zbliżony
do tego znanego z FTP. Po wpisaniu

help

uzyskujemy spis

dostępnych komend. Nie różnią się one w zasadzie od
komend znanych z powłoki.

SFTP możemy również wykorzystać w sposób podobny

jak SCP do pobrania jednego lub kilku plików (bez wcho-
dzenia w tryb interaktywny):

sftp uzytkownik@zdalny.serwer.ssh:nazwa_pliku

Istotne dla działania SFTP jest, aby w konfiguracji zdalnego
serwera OpenSSH (w pliku /etc/sshd_config) znajdowała się
linia o treści:

Subsystem sftp /usr/libexec/openssh/sftp-server

W domyślnej konfiguracji linia ta jest obecna.

Tworzenie tuneli

Na początku artykułu (w rozdziale Sposób użycia) wspo-
mniałem, że znajomy zrobił sobie tunel ze swojego kom-
putera do mojego serwera, dzięki czemu mógł swobodnie
korzystać z IRC-a. Teraz nadszedł czas, aby wyjaśnić
dokładniej, na czym to polega, i jak można zrobić to
samemu.

Program OpenSSH pozwala na wykorzystanie opcji

-L port_lokalny:host:port_hosta. Powoduje ona, że pomię-
dzy portem port_lokalny na naszym komputerze a zdal-
nym komputerem zostanie utworzony szyfrowany tunel.
W przypadku połączenia się z portem port_lokalny pakie-
ty będą wędrować przez ten tunel, a następnie z kompu-

tera zdalnego będą przesyłane (już nie szyfrowane) do
komputera host na port port_hosta.

Zabezpieczenie poczty

No dobrze, ale co nam to daje? Wiele usług nadal nie jest
szyfrowanych. Wyobraźmy sobie sytuację, gdy pracujemy
w dużej firmie. Firma ta posiada własny serwer SSH oraz
serwer poczty znajdujące się w jednej sieci lokalnej (oba
są dostępne z Internetu). Jeśli chcemy sprawdzić pocztę
firmową z komputera domowego, przy standardowej kon-
figuracji łączylibyśmy się programem pocztowym prosto
na port 110 (POP3) serwera pocztowego. W takim przy-
padku narażamy się na to, że ktoś podsłucha naszą trans-
misję i zdobędzie nasze hasło lub jakieś tajemnice firmy.
Lepiej będzie, gdy korzystając z OpenSSH utworzymy
zabezpieczony tunel od naszego komputera do serwera
SSH firmy i wykorzystamy go do komunikacji z serwerem
poczty. Dzięki temu transmisja będzie niezabezpieczona
tylko na odcinku od serwera SSH do serwera poczty,
a przecież oba znajdują się w sieci firmowej, co znacznie
zmniejsza ryzyko podsłuchu.

Spróbujmy zbudować taki tunel. Odpowiednim do tego

poleceniem będzie:

ssh -N -f -L 11234:adres.serwera.poczty:110

S

użytkownik@adres.serwera.ssh

Teraz zostaniemy zapytani o hasło na konto użytkownik
na serwerze adres.serwera.ssh. Po jego podaniu program
OpenSSH zostanie przeniesiony w tło (dzięki opcji -f ).
Gdybyśmy nie dodali opcji -N, to oprócz stworzenia tunelu
zalogowalibyśmy się na zdalnym serwerze SSH. Tunel
istniałby wtedy tylko do czasu naszego wylogowania się.
Ponieważ zależy nam przede wszystkim na tunelu, więc
używamy opcji -N.

Pozostaje nam skonfigurować program pocztowy tak,

aby nie łączył się z komputerem adres.serwera.poczty na
porcie 110, lecz z komputerem localhost (a więc naszym
własnym) na porcie 11234.

Powyższa metoda sprawdza się jeszcze lepiej, gdy serwer

SSH i serwer poczty są uruchomione na jednym komputerze.
Wówczas wywołanie programu przyjmuje postać:

ssh -N -f -L 11234:localhost:110

S

użytkownik@adres.serwera.ssh.i.poczty

Nie powinien nas zmylić napis localhost w opcji -L. Odnosi
się on do zdalnego serwera SSH, a nie do naszego komputera
lokalnego. W powyższym przypadku tunel zapewnia nam
szyfrowanie transmisji przez całą drogę, gdyż na ostatnim
etapie transmisja odbywa się w obrębie jednego komputera.

Gdy nie wolno IRCować

Do czego mogą się nam jeszcze przydać tunele? Przypuść-
my, że nasz komputer znajduje się w sieci lokalnej oddzie-

Rysunek 5.

Przez tunel możemy przesłać praktycznie wszystko,

wliczając w to strony WWW czy muzykę z radia internetowego

background image

51

www.linux.com.pl

openssh

lonej od Internetu zaporą ogniową (firewall). Administrator
tej zapory z pewnych względów (przykładowo z polecenia
szefa) zablokował część portów i pozostawił tylko wybrane.
Na szczęście połączenia przez SSH są dozwolone (no bo
przecież jakoś trzeba pracować).

Jeśli w czasie przerwy w pracy zamiast jeść drugie śnia-

danie wolimy porozmawiać na IRC-u ze znajomą, musimy
sobie jakoś poradzić. Pomogą nam oczywiście tunele.
Warunkiem jest, że mamy konto na zdalnym komputerze
(umieszczonym poza naszą siecią lokalną), udostępniają-
cym serwer SSH.

Polecenie tworzące tunel już znamy:

ssh -N -f -L 6669:poznan.irc.pl:6667

S

użytkownik@zdalny.serwer.ssh

Po podaniu hasła możemy uruchomić sobie IRC-a i połą-
czyć się z portem 6669 serwera localhost. Nasze połączenie
zostanie przekazane zabezpieczonym tunelem do zdalnego
serwera SSH, a stamtąd przekierowane na port 6667 serwe-
ra poznan.irc.pl. Z punktu widzenia serwera poznan.irc.pl
(a więc i innych uczestników rozmowy na IRC-u) będzie
się wydawało, że nasz program Irc jest uruchomiony na
komputerze zdalny.serwer.ssh.

Zakończenie

Bezpieczeństwo w Sieci jest obecnie sprawą kluczową.
Nawet w takim oprogramowaniu jak OpenSSH zdarzają
się dziury, więc należy pamiętać o częstej aktualizacji
najważniejszych pakietów oraz obserwowaniu ogłoszeń
o krytycznych błędach. Należy też zdawać sobie sprawę,
że nawet najlepsze oprogramowanie może nas nie uchro-
nić przed atakami, gdyż zwykle najsłabszym ogniwem
jest człowiek. Jeśli ustawimy łatwe do odgadnięcia hasło,
to nikt go nie będzie musiał podsłuchiwać – po prostu je
wpisze.

W Sieci:

• Strona domowa OpenSSH:

http://www.openssh.org/

• Polski serwer lustrzany powyższej strony:

http://predict.chem.uw.edu.pl/openssh/

• Pliki rpm na polskim serwerze FTP:

ftp://sunsite.icm.edu.pl/pub/OpenBSD/OpenSSH/

portable/rpm/RH90

• Źródłowe pakiety rpm na polskim serwerze FTP:

ftp://sunsite.icm.edu.pl/pub/OpenBSD/OpenSSH/

portable/rpm/SRPMS

• Strona domowa PuTTY:

http://www.chiark.greenend.org.uk/~sgtatham/putty/

• Strona domowa WinSCP:

http://winscp.sourceforge.net/eng/

• Trochę teorii kryptografii:

http://www.bezpieczenstwoit.pl/Kryptografia.html


Wyszukiwarka

Podobne podstrony:
2004 01 Trzykanalowy mikser ze wzmacniaczem
KONTROLA ADMINISTRACJI PUBLICZNEJ praca, Nauka, Administracja
Matematyka dyskretna 2004 01 Podstawowe pojęcia, oznaczenia
tabicowanie funkcji, 2004-01-05
02 01 Kodeks postępowania administracyjnego
2010 01 Zabawa w SSHowanego [Administracja]
2004 04 Fonty w Linuksie [Administracja]
Wykład XIII 16.01.2013, Prawo Administracyjne, Wykłady
2004 01 28 kol 3B
Informaryka - Hachaj Barnat, kol 26 10 05, 2004-01-05
praca magisterska administracja publiczna
praca w UE, administracja, prawo pracy, Semestr II
Prawo zaoczne - uzupełniona lista zagadnień z dn. 20.01.2012, Prawo administracyjne - wykład
Styl rozwiązywania konfliktów - praca domowa, administracja, Reszta, techniki negocjacji i medjacji
2004 01 08 Dec 2 MON – Dokumenty normalizacyjne
01 Kodeks postępowania administracyjnego Dz U 1960 nr30poz168tj
praca ćwiczenia, Administracja- wykłady

więcej podobnych podstron