dla początkujących
Praca z OpenSSH
Piotr Machej
dobie powszechnej dostępności Interne-
tu coraz więcej osób zdaje sobie sprawę
z czyhających w nim niebezpieczeństw.
WMinęł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.
Rysunek 1. Na głównej stronie projektu OpenSSH możemy
Przykład użycia
sprawdzić najnowszy numer wersji
Grałem właśnie w Tux Racer, gdy na komórkę przyszedł
SMS od jednego ze znajomych. Prosił ze łzami (wirtu- zalogowany na moim serwerze. Oczywiście flagi restric-
alnymi) w oczach o udostępnienie mu jakiegoś konta, ted też już nie miał.
z którego mógłby wchodzić na IRC bez ograniczeń (bez Korzystając z okazji sprawdziłem jeszcze, co ciekawego
flagi restricted). jest udostępnione w sieci lokalnej podłączonej do zdalnego
Ponieważ bardzo go lubię, od razu (no, prawie naj- serwera. Gdy znalazłem (sądząc po nazwie) zestaw mango-
pierw dojechałem do mety) przełączyłem się na mój Multi wych tapet, nie mogłem się powstrzymać, aby nie pobrać
GNOME Terminal, aby zalogować się na serwer stojący ich do siebie. Oczywiście znów korzystając z szyfrowanego
na drugim końcu Polski. Oczywiście do połączenia kanału. A pózniej wróciłem do przerwanego turnieju w Tux
wykorzystałem OpenSSH, a nie Telnet przecież nie Racer.
pozwolę, aby ktoś mógł podsłuchać moją transmisję. Po
podaniu hasła przeprowadziłem rutynowe sprawdzenie, Instalacja serwera i klienta
czy z serwerem wszystko w porządku (a jakże, stoi bez Takie oprogramowanie, jak OpenSSH, znajduje się
problemów już drugi miesiąc od ostatniego wyłączenia w zasadzie w każdej współczesnej dystrybucji Linuksa.
prądu). Zalogowałem się na konto root, a następnie utwo- Jeśli specjalnie nie wykluczyliśmy pakietów z instalacji, to
rzyłem znajomemu konto. Wysłałem do niego wiadomość powinniśmy mieć je już na dysku wtedy można przejść od
z nazwą użytkownika i hasłem, które zmienił zaraz po razu do rozdziału o konfiguracji. Chciałbym jednak zwrócić
zalogowaniu. Po chwili otrzymałem od niego kolejnego uwagę na pewną sprawę. Ze względów bezpieczeństwa
SMS-a. Powiadamiał mnie w nim, że już utworzył sobie należy dbać o to, aby w systemie była zainstalowana naj-
zgrabny tunel (korzystając z OpenSSH), biegnący przez bardziej aktualna wersja OpenSSH, jak również i innych
mój serwer do serwera IRC. W ten sposób mógł nadal kluczowych, narażonych na ataki programów. Spróbujmy
rozmawiać z użyciem swojego ulubionego mIRC-a, a rów- więc pobrać i zainstalować najnowszą wersję OpenSSH.
nocześnie wszystkim rozmówcom wydawało się, że jest
Numeracja wersji
Zaczynamy od uruchomienia przeglądarki interne-
O autorze:
towej (przykładowo Mozilla) oraz otwarcia witry-
Autor zakończył studia zaoczne na V roku Informatyki na
ny http://predict.chem.uw.edu.pl/openssh/, która jest
Politechnice Opolskiej. Z Linuksem (i ogólnie systemami
zlokalizowanym w Polsce odpowiednikiem strony http:
uniksowymi) ma styczność od wielu lat. Obecnie admi-
//www.openssh.com/. Sprawdzamy na niej, jaki jest numer
nistruje siecią blokową złożoną z dziesięciu komputerów.
Kontakt z autorem: autorzy@linux.com.pl. najnowszej wersji programu (w chwili pisania artykułu jest
to numer 3.7.1). Następnie wybieramy odnośnik "Linux,
44 styczeń 2004
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
Rysunek 2. Po wykonaniu ./configure należy sprawdzić,
systemy inne niż OpenBSD (w tym również dla Linuksa).
czy ustawienia nam odpowiadają
Aktualny plik pobieramy na dysk.
Użytkownicy dystrybucji Aurox zamiast pobierać wyżej
wymieniony plik mogą wejść do podkatalogu rpm/RH90/ dzimy do katalogu, w którym znajdują się pobrane pakie-
i pobrać odpowiednie pakiety rpm (dla wersji 3.7.1 są to ty i wydajemy polecenie:
pliki openssh-3.7.1p2-1.i386.rpm, openssh-askpass-3.7.1p2-
S
1.i386.rpm, openssh-askpass-gnome-3.7.1p2-1.i386.rpm, rpm -Uvh openssh-3.7.1p2-1.i386.rpm
S
openssh-clients-3.7.1p2-1.i386.rpm, openssh-server-3.7.1p2 openssh-askpass-3.7.1p2-1.i386.rpm
S
-1.i386.rpm). Ewentualnie możemy pobrać pakiet openssh- openssh-askpass-gnome-3.7.1p2-1.i386.rpm
S
3.7.1p2-1.src.rpm z podkatalogu rpm/SRPMS/ i samodziel- openssh-clients-3.7.1p2-1.i386.rpm
nie go przebudować. openssh-server-3.7.1p2-1.i386.rpm
Instalacja pakietów Jeśli wolimy zbudować pakiety samodzielnie, w katalogu
Jeśli pobraliśmy pakiety rpm, możemy zainstalować je z pakietem zródłowym (w naszym przykładzie z plikiem
w systemie. Potrzebujemy do tego uprawnień super- openssh-3.7.1p2-1.src.rpm) wydajemy polecenie rpmbuild
użytkownika, więc zaczynamy od wydania polecenia su --rebuild openssh-3.7.1p2-1.src.rpm. Jeśli nie mamy w sys-
- i podania hasła użytkownika root. Następnie przecho- 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/.
Kompilacja ze zródeł
Użytkownicy dystrybucji opartych o inne systemy
W katalogu, w którym mamy plik ze zródłami programu (w
pakietów mogą samodzielnie skompilować program (w
naszym przykładzie jest to plik openssh-3.7.1p2.tar.gz), wyda-
sposób opisany w Ramce Kompilacja) lub pobrać go
jemy polecenie tar xvzf openssh-3.7.1p2.tar.gz. Utworzy
z wykorzystaniem odpowiednich dla dystrybucji systemów
ono podkatalog o nazwie openssh-3.7.1p2/ i umieści w nim
zarządzania pakietami (przykładowo apt-get w Debianie).
rozpakowane zródła. Wchodzimy do katalogu poleceniem cd
openssh-3.7.1p2/.
Uruchomienie serwera
Teraz możemy wydać polecenie ./configure. Domyślnie
Po zainstalowaniu OpenSSH, plik serwera (sshd) powinien
OpenSSH instaluje się w podkatalogach katalogu /usr/local/
znajdować się w katalogu /usr/sbin/ lub /usr/local/sbin/
(dokładne ścieżki zostaną wypisane na ekranie). Jeśli chcemy
to zmienić, możemy użyć przykładowo polecenia ./configure zależnie od instalacji. Jeśli mamy wątpliwości, możemy
--prefix=/usr.
jego lokalizację sprawdzić poleceniem which sshd, wywoła-
Następnie wydajemy polecenie make, co spowoduje prze-
nym z konta użytkownika root.
prowadzenie właściwej kompilacji. Po jej zakończeniu musimy
W dystrybucji Aurox możemy go uruchomić polece-
skorzystać z uprawnień użytkownika uprzywilejowanego.
niem /etc/rc.d/init.d/sshd start, a zatrzymać za pomocą
Wydajemy polecenie su i podajemy hasło użytkownika root,
/etc/rc.d/init.d/sshd stop. Jeśli zmieniamy konfigurację
a następnie przeprowadzamy instalację OpenSSH poleceniem
programu, powinniśmy go zrestartować. Służy do tego
make install.
polecenie /etc/rc.d/init.d/sshd restart.
Jeśli chcemy skorzystać z innych opcji konfiguracyjnych,
Zwykle chcemy, aby serwer OpenSSH uruchamiał się
możemy się z nimi zapoznać wydając polecenie ./configure
przy starcie systemu. W tym celu uruchamiamy polecenie
--help. Warto też zapoznać się z plikami README i INSTALL
ntsysv i upewniamy się, że przy pozycji sshd znajduje się
umieszczonymi w katalogu ze zródłami.
gwiazdka. Jeśli nie, to zaznaczamy ją i wciskamy OK.
www.linux.com.pl 45
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ąć
Rysunek 3. PuTTY jest bardzo wygodnym klientem SSH pod
znak # z początku wybranej linii i zmienić wartość opcji.
Windows pozwala nawet korzystać z klucza prywatnego
Powstaje pytanie, które opcje zmieniać. Pomimo tego,
Wybrane opcje konfiguracyjne serwera:
że serwer działa dobrze nawet na domyślnych opcjach,
" Port określa, na jakim porcie serwer nasłuchuje przycho- warto dostosować je do własnych potrzeb. W ramce
dzących połączeń (domyślnie ustawiona na wartość 22); wymieniłem wybrane opcje konfiguracyjne. Bardziej
" Protocol określa, które wersje protokołu SSH są obsłu- dociekliwym Czytelnikom polecam lekturę podręcznika
giwane przez serwer (domyślnie obsługiwane są obie,
systemowego (man sshd_config), w którym znajdą opis
więc opcja przyjmuje wartość 2,1);
pozostałych opcji.
" ListenAddress wskazuje adresy, na których serwer
nasłuchuje przychodzących połączeń (domyślnie nasłuch
Konfiguracja klienta
prowadzony jest na wszystkich dostępnych adresach);
Domyślne opcje konfiguracyjne klienta są zwykle zado-
" LoginGraceTime wyznacza czas, po jakim serwer zrywa
walające dla większości użytkowników. Wielu z nich
połączenie, jeśli użytkownik nie zdążył się zalogować
nie zdaje sobie jednak sprawy z ilości dostępnych opcji.
poprawnie (domyślnie wynosi 2 minuty, a ustawienie tej
Głównym plikiem konfiguracyjnym jest plik /etc/ssh/
opcji na 0 wyłącza limit czasu);
ssh_config. Zawiera on ustawienia wspólne dla wszyst-
" PermitRootLogin określa, czy można logować się
bezpośrednio na konto użytkownika root. Zalecane jest kich użytkowników. Oprócz tego, każdy z użytkowników
ustawienie tej opcji na no, gdyż utrudnia to zadanie
może utworzyć własny plik konfiguracyjny o nazwie
ewentualnemu włamywaczowi (najpierw musi zdobyć
~/.ssh/config oraz dodać opcje podczas wpisywania pole-
konto zwykłego użytkownika). Oprócz wartości yes i no
cenia w linii komend.
są dostępne jeszcze without-password oraz forced-
Kolejność pobierania danych przez OpenSSH jest nastę-
commands-only. Wartość without-password sprawia,
pująca:
że użytkownik root nie może zalogować się korzystając
z hasła systemowego (nadal jednak może użyć klucza
" parametry podane w linii komend;
publicznego). Z kolei forced-commands-only pozwala
" opcje zawarte w pliku konfiguracyjnym użytkownika
mu na zautoryzowanie się z pomocą klucza publicznego,
(~/.ssh/config);
jednak dopuszcza tylko wykonanie komendy podanej
" opcje zawarte w systemowym pliku konfiguracyjnym
w wywołaniu OpenSSH.
" PubkeyAuthentication pozwala na autoryzację z użyciem (/etc/ssh/ssh_config).
klucza publicznego (domyślnie ustawiona na yes (tak));
" AuthorizedKeysFile wskazuje plik w katalogu domowym
Dla każdej opcji pobierana jest tylko pierwsza napotka-
użytkownika, który zawiera klucze publiczne osób mogą-
na wartość (pozostałe są ignorowane). Jeśli więc jakaś
cych logować się na konto;
opcja znajdzie się w kilku miejscach pliku ~/.ssh/config,
" PasswordAuthentication pozwala na autoryzację z uży-
to zostanie jej przypisana pierwsza napotkana wartość.
ciem hasła systemowego (domyślnie ustawiona na yes
A jeśli dodatkowo użytkownik ustawi opcję w linii
(tak));
komend, to wszystkie jej wystąpienia w plikach konfigu-
" PermitEmptyPasswords tę opcję lepiej pozostawić usta-
racyjnych zostaną zignorowane.
wioną na no, dzięki czemu nie będzie możliwe logowanie
Opcje w pliku konfiguracyjnym mogą być pogru-
się na konta z pustymi hasłami;
" Subsystem sftp konfiguruje dodatkową usługę bezpiecz- powane w zależności od komputera, którego dotyczą
nego transferu plików (SFTP). różne opcje dla każdego komputera, z którym się łączy-
my. Każda taka sekcja zaczyna się od linii o treści:
46 styczeń 2004
openssh
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
Rysunek 4. WinSCP na pierwszy rzut oka bardzo przypomina
użytkownika, najbardziej przydatne będą programy putty.exe,
program Total Commander
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
Host nazwa.serwera
w artykule). Drugi i trzeci to kolejno odpowiedniki opisywanych
programów SCP i SFTP. Najlepiej po prostu pobrać instalator
Należy wiedzieć, że nazwa_serwera powinna być dokład-
całości (plik putty-0.53b-installer.exe może być inny numer
nie tą nazwą, którą wpisujemy w linii poleceń podczas uru-
wersji), dzięki czemu będziemy mieli zainstalowane wszystkie
chamiania OpenSSH. Wynika to z tego, że nazwa ta nie jest
pliki z wyjątkiem puttytel.exe (klient pozwalający tylko na połą-
konwertowana do postaci kanonicznej przed porównaniem
czenia z telnetem).
z wartością opcji Host. Jeśli zależy nam, aby jakieś opcje
dotyczyły wszystkich serwerów, to umieszczamy je w sekcji WinSCP
Tekstowe interfejsy programów SCP i PSCP mogą zrazić użyt-
Host *
. Sekcja ta powinna znajdować się na samym końcu
kowników przyzwyczajonych do posługiwania się myszką. Dla
pliku (ze względu na to, że pobierane są tylko pierwsze
nich wybawieniem będzie WinSCP. Program ten, z wyglądu
wystąpienia opcji).
podobny do Total Commandera, pozwala na sprawne kopiowa-
nie plików pomiędzy lokalnym i zdalnym komputerem. Obsługu-
Praca z OpenSSH
je zarówno SCP, jak i SFTP.
OpenSSH najczęściej wykorzystujemy do bezpiecznego
logowania się na konta na zdalnych serwerach. W takim
przypadku wywołanie programu jest proste: Dla każdego komputera, z którym się łączymy, OpenSSH
przechowuje w pliku ~/.ssh/known_hosts tzw. odcisk
ssh użytkownik@adres.serwera palca (fingerprint). Podczas każdego połączenia wartość
ta jest sprawdzana, co pozwala wykryć potencjalne ataki
Ewentualnie możemy skorzystać z postaci: DNS spoofing. Jeśli jesteśmy pewni, że łączymy się do wła-
ściwego komputera, to wpisujemy yes i wciskamy [Enter].
ssh -l użytkownik adres.serwera Warto zaznaczyć, że przy tym pytaniu nie wystarczy
wpisać y musi to być całe słowo yes.
Jeśli na zdalnym serwerze mamy taką samą nazwę użyt- Po połączeniu zostaniemy zapytani o hasło. Jeśli
kownika, jak na lokalnym, możemy używać skróconej pos- podamy je prawidłowo, zostaniemy zalogowani na zdalnym
taci: serwerze. Od tej chwili możemy pracować tak, jakbyśmy
siedzieli przed ekranem zdalnego komputera (oczywiście
ssh adres.serwera pomijając ewentualne opóznienia).
Jeśli ze zdalnym komputerem łączymy się po raz pierwszy, Wykonywanie poleceń
pojawi się napis podobny do poniższego: Czasem na zdalnym komputerze chcemy wykonać tylko
jedno polecenie, przykładowo wyświetlić spis nawiąza-
The authenticity of host '192.168.0.24 (192.168.0.24)' nych połączeń. Nie musimy wtedy uzyskiwać dostępu do
can't be established. linii poleceń wystarczy, jeśli zapoznamy się z wynikiem
RSA key fingerprint is 78:49:c7:a5:de:6b:6c:41:e6: działania polecenia. W tym celu do opisanych wcześniej
45:22:bd:87:b0:a4:c1. sposobów wywołania OpenSSH powinniśmy dopisać
Are you sure you want to continue connecting (yes/no)? polecenie, które chcemy wykonać na zdalnym kompu-
terze, np.:
www.linux.com.pl 47
dla początkujących
ssh gerard@192.168.0.35 netstat -nat również może zalogować się na zdalnym serwerze (o ile
zna jego adres) wykorzystując naszą nazwę użytkownika
Wynik polecenia możemy zapisać w lokalnym pliku: i poznane hasło. Czy można się przed tym jakoś zabezpie-
czyć? W pewnym stopniu tak.
ssh 192.168.0.5 who > spis.txt OpenSSH pozwala na wykorzystanie do logowania się
pary kluczy RSA lub DSA. Jeden z kluczy (zwany publicz-
Oczywiście przy każdym z tych poleceń musimy podać nym) przechowywany jest na serwerze, na który chcemy
hasło. Jeśli wykonywanie polecenia trwa dłużej, a nie się logować. Natomiast drugi, zabezpieczony hasłem
chcemy mieć zajętej dodatkowej konsoli, możemy spowo- (zwany kluczem prywatnym) powinniśmy przechowywać
dować, że OpenSSH natychmiast po pobraniu hasła zosta- na swoim koncie i absolutnie nie udostępniać go innym
nie przeniesione w tło. Służy do tego parametr -f, który użytkownikom.
można wykorzystać w następujący sposób: Jakie są zalety takiego rozwiązania? Jak już wiemy,
w przypadku stosowania hasła systemowego, wystarczy,
ssh -f -L gerard 192.168.4.75 sleep 20 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
Klucze czy hasła? Oto jest pytanie na zdalnym serwerze. A co, jeśli pozna hasło chroniące
Logując się na zdalny serwer z pomocą OpenSSH mamy klucz prywatny? Nic. Bez samego klucza prywatnego hasło
pewien komfort psychiczny. Oto bowiem nasza transmisja nic mu nie da. Podobnie, gdy uda mu się zdobyć klucz
jest szyfrowana. Jesteśmy bezpieczni. Zaraz, czy na pewno? prywatny, musiałby jeszcze dodatkowo poznać chroniące
A jeśli ktoś zobaczy, jak wpisujemy hasło? Tak, wtedy on 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-
Wybrane opcje OpenSSH:
padku na zdalny komputer logujemy się wydając jedno
" -1 wymusza pracę w wersji 1. protokołu SSH;
polecenie (ssh użytkownik@adres.serwera) i nie musimy
" -2 wymusza pracę w wersji 2. protokołu SSH;
nawet podawać żadnego hasła. Jest to wygodne, lecz
" -C włącza kompresję danych (opłacalne jedynie na
możliwości tej należy używać ostrożnie jeśli ktoś uzyska
modemach i innych wolnych łączach);
dostęp do naszego klucza prywatnego, to wszystkie zdalne
" -f przenosi OpenSSH w tło tuż przed wykonaniem pole-
systemy, na których umieściliśmy nasz klucz publiczny,
cenia;
będą stały dla niego otworem.
" -F plik_konfiguracyjny wskazuje alternatywny plik kon-
Stwórzmy teraz nasze klucze RSA. Wydajemy pole-
figuracyjny użytkownika (zamiast domyślnego ~/.ssh/
cenie:
config);
" -i nazwa_pliku wskazuje, który plik z kluczem prywatnym
ma być wykorzystany do autoryzacji;
ssh-keygen -t rsa
" -l nazwa_użytkownika podaje nazwę użytkownika, na
którego konto chcemy się zalogować;
Jako typ klucza możemy podać rsa1 (klucz RSA dla starszej
" -L port:host:port_hosta pozwala na przekierowanie
wersji SSH), rsa (klucz RSA dla SSH w wersji 2.) oraz dsa
połączeń z lokalnego komputera poprzez szyfrowany tunel
(klucz DSA dla SSH w wersji 2.).
do zdalnego komputera, a następnie do komputera host
Zostajemy zapytani o nazwę pliku, w którym ma
(więcej na ten temat w rozdziale Tworzenie tuneli);
zostać zapisany klucz prywatny (domyślnie jest to plik
" -N powoduje, że zdalna komenda nie jest wykonywana
~/.ssh/id_rsa), a następnie o chroniące go hasło. Hasło
(opcja ta użyteczna jest właściwie tylko przy tworzeniu
to powinno być trudne do odgadnięcia. Najlepiej, jeśli
tuneli i działa jedynie w wersji 2. protokołu SSH);
będzie miało co najmniej 10 znaków (w tym litery duże
" -R port:host:port_hosta pozwala na przekierowanie
połączeń ze zdalnego komputera poprzez szyfrowany i małe oraz cyfry). Musi jednak równocześnie być łatwe
tunel do lokalnego komputera, a następnie do komputera
do zapamiętania, gdyż zapomnianego hasła nie da się
host;
odzyskać w takim przypadku musimy generować
" -o opcje pozwala podać dodatkowe opcje (w postaci
klucze od nowa. Możemy nie ustawiać hasła, jednak nie
używanej w pliku konfiguracyjnym), dla których nie ma
jest to zalecane. Po powtórnym wpisaniu hasła klucze
osobnych przełączników;
są generowane i zapisywane na dysku. Klucz prywatny
" -p port numer portu na zdalnym komputerze, z którym
domyślnie znajduje się w pliku ~/.ssh/id_rsa, natomiast
chcemy się połączyć;
klucz publiczny w pliku ~/.ssh/id_rsa.pub.
" -q blokuje drukowanie wszelkich ostrzeżeń i komunika-
Jeśli kiedyś stwierdzimy, że chcemy zmienić hasło
tów diagnostycznych;
chroniące nasz klucz prywatny, możemy to zrobić wyda-
" -v drukuje dodatkowe komunikaty (przydatne podczas
jąc polecenie ssh-keygen -p -f ~/.ssh/id_rsa. Bedziemy
rozwiązywania problemów);
" -V wyświetla numer wersji programu. musieli podać dotychczasowe hasło oraz (dwukrotnie)
nowe hasło.
48 styczeń 2004
openssh
No dobrze, mamy nasze klucze, ale co teraz z nimi mieć postać:
zrobić? Otóż klucz prywatny (~/.ssh/id_rsa) pozostawiamy
w spokoju. Pod żadnym pozorem nie udostępniamy go ssh -l gerard -i ~/.ssh/id_rsa 192.168.0.5
nikomu. Natomiast klucz publiczny (~/.ssh/id_rsa.pub) prze-
syłamy na zdalny komputer. Możemy tego dokonać dowol- Przypomnę tylko, że aby logowanie się z użyciem kluczy
ną metodą poprzez SCP, pocztą czy przez wystawienie na było możliwe, to w konfiguracji serwera (plik /etc/ssh/sshd_
stronie WWW. Załóżmy, że użyliśmy SCP: config) musi być ustawiona opcja PubkeyAuthentication
yes (domyślnie ma właśnie taką wartość).
scp ~/.ssh/id_rsa.pub gerard@192.168.0.5:~/
Bezpieczne przesyłanie plików,
Teraz logujemy się na zdalny komputer (ssh czyli SCP
gerard@192.168.0.5). Musimy umieścić klucz publiczny OpenSSH nie tylko pozwala nam na bezpieczną pracę
w pliku .ssh/authorized_keys (lub innym, jeśli zmienialiśmy w linii poleceń na zdalnym komputerze. Oprócz tego,
wartość opcji AuthorizedKeysFile w pliku /etc/ssh/sshd_ mamy do dyspozycji program SCP, dzięki któremu możemy
config). Plik ten przechowuje klucze publiczne wszystkich kopiować pliki z i na zdalny komputer (a nawet pomię-
użytkowników, którzy mogą się logować na nasze konto dzy dwoma zdalnymi komputerami) z wykorzystaniem tej
bez podawania hasła systemowego. Dokonujemy tego samej autoryzacji, którą oferuje OpenSSH. Oczywiście SCP
poleceniem cat ~/id_rsa.pub >> ~/.ssh/authorized_keys. zapewnia również takie samo bezpieczeństwo komunikacji,
Jeśli plik wcześniej nie istniał, to zostanie utworzony. jak OpenSSH.
Powinniśmy wtedy zmienić prawa dostępu do niego pole- Podstawowe wywołanie programu SCP jest bardzo
ceniem chmod 600 ~/.ssh/authorized_keys. Plik id_rsa.pub proste: scp plik_zródłowy plik_docelowy. Zarówno
możemy już usunąć ze zdalnego serwera rm ~/id_rsa.pub. plik_zródłowy, jak i plik_docelowy, mogą być podawane
Pozostawiamy go jednak w naszym katalogu ~/.ssh/ wraz w jednej z postaci:
z kluczem prywatnym.
Teraz podczas logowania się na zdalny komputer " nazwa_pliku (np. plik.txt);
zamiast hasła systemowego będziemy podawać hasło chro- " host:nazwa_pliku (np. 192.168.0.1:/home/gerard/plik
niące klucz prywatny. Nie jest ono przesyłane siecią, więc .txt);
jest bezpieczniejsze od hasła systemowego. " użytkownik@host:nazwa_pliku
Kluczy prywatnych możemy mieć więcej i wykorzy- (np. gerard@192.168.0.1:/home/gerard/plik.txt).
stywać je zależnie od potrzeb. Podczas wywoływania
programu OpenSSH (jak również SCP) możemy wskazać W drugim przypadku jako nazwa użytkownika na zdalnej
potrzebny nam plik z kluczem prywatnym korzystając maszynie domyślnie jest przyjmowana nazwa użytkowni-
z opcji -i. Przykładowe wywołanie programu mogłoby 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-
Wybrane opcje SCP:
niemy wtedy zapytani o hasło użytkownika gerard,
a po jego poprawnym podaniu do bieżącego katalogu na
" -a włącza wyświetlanie statystyk dla każdego pliku;
naszym lokalnym komputerze zostanie skopiowany plik
" -A wyłącza wyświetlanie statystyk dla każdego pliku;
/etc/passwd z komputera o adresie 192.168.0.5.
" -B włącza tryb wsadowy (nie pyta o hasła i frazy kodują-
W wywołaniu programu SCP możemy podać kilka
ce);
dodatkowych opcji, np. może przydać się opcja -r,
" -C włącza kompresję;
odpowiadająca za rekursywne pobieranie podkatalogów.
" -i nazwa_pliku wskazuje, który plik z kluczem prywatnym
ma być wykorzystany do autoryzacji; Polecenie scp -r ~/drzewo/ gerard @192.168.0.5:las/ spo-
" -l liczba ogranicza szybkość przesyłania danych do
woduje, że podkatalog drzewo/ znajdujący się w naszym
liczba kilobitów na sekundę;
katalogu domowym zostanie skopiowany wraz z całą
" -o opcje pozwala przekazać dodatkowe opcje do progra-
zawartością do podkatalogu las/ znajdującego się w kata-
mu OpenSSH;
logu domowym użytkownika gerard na komputerze
" -p chroni czasy modyfikacji, dostępu i prawa oryginalne-
o adresie 192.168.0.5.
go pliku;
Niektóre pozostałe opcje są wymienione w ramce
" -q wyłącza wyświetlanie statystyk;
Wybrane opcje SCP.
" -Q włącza wyświetlanie statystyk;
" -r kopiuje rekursywnie całe katalogi;
FTP też może być bezpieczne
" -S ścieżka_dostępu wskazuje umiejscowienie programu
Kopiowanie plików z użyciem SCP jest bezpieczne, ale
OpenSSH;
" -v drukuje dodatkowe komunikaty (przydatne podczas często niezbyt wygodne. Wielu użytkowników jest przy-
rozwiązywania problemów).
zwyczajonych do korzystania z FTP, które jednak przesyła
hasła i dane niezabezpieczonym kanałem. W pakiecie
www.linux.com.pl 49
dla początkujących
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. Wyobrazmy 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
Rysunek 5. Przez tunel możemy przesłać praktycznie wszystko,
zabezpieczony tunel od naszego komputera do serwera
wliczając w to strony WWW czy muzykę z radia internetowego
SSH firmy i wykorzystamy go do komunikacji z serwerem
poczty. Dzięki temu transmisja będzie niezabezpieczona
OpenSSH mamy do dyspozycji bezpieczny odpowiednik tylko na odcinku od serwera SSH do serwera poczty,
FTP. Jest to program SFTP. W najprostszej postaci urucha- a przecież oba znajdują się w sieci firmowej, co znacznie
miamy go poleceniem: zmniejsza ryzyko podsłuchu.
Spróbujmy zbudować taki tunel. Odpowiednim do tego
sftp użytkownik@zdalny.serwer.ssh poleceniem będzie:
S
Po podaniu hasła mamy do dyspozycji interfejs zbliżony ssh -N -f -L 11234:adres.serwera.poczty:110
do tego znanego z FTP. Po wpisaniu help uzyskujemy spis użytkownik@adres.serwera.ssh
dostępnych komend. Nie różnią się one w zasadzie od
komend znanych z powłoki. Teraz zostaniemy zapytani o hasło na konto użytkownik
SFTP możemy również wykorzystać w sposób podobny na serwerze adres.serwera.ssh. Po jego podaniu program
jak SCP do pobrania jednego lub kilku plików (bez wcho- OpenSSH zostanie przeniesiony w tło (dzięki opcji -f ).
dzenia w tryb interaktywny): Gdybyśmy nie dodali opcji -N, to oprócz stworzenia tunelu
zalogowalibyśmy się na zdalnym serwerze SSH. Tunel
sftp uzytkownik@zdalny.serwer.ssh:nazwa_pliku istniałby wtedy tylko do czasu naszego wylogowania się.
Ponieważ zależy nam przede wszystkim na tunelu, więc
Istotne dla działania SFTP jest, aby w konfiguracji zdalnego używamy opcji -N.
serwera OpenSSH (w pliku /etc/sshd_config) znajdowała się Pozostaje nam skonfigurować program pocztowy tak,
linia o treści: aby nie łączył się z komputerem adres.serwera.poczty na
porcie 110, lecz z komputerem localhost (a więc naszym
Subsystem sftp /usr/libexec/openssh/sftp-server własnym) na porcie 11234.
Powyższa metoda sprawdza się jeszcze lepiej, gdy serwer
W domyślnej konfiguracji linia ta jest obecna. SSH i serwer poczty są uruchomione na jednym komputerze.
Wówczas wywołanie programu przyjmuje postać:
Tworzenie tuneli
S
Na początku artykułu (w rozdziale Sposób użycia) wspo- ssh -N -f -L 11234:localhost:110
mniałem, że znajomy zrobił sobie tunel ze swojego kom- użytkownik@adres.serwera.ssh.i.poczty
putera do mojego serwera, dzięki czemu mógł swobodnie
korzystać z IRC-a. Teraz nadszedł czas, aby wyjaśnić Nie powinien nas zmylić napis localhost w opcji -L. Odnosi
dokładniej, na czym to polega, i jak można zrobić to się on do zdalnego serwera SSH, a nie do naszego komputera
samemu. lokalnego. W powyższym przypadku tunel zapewnia nam
Program OpenSSH pozwala na wykorzystanie opcji szyfrowanie transmisji przez całą drogę, gdyż na ostatnim
-L port_lokalny:host:port_hosta. Powoduje ona, że pomię- etapie transmisja odbywa się w obrębie jednego komputera.
dzy portem port_lokalny na naszym komputerze a zdal-
nym komputerem zostanie utworzony szyfrowany tunel. Gdy nie wolno IRCować
W przypadku połączenia się z portem port_lokalny pakie- Do czego mogą się nam jeszcze przydać tunele? Przypuść-
ty będą wędrować przez ten tunel, a następnie z kompu- my, że nasz komputer znajduje się w sieci lokalnej oddzie-
50 styczeń 2004
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:
S
ssh -N -f -L 6669:poznan.irc.pl:6667
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
" yró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
www.linux.com.pl 51
Wyszukiwarka
Podobne podstrony:
2005 01 Pyro i OpenSSL–bezpieczny komunikator internetowy [Programowanie]2007 01 Praca dla fizjoterapeutów2010 01 Zabawa w SSHowanego [Administracja]2004 04 Fonty w Linuksie [Administracja]2004 01 08 Dec 2 MON – Dokumenty normalizacyjneMatematyka dyskretna 2004 01 Podstawowe pojęcia, oznaczenia2004 01 Pisanie bezpiecznych programów [Programowanie]2004 01 Loop AES – szyfrowane systemy plików [Bezpieczenstwo]01 Kodeks postępowania administracyjnego Dz U 1960 nr30poz168tjkwestionariusz osobowy od 01 01 200401 mechanika budowli wykład 01 wstep przypomnienie praca na przemieszczeniachwięcej podobnych podstron