SSH
Ten artykuł jest niekompletny i wymaga rozbudowy. Szczegóły można znaleźć na stronie dyskusji.
SSH (Secure Shell) jest to program, który umożliwia logowanie do innych komputerów, kopiowanie plików między komputerami, zdalne wykonywanie poleceń na innych komputerach, łączenie sieci komputerowych za pomocą tzw. tuneli oraz przekazywanie (forwarding) środowiska graficznego X, czyli uruchamianie graficznych aplikacji na zdalnej maszynie i oglądanie ich na swoim komputerze. Logowanie do innych komputerów może być uwierzytelniane hasłem użytkownika, lub wygenerowanym kluczem. Cała transmisja danych pomiędzy komputerami jest szyfrowana. Program ten zastępuje mniej bezpieczne rlogin, rsh, rcp, rdist i telnet.
Spis treści |
Implementacja OpenSSH w SUSE składa się z dwóch części:
- klienta ssh, który umożliwia logowanie się na inne maszyny
- demona sshd, który umożliwia logowanie się do komputera, na którym jest uruchomiony
Do czego używać?
Najczęściej używamy ssh do wykonywania poleceń na zdalnej maszynie, jak np. instalowanie oprogramowania na serwerze, przeglądanie logów systemowych. Wtedy używamy polecenia ssh w postaci uzytkownik@adres_lub_nazwa_maszyny. Często wykorzystuje się również polecenie scp, które służy do bezpiecznego kopiowania plików na inną maszynę, np. nowe pakiety RPM, które chcemy zainstalować na maszynie bez dostępu do internetu. Więcej o tych poleceniach można przeczytać w dalszej części artykułu.
Jak włączyć ?
Jeśli chcemy umożliwić logowanie do swojego komputera przez ssh, musimy uruchomić demona sshd i odblokować na firewallu port 22, który jest wykorzystywany przez ssh.
Uruchamiamy YaST >> System >> Usługi systemowe odszukujemy sshd i upewniamy się czy jest włączony.
Następnie w YaST przechodzimy do Zabezpieczenia i użytkownicy >> Zapora sieciowa >> Dozwolone usługi. Z listy usług wyszukujemy SSH i klikamy dodaj, następnie dalej i akceptuj.
Jeśli chcemy uruchomić usługę jednorazowo, możemy wykonać polecenie:
/etc/init.d/sshd start
Wyłączenie usługi podobnie:
/etc/init.d/sshd stop
Żeby sprawdzić czy działa ssh działa możemy wykonać
ssh localhost
Zostaniesz zapytany o hasło użytkownika, z którego wykonałeś polecenie. Po zalogowaniu otrzymasz znak zachęty, taki jaki standardowo masz ustawiony w konsoli. Żeby się wylogować naciśnij Ctrl+d.
Konfiguracja SSH
Oczywiście konfiguracja OpenSSH składa się z dwóch odrębnych części, jednej dla demona, jeśli takiego uruchamiamy na naszej maszynie i jest to plik: /etc/ssh/sshd_config. Konfiguracja klienta OpenSSH jest osobna dla każdego konta w systemie i znajduje sie w katalogu ~/.ssh, jednakże istnieje również plik /etc/ssh/ssh_config, w którym znajduje się konfiguracja ogólna, wspólna dla wszystkich. Kolejność wczytywania konfiguracji dla klienta:
- opcje podane w linii poleceń
- opcje zawarte w pliku ssh_config z katalogu domowego
- opcje zawarte w pliku /etc/ssh/ssh_config
Teraz omówimy zawartość plików konfiguracyjnych, najpierw najważniejsze opcje.
sshd_config
- Host
- Ogranicza listę hostów, które mają dostęp do usługi ssh na tym hoście. Dostęp mają tylko hosty, które pasują do zdefiniowanego tutaj wzorca. Wzorzec to np.: *.co.uk - hosty z domeny co.uk, 192.168.0.? - hosty posiadające IP z zakresu 192.168.0.[0-9], można też zabraniać dostępu określonym hostom from="!*.dialup.example.com,*.example.com". Można podać kilka wzorców oddzielając je przecinkami.
- BatchMode
- Tryb batchowy. Jeśli jest włączony, ssh nie pyta o hasło. Możliwe wartości to yes i no. Opcja ta jest użyteczna tylko jeśli mamy potrzebę uruchamiania skryptów korzystających z ssh, które nie używają haseł. Zaleca się ustawić wartość no i rozwiązać to kluczami dla odpowiedniego użytkownika, ale o tym w dalszej części.
- CheckHostIP
- Określa czy sprawdzać klucz hosta w pliku known_hosts. Możliwe wartości yes i no. Domyślna wartość: yes.
- Compression
- Włącza/Wyłącza kompresję transmisji. Domyślna wartość: no. Pamiętajmy, że włączona kompresja zwiększa szybkość przesyłania danych, ale zwiększa także zużycie zasobów komputera.
- ConnectionAttempts
- Dopuszczalna liczba prób połączenia na sekundę przed odrzuceniem połączenia. Domyślna wartość: 1
- Port
- Port, na którym działa usługa. Domyślna wartość: 22.
- PermitRootLogin
- Określa czy umożliwić zdalne logowanie na użytkownika root. Domyślna wartość zależy od dystrybucji linuksa. Zaleca się ze względów bezpieczeństwa ustawić no i logować się na konto zwykłego użytkownika, a potem zrobić su. Jeśli nie możemy zalogować się na świeżo zainstalowany system na użytkownika root, to warto sprawdzić tę opcję. :)
- X11Forwarding
- Określa czy uruchomić forwarding środowiska graficznego X. Możliwe wartości to yes i no. Domyślna wartość zależy od dystrybucji linuksa, w SUSE yes.
- PrintMotd
- Określa czy wyświetlać komunikat powitalny z pliku /etc/motd po zalogowaniu. Możliwe wartości yes i no. Domyślnie opcja zakomentowana.
- UsePAM
- Określa czy korzystać z modułów uwierzytelniania PAM. Domyślnie na SUSE yes i lepiej tego nie zmieniać.
Korzystanie z kluczy
Korzystanie z kluczy zwiększa bezpieczeństwo, ponieważ złamanie hasła jest prostsze niż uzyskanie dostępu do klucza prywatnego. Poza tym jeśli używasz wielu maszyn, na każdej innego hasła na konto roota czy też inne, ciężko zapamiętać je wszystkie. Kiedy korzystasz z kluczy musisz pamiętać tylko hasło do swojego klucza, albo wcale.
Krótki tutorial
Na potrzeby tego tutoriala zakładamy, że jesteś zalogowany na maszynie laptop jako użytkownik user i chcesz korzystać z klucza rsa, żeby zalogować się na maszynę mainframe.
Generujemy klucz
user@laptop:~> ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/user/.ssh/id_rsa):
Jeśli chcesz zapisać klucz w innym pliku niż domyślnie sugerowany podaj ścieżkę do tego pliku, jeśli nie naciśnij enter.
Created directory '/home/user/.ssh'. Enter passphrase (empty for no passphrase):
Katalog został ~/.ssh został utworzony jeśli wcześniej go nie było. Teraz decydujesz czy chcesz chronić klucz hasłem. Jeśli tak, to podaj i powtórz hasło, jeśli nie, naciśnij enter dwa razy.
Rezultat:
Your identification has been saved in /home/user/.ssh/id_rsa. Your public key has been saved in /home/user/.ssh/id_rsa.pub. The key fingerprint is: 32:23:e4:11:34:45:0e:7f:81:00:d2:b2:72:f2:62:1c user@laptop
Zaleca się przeniesienie kluczy na pendrive lub inny nośnik. I najważniejsze: nie udostępniaj ich nikomu. Jeśli chcesz użyć innego algorytmu do generowania kluczy, jak na przykład dsa, to podaj jego typ po parametrze -t.
Umieszczamy klucz publiczny na zdalnej maszynie Żeby korzystać z klucza, musimy dodać klucz publiczny do pliku authorized_keys (dla rsa) lub authorized_keys2 (dla dsa) w katalogu ./ssh dla użytkownika dla ktorego wygenerowaliśmy klucz (w tym wypadku /home/user/.ssh/authorized_keys).
user@laptop:~> cd .ssh user@laptop:~> scp id_rsa.pub user@mainframe:/home/user/id_rsa.pub
Tym razem jeszcze będziemy proszeni o hasło.
Logujemy się do zdalnej maszyny:
user@laptop:~> ssh user@mainframe user@mainframe:~>
Jeśli katalog .ssh i plik authorized_keys nie istnieją, to je tworzymy:
user@mainframe:~> mkdir .ssh user@mainframe:~> touch authorized_keys user@mainframe:~> chmod 600 authorized_keys
Dołączamy swój klucz do authorized_keys i usuwamy plik z kluczem:
user@mainframe:~> cat id_rsa.pub >> .ssh/authorized_keys user@mainframe:~> rm id_rsa.pub
Wylogowujemy się z maszyny:
user@mainframe:~> exit Connection to mainframe closed. user@laptop:~>
Logujemy się już za pomocą klucza Z kluczem rsa uzywamy opcji -1 z kluczem dsa -2
user@laptop:~> ssh -1 -v user@mainframe
Jeśli przy generacji kluczy zdefiniowaliśmy hasło, teraz musimy je podać. Opcja -v, czyli tak zwany tryb gadatliwy używamy przy pierwszym logowaniu, żeby latwiej zdiagnozować ewentualne błędy. I to wszystko.
Wyłączenie możliwości logowania się na root
Sprawdźmy plik sshd_config oraz opcję PermitRootLogin, która odpowiada za logowanie się na użytkownika root:
cheops:~ # grep -i root /etc/ssh/sshd_config #PermitRootLogin yes # the setting of "PermitRootLogin without-password". #ChrootDirectory none
Jak widzimy powyżej opcja jest zakomentowana. Oznacza to mniej więcej tyle, że w tym momencie istnieje możliwość logowania się na root:
cheops:~ # ssh root@cheops The authenticity of host 'cheops (127.0.0.2)' can't be established. RSA key fingerprint is 92:6a:13:6d:70:05:3b:f6:b1:1b:3a:06:42:d0:17:d3. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'cheops' (RSA) to the list of known hosts. Password: Last login: Sat Apr 17 09:30:49 2010 from cheops Have a lot of fun...
Ale my dążymy do tego aby zabronić userom logowanie się na root. Więc wylogowujemy się:
cheops:~ # logout Connection to cheops closed.
Edytujemy więc plik sshd_config:
cheops:~ # emacs /etc/ssh/sshd_config
Oraz logujemy się ponownie:
cheops:~ # ssh root@cheops Password: Last login: Sat Apr 17 09:48:06 2010 from cheops.egipt.pl Have a lot of fun...
Jak widzimy nadal istnieje możliwość logowania się na root. Przyczyną tego stanu rzeczy jest brak restartu serwera sshd:
cheops:~ # /etc/init.d/sshd restart Shutting down SSH daemon done Starting SSH daemon done
Po restarcie serwera próbujemy logować się ponownie:
cheops:~ # ssh root@cheops Password: Password: Password: Permission denied (publickey,keyboard-interactive).