putty, certyfikaty i OpenSSH

wersja: $Id: putty-cert.html,v 1.2 2002/09/01 18:57:02 szopen Exp $

putty jest doskonałym klientem SSH ( oraz paru innych protokołów, ale skupię się na SSH ), który ma dwie ważne zalety: jest darmowy i solidnie napisany. celem tego krótkiego tekstu jest przedstawienie możliwości autoryzacyjnych tego małego programu, które odbiegają od znanego chyba wszystkim logowania użytkownik/hasło.

do podstawowych zasad bezpieczeństwa należy to, że mając n serwerów, którymi zarządzasz, nie stosujesz na nich tego samego hasła, przynajmniej nie dla roota. mając dostęp do jednej takiej maszyny, atakujący może ustalić, które inne maszyny mógłby jeszcze zaatakować i zrobić to. co jednak zrobić, jeśli zarządzasz 40 serwerami? a 80-ma? a 200-ma? pamiętanie x zbitek liter i cyfr w rodzaju `ojmzdi40katnmd' ( `o jeden most za daleko i 40 krasnoludków ale tylko na moulholland drive' jeśli chodzi o jasność ;) ) to trochę wyczerpujące zajęcie, szczególnie jeśli akurat siedzisz z kolegami w pubie już którąś godzinę a tu nagle dzwoni kolega mający poważny problem w serwerowni i jakoś Ci się zapomniało...

uniwersalnego rozwiązania nie ma, ale jest bezpieczniejsze. protokół SSH umożliwia stosowanie certyfikatów, które są parą kluczy - prywatną i publiczną. podczas procesu autoryzacji, serwer dysponując Twoim publicznym kluczem, generuje tzw. challenge, który tylko Ty, dysponując kluczem prywatnym tej samej pary, jesteś w stanie odszyfrować i potwierdzić swoją tożsamość. w tym momencie unikamy dwóch przykrych możliwości:

  • ktoś nagra stukanie na klawiaturze, co jest nagminne w rozmaitych kawiarenkach internetowych. login, zaraz potem hasło - i już ma dostęp do Twojego serwera.
  • ktoś nagra sesję, co jest dużo trudniejsze ale możliwe. przy kolejnym połączeniu serwer wygeneruje inny challenge i niestety nasz włamywacz-amator nie dysponując kluczem prywatnym nie będzie w stanie wygenerować poprawnej odpowiedzi, a nagrana wcześniej nie będzie prawidłowa.

putty, puttygen i pageant

wszystkie trzy wskazane aplikacje ściągamy z adresu http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html i zapisujemy na swojej stacji Windowsowej. jeśli dysponujesz Windows NT, 2000 lub XP dobrze od razu ustawić prawa do swojego katalogu w ten sposób, by dostęp mógł mieć tylko Twój użytkownik.

na początek uruchamiasz program puttygen i widzisz taki ekran:

rysunek 1: ekran powitalny puttygen

po przestawieniu opcji generowania klucza tak jak na rysunku poniżej, czyli na SSH2 w standardzie RSA i długości klucza 2048 bitów ( nie będziesz tego przecież wpisywał, więc większa długość nie zaszkodzi ) należy wygenerować klucz klikając na `Generate'. pokazano to na rysunku poniżej.

rysunek 2: zmiana domyślnych opcji na SSH2 RSA i długość klucza 2048 bitów

rysunek 3: klikamy na Generate

teraz należy przez moment ruszać myszką w oknie programu, dostarczając w ten sposób losowych danych do algorytmu generującego ciąg liczb na użytek wygenerowania klucza. po prawidłowym zakończeniu procedury, otrzymujemy nasz klucz:

rysunek 3: wygenerowany klucz i pole do wpisania hasła

2048 bitowy klucz jest długi i jak widać zajmuje więcej niż mieści się w górnym okienku. wymyśl teraz i wpisz w pola `Key passphrase' i `Confirm passphrase' hasło, które umożliwiać będzie skorzystanie z klucza. wybranie dobrego hasła nie musi być trudne, ani niemożliwe. następnie wybierasz kolejno `Save public key' i `Save private key', wskazując lokalizację na dysku ( lub dyskietce! ) niedostępną dla innych osób. zapisanie na dyskietce jest niezawodnym sposobem podróżowania po kraju i kawiarenkach ( na dyskietce powinna znaleźć się wtedy również Twoja kopia programu putty i ew. pageant ), ale sama dyskietka może się zepsuć. jeśli stosujesz takie rozwiązanie, dobrze mieć po pierwsze kopię kluczy - prywatnych i publicznych, oraz kopię binarną samej dyskietki, jeśli chcesz szybko odnowić sobie możliwość logowania się do swoich serwerów.

kolejnym krokiem będzie przeniesienie klucza publicznego na Twój serwer - polecam zdecydowanie SSH, ponieważ dostęp ftp do swojego katalogu domowego to w dzisiejszych czasach zdecydowanie pomyłka. uruchamiamy putty i konfigurujemy połączenie do swojego serwera z demonem SSH. polecam takie ustawienia protokołów transportowych:

rysunek 4: dobre ustawienia dla szyfrowanego połączenia

Notka:

takie ustawienie nie jest optymalne dla komputerów poniżej Pentium - jeśli logujesz się bardzo często i chcesz robić to trochę szybciej (lub w ogóle w ciągu godziny od rozpoczęcia logowania :D) lepiej wybrać jako preferowany protokół Blowfish.

jeśli to Twój jedyny serwer i jedyny klucz, którym będziesz się łączył, możesz w drzewku po lewej wybrać jeszcze opcję Auth i wskazać zapisany klucz prywatny ( na rysunku poniżej przykład ). takie rozwiązanie ma tą wadę, że przy każdej autoryzacji i tak będziesz musiał wpisać hasło, tym razem do odblokowania klucza. jeśli podsłuchujący nie zgra zawartości Twojej dyskietki, jest to jeszcze rozwiązanie akceptowalne, ale po co osłabiać mechanizm bezpieczeństwa?

rysunek 5: bezpośrednie wskazanie klucza prywatnego

teraz wywołujesz połączenie, logujesz się jak zawsze i otwierasz do edycji plik ~/.ssh/authorized_keys. jeśli używasz edytora vi, przechodzisz w tryb edycji klawiszem i i wklejasz zawartość bufora ( ctrl+c w okienku puttygena i prawy przycisk myszy w okienku putty ) do pliku. następnie kombinacja :wq! lub shift+z+z i mamy już zapisany plik. teraz należy się jeszcze upewnić, że demon sshd wie skąd ma czytać klucze. odpowiednie linijki pliku /etc/ssh/sshd_config poniżej:

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

przy okazji, dobrze jest zadbać o obecność poniższych linijek w tym pliku:

Protocol 2,1
LoginGraceTime 600
PermitRootLogin no
RhostsAuthentication no
IgnoreRhosts yes
HostbasedAuthentication no
PermitEmptyPasswords no
UsePrivilegeSeparation yes
MaxStartups 10

kolejny krok zależy od tego, czy używasz jednego klucza i zapisałeś go w oknie `Auth' czy masz lub będziesz miał wiele kluczy i chcesz to jakoś zautomatyzować. program pageant służy właśnie do zarządzania kluczami i umożliwia `zapamiętanie' hasła do klucza po pierwszym użyciu. jeśli chcesz użyć tego przydatnego mechanizmu, uruchom program pageant. pokaże się okienko takie jak poniższe:

rysunek 6: okno powitalne pageant

wybierasz `Add Key', znajdujesz lokalizację w której zachowałeś swój klucz prywatny i wskazujesz go. jeśli jest zabezpieczony hasłem ( powinien być! ) zostaniesz o nie zapytany:

rysunek 7: ładowanie klucza - pytanie o hasło

jeśli hasło jest prawidłowe, klucz zostanie załadowany a oprócz typu pokazany zostanie również jego fingerprint. teraz pageant automatycznie obsługuje sesje logowania przez putty, bez żadnych dodatkowych ustawień. rozłącz istniejącą sesję SSH, w której kopiowałeś klucz publiczny i spróbuj połączyć się jeszcze raz. po wpisaniu swojego loginu, hosty powinny `dogadać' się co do kluczy i zobaczysz coś takiego:

login as: d4v3
Authenticating with public key "rsa-key-20020829" from agent
Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994
        The Regents of the University of California.  All rights reserved.

FreeBSD 4.6-STABLE (MYOWNFREEBSD) #1: Mon Aug 1 16:33:21 CEST 2002

myownfreebsd:d4v3$

gratulacje! skonfigurowałeś uwierzytelnianie certyfikatami!

zbierzmy to razem...

ściągasz programy putty, pageant, puttygen ze strony WWW, weryfikując oczywiście sygnatury plików.

tworzysz dyskietkę, nagrywasz na nią ściągnięte programy oraz swoje klucze. dyskietkę zabezpieczasz przed zapisem, oznaczasz jako `podróżną' i wozisz ze sobą.

dla pewności, możesz stworzyć obraz dyskietki np. programem dd a obraz binarny zapisać sobie gdzieś na `serwisowym' CD.

....jedziesz na urlop :)

materiały

  1. dokumentacja do programów na stronie domowej
    http://the.earth.li/~sgtatham/putty/0.52/htmldoc/
  2. man ssh - dokumentacja do ssh systemu FreeBSD
    http://www.freebsd.org/cgi/man.cgi?query=ssh&apropos=0&sektion=0&manpath=FreeBSD+4.6-RELEASE&format=html