Linux Ubuntu - serwer OpenSSH: Różnice pomiędzy wersjami

Z Systemy operacyjne i sieci komputerowe
Przejdź do nawigacji Przejdź do wyszukiwania
(Utworzono nową stronę "__FORCETOC__ ==Po co nam serwer SSH?== Zainstalowanie serwera ssh pozwala na zdalną pracę w środowisku tekstowym. Usługa ta zapewnia bezpieczny, szyfrowany kanał...")
 
 
(Nie pokazano 3 pośrednich wersji utworzonych przez tego samego użytkownika)
Linia 7: Linia 7:
 
==Instalacja serwera OpenSSH==
 
==Instalacja serwera OpenSSH==
  
<code>sudo install openssh-server</code>
+
<code>sudo apt install openssh-server</code>
  
 
==Sprawdzenie czy działa==
 
==Sprawdzenie czy działa==
Linia 73: Linia 73:
 
Działa to tak samo jak i na linuksie. Użyjemy polecenia <code>ssh login@host</code>, czyli na przykład <code>ssh uczen@192.168.0.96</code>
 
Działa to tak samo jak i na linuksie. Użyjemy polecenia <code>ssh login@host</code>, czyli na przykład <code>ssh uczen@192.168.0.96</code>
  
[[Plik:ssh-soisk0.png]]
+
[[Plik:ssh-soisk0.png|800px]]
  
 
Za pierwszym razem musimy zaakceptować przesłanie odcisku palca. Później nie ma tego monitu.
 
Za pierwszym razem musimy zaakceptować przesłanie odcisku palca. Później nie ma tego monitu.
Linia 104: Linia 104:
 
Jak widać zalogowaliśmy się używając nowego portu. Na porcie 22 połączenie nie powiodło się.
 
Jak widać zalogowaliśmy się używając nowego portu. Na porcie 22 połączenie nie powiodło się.
  
[[Plik:ssh-soisk8.png]]
+
[[Plik:ssh-soisk8.png|800px]]
  
 
===Użycie protokołu 2===
 
===Użycie protokołu 2===
Linia 127: Linia 127:
 
Jak widać to działa
 
Jak widać to działa
  
[[Plik:ssh-soisk10.png]]
+
[[Plik:ssh-soisk10.png|800px]]
  
 
===Odpowiednie zdefiniowanie białych i czarnych list===
 
===Odpowiednie zdefiniowanie białych i czarnych list===
Linia 199: Linia 199:
 
===Kopiowanie kluczy na serwer SSH===
 
===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. 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: <code>sudo cat id_rsa.pub >> .ssh/authorized_keys</code>. Oczywiście plik id_rsa.pub mam w katalogu domowym użytkonika uczen. Jak masz inaczej to zmodyfikuj ścieżkę.
+
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 <code>scp</code>, działa na systemach Windows, jak i Linux.
 +
<pre>
 +
scp id_rsa.pub uczen@192.168.0.100:\home\uczen\.ssh
 +
</pre>
 +
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: <code>sudo cat id_rsa.pub >> .ssh/authorized_keys</code>. 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
 
A tak wygląda skopiowany klucz
Linia 211: Linia 217:
 
Jak widać nie pyta mnie o hasło. Po połączeniu od razu następuje zalogowanie.
 
Jak widać nie pyta mnie o hasło. Po połączeniu od razu następuje zalogowanie.
  
[[Plik:ssh-soisk11.png]]
+
[[Plik:ssh-soisk11.png|800px]]
  
  
Linia 229: Linia 235:
 
Logujemy się do serwera ssh.
 
Logujemy się do serwera ssh.
  
[[Plik:ssh-soisk4.png]]
+
[[Plik:ssh-soisk4.png|800px]]
  
 
Jak widać logowanie powiodło się.
 
Jak widać logowanie powiodło się.
  
[[Plik:ssh-soisk5.png]]
+
[[Plik:ssh-soisk5.png|800px]]
  
 
Wykonujemy drugą częśc zadania egzaminacyjnego, to znaczy wydajemy polecenie <code>pwd</code>, aby sprawdzić bieżącą ścieżkę dyskową.
 
Wykonujemy drugą częśc zadania egzaminacyjnego, to znaczy wydajemy polecenie <code>pwd</code>, aby sprawdzić bieżącą ścieżkę dyskową.
  
[[Plik:ssh-soisk6.png]]
+
[[Plik:ssh-soisk6.png|800px]]
  
  
 
[[Category:Linux]]
 
[[Category:Linux]]

Aktualna wersja na dzień 10:17, 17 lut 2023


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

Ssh-soisk0.png

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

Ssh-soisk7.png

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

Ssh-soisk8.png

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

Ssh-soisk9.png

Jak widać to działa

Ssh-soisk10.png

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.

Ssh-soisk11.png


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.

Ssh-soisk2.png

Akceptujemy przesłanie odcisku palca.

Ssh-soisk3.png

Logujemy się do serwera ssh.

Ssh-soisk4.png

Jak widać logowanie powiodło się.

Ssh-soisk5.png

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

Ssh-soisk6.png