Linux Ubuntu - serwer OpenSSH: Różnice pomiędzy wersjami
(Nie pokazano 2 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 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 | + | 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 |
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
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ą.