Linux Ubuntu - serwer OpenSSH

Z SOiSK
Przejdź do nawigacji Przejdź do wyszukiwania


Po co nam serwer SSH?

Zainstalowanie serwera ssh pozwala na zdalną pracę w środowisku tekstowym. Usługa ta zapewnia bezpieczny, szyfrowany kanał między dwoma komputerami.

Instalacja serwera OpenSSH

sudo apt install openssh-server

Sprawdzenie czy działa

Sprawdzenie statusu serwera dokonujemy poleceniem sudo service sshd status. Jak widać serwer jest aktywny.

uczen@uczen-VirtualBox:~$ sudo service sshd status
● ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: e>
     Active: active (running) since Thu 2022-02-24 23:00:12 CET; 31s ago
       Docs: man:sshd(8)
             man:sshd_config(5)
   Main PID: 1979 (sshd)
      Tasks: 1 (limit: 4632)
     Memory: 1.0M
     CGroup: /system.slice/ssh.service
             └─1979 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups

lut 24 23:00:12 ubuntu systemd[1]: Starting OpenBSD Secure Shell server...
lut 24 23:00:12 ubuntu sshd[1979]: Server listening on 0.0.0.0 port 22.
lut 24 23:00:12 ubuntu sshd[1979]: Server listening on :: port 22.
lut 24 23:00:12 ubuntu systemd[1]: Started OpenBSD Secure Shell server.
lines 1-15/15 (END)

Katalogi i pliki serwera

/etc/ssh

W tym katalogu znajdują się pliki konfiguracyjne

/etc/ssh/ssh_config

Plik z ustawieniami klientów. Użytkownicy lokalni mogą nadpisywać plikiem ~/.ssh/config

/etc/ssh/sshd_config

Domyślne ustawienia dla serwera SSH.

/etc/ssh/ssh_host_dsa_key i /etc/ssh/ssh_host_dsa_key.pub

Pliki zawierają klucze DSA prywatny i publiczny.

/etc/ssh/ssh_host_rsa i /etc/ssh/ssh_host_rsa.pub

Pliki zawierają klucze RSA prywatny i publiczny.

/etc/init.d/ssh

Skrypt init. Jak zawsze można użyć start, stop, restart, status do zarządzania serwerem, np. /etc/init.d/ssh restart

/var/log/auth.log

Dziennik zdarzeń, czyli logi serwera.


Łączenie się z serwerem ssh z linuksa

Użyjemy polecenia ssh login@host, czyli na przykład ssh uczen@192.168.0.96


Łączenie się z serwerem ssh z windowsa

Działa to tak samo jak i na linuksie. Użyjemy polecenia ssh login@host, czyli na przykład ssh uczen@192.168.0.96

Za pierwszym razem musimy zaakceptować przesłanie odcisku palca. Później nie ma tego monitu.

Bezpieczeństwo SSH

Jeden z najczęstszym ataków na serwery Linux to atak brutalnej siły (brute force) przez ssh. Czy nasz serwer jest odpowiednio zabezpieczony?

Plik /etc/ssh/sshd_config

Plik odpowiada za ustawienia serwera.

Blokowanie logowania na konto root

Jest tam ustawienie PermitRootLogin ustawione na prohibit-password, czyli serwer nie zaloguje na konto root. Najlepiej nie dopuszczać do logowania na roota. Tak oprócz hasła, będzie musiał zgadnać jeszce login. Ponadto nie będzie miał pełnych praw. W Ubuntu co prawda koto root jest ono wyłączone, więc logowanie nie powiodłoby się, nawet przy innych opcjach w sshd_config.

Próba logowania przy włączonym koncie root wygląda tak:

 PS C:\Users\jarek> ssh root@192.168.0.96
root@192.168.0.96's password:
Permission denied, please try again.

Zmiana domyślnego portu

W pliku /etc/ssh/sshd_config mozemy zamienić domyślny port 22 na inny, w tym celu odnajdujemy wpis #port22, usuwamy komentarz i zmieniamy nr portu. Następnie przeładowujemy serwer ssh sudo systemctl reload sshd

Jak widać zalogowaliśmy się używając nowego portu. Na porcie 22 połączenie nie powiodło się.

Użycie protokołu 2

Serwer działa na protokole 2. Protokół 1 nie jest wspieramy. Poniżej próba zalogowania z użyciem protokołu 1.

PS C:\Users\jarek> ssh -1 uczen@192.168.0.99 -p 1122
SSH protocol v.1 is no longer supported

Zablokowanie użycia pustego hasła

Opcja powinna być ustawiona na PermitEmptyPasswords no

Ograniczenie limitu prób wpisanie hasła

Ustawiłem na 2 próby, usuwając komentarz i modyfikując liczbę MaxAuthTries. Następnie przeładowujemy serwer ssh sudo systemctl reload sshd

Jak widać to działa

Odpowiednie zdefiniowanie białych i czarnych list

Nie robimy tego przez sam serwer ssh, ale przez zaporę czy listę ACL, w konkretnych programach, jak TCP Wrapper.

Uwierzytelnienie na podstawie kluczy

Hackerzy mogą próbować złamać hasło siłowo, dlatego najlepiej uwierzytelniać się za pomocą kluczy, a nie haseł.

Wyłączenie uwierzytelniania hasłem

Robimy to wyłącznie wtedy, gdy działa uwierzytelnianie na podstawie kluczy. Zmieniamy #PasswordAuthentication yes na PasswordAuthentication no

Użycie kluczy do uwierzytelnienia

Generowanie kluczy

Pierwszym krokiem będzie wygenerowanie kluczy - prywatnego i publicznego. Służy do tego polecenie ssh-keygen -t rsa. Jak widać tworzymy klucze rsa.

uczen@uczen-VirtualBox:/etc$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/uczen/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/uczen/.ssh/id_rsa
Your public key has been saved in /home/uczen/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:08n5SJnD+wjrVjhGGqFoCxZ75OTzv+ST2rxWGA94Dog uczen@uczen-VirtualBox
The key's randomart image is:
+---[RSA 3072]----+
|                 |
| . o  .          |
|  O.....         |
|.Eo*.o.+.+ =     |
|.o..o ++S.@      |
|  .  ..o+=.=     |
|      .o+oo .    |
|      ==.o o     |
|     .oO* . .    |
+----[SHA256]-----+

W przypadku Windows postępujemy analogicznie.

C:\WINDOWS\system32>ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\jarek/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in C:\Users\jarek/.ssh/id_rsa.
Your public key has been saved in C:\Users\jarek/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:u9m301j+kfvAKDkcmJFSAv843+qgG5eiWhpkxi6VCfE jarek@DESKTOP-VM5QQ93
The key's randomart image is:
+---[RSA 3072]----+
|.   ... .        |
| o   . o .       |
|. E   o o        |
|.. o   + +       |
| =+   o S .      |
|=.     + + o o. .|
|o.. o + o * .=oo |
|.+ . = . = o+ o.o|
|o.. o. .= ...o o+|
+----[SHA256]-----+

Kopiowanie kluczy na serwer SSH

Mamy dwa klucze, prywatny i publiczny. Klucz publiczny musi znaleźć się na serwerze. Klucz prywatny zostaje u nas i musi być strzeżony. Czyli kopiujemy klucz id_rsa.pub na serwer ssh. Możemy wykorzystać polecenie scp, działa na systemach Windows, jak i Linux.

scp id_rsa.pub uczen@192.168.0.100:\home\uczen\.ssh

Zadziała jeśli będziecie w tej samej lokalizacji co plik z kluczem (jak nie to wpisujecie pełną ścieżkę), jeśli podacie prawidłowy adres ip (ten jest z mojej sieci) oraz prawidłowy login użytkownika (niekoniecznie macie użytkownika uczen)

Następnie dopisujemy jego zawartość do pliku .ssh/authorized_keys w katalogu domowym użytkownika na którego się logujemy w moim wypadku użytkownika uczen. Może to wyglądać tak: sudo cat id_rsa.pub >> .ssh/authorized_keys. Oczywiście plik id_rsa.pub mam w katalogu domowym użytkownika uczen. Jak masz inaczej to zmodyfikuj ścieżkę.

A tak wygląda skopiowany klucz

uczen@uczen-VirtualBox:~/.ssh$ cat authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCteD19ZyhMOhDSa+dV5z90YHB8asGzFGtkwa8UdxASJzlNY85yQCN/rOKQpkbdZD5xM2bUR8TrtBE9iatp+5FX2VNS7DsNEfBKKfdmoPXYm6mPFX7szIABo6EpQ4J2wxixgWOfTkGpOR0zHPkjX+e7P9nEHDhNOTYFK4IgR17WAeTP+iZx6c7ROV570ts+F1TqeEk5e6G9lYZBKje90g7h7fKEBBsu7ihG79B/uaYVVmOBwiheS4tL/Usb8u+PZ7v7tc1ljzXpuMgiLf7js3DdqEk0SfwB3myaHPjwUr2nsSU7ETcTdOEhF9T8gVKdfS6jWmDoeK5Uf4Q3Hkmpq3CPJ5vIYmET+ycnxbla0PJmKf8VXolE78MpQ+lEFZG+0RDRckBT3HHlrZSITbITVU/cfPjwawW1TU0b6sZSCf4Ox+2VWDH9kDwfLuSS1U1dPYoDzeDBQWOzn9W12Cb2rGbTwOq9xNNQWRjaiw58QsxOR5RtOWTNru6rMn6VomYs2is= jarek@DESKTOP-VM5QQ93

Logowanie z wykorzystaniem klucza

Jak widać nie pyta mnie o hasło. Po połączeniu od razu następuje zalogowanie.


Zadanie z SSH z egzaminu zawodowego z czerwca 2021 (zadanie 3)

Zadanie z wykorzystaniem ssh było banalne. Oto jego treść. Korzystając programu PuTTY, nawiąż połączenie SSH z serwerem Linux i za pomocą polecenia systemowego sprawdź bieżącą ścieżkę dyskową na serwerze.

Uruchamiamy program PuTTY. Wpisujemy adres IP serwera ssh. Port i typ połączenia domyślnie wskazuje na ssh. UWAGA: adres wpisany przeze mnie ma się nijak do egzaminu, tam był inny.

Akceptujemy przesłanie odcisku palca.

Logujemy się do serwera ssh.

Jak widać logowanie powiodło się.

Wykonujemy drugą częśc zadania egzaminacyjnego, to znaczy wydajemy polecenie pwd, aby sprawdzić bieżącą ścieżkę dyskową.