From Łukasz Graczykowski
Zadania
Zadanie 1
Wyłączyć logowanie ssh
dla użytkowników foo
oraz root
.
Zadanie 2
Zalogować się z maszyny matki na maszynę wirtualną za pomocą klucza ssh.
Zadanie 3.A
Proszę zainstalować firewall ufw, a następnie korzystając z informacji z man ufw
:
- Wyłączyć możliwość wykonywania połączeń przychodzących
- Zweryfikować brak możliwości podłączania się z serwerem ssh
- Umożliwić łączenie się na port 22 (port SSH)
- Zweryfikować że ssh działa
- Wyłączyć firewall ufw
Zadanie 3.B
- Wykonać zadanie 3.A przy użyciu graficznej wersji gufw
- Użyć programu netstat do monitorowania obecnych połączeń. Następnie włączyć nasłuch na porcie 4444 (przy użyciu
ncat
) i połączyć się przy użyciu programu telnet
. Przy użyciu ponownie wywołanego programu netstat
należy zaobserwować nowe połączenie.
- Użyć komendy last by zaobserwować ostatnie logowania.
- Włączyć logowanie w ufw, wykonać nieudaną próbę połączenia, obejrzeć plik z logami.
Zadanie 4
Proszę:
- Zainstalować serwer NFS (Network File System)
- Korzystając z
man exports
udostępnić katalog /home/<<waszlogin>>/foo
dla całego laboratorium (tj. dla sieci 192.168.1.0/24), zarówno do odczytu jak i zapisu.
- Zamontować katalog, który został udostępniony przez jedną z koleżanek/kolegów i następnie zapisać coś w tym katalogu (sprawdzić, czy obie osoby widzą tą rzecz).
Zmiana interfejsu sieciowego
Włączamy maszynę wirtualną w trybie bridged adapter. Przypomnienie:
Settings -> Network Adapters -> Attached to: Bridged Adapter, eth0
Serwer ssh
Protokół SSH poznaliśmy po krótce już na zajęciach nr 3. Jest to szyfrowany protokół komunikacyjny w architekturze klient-serwer, działający w niezabezpieczonej sieci, który umożliwia:
- bezpieczną zdalną pracę na komputerze podłączonym do Internetu,
- bezpieczne logowanie za pomocą pary kryptograficznych kluczy,
- tworzenie bezpiecznych tuneli pozwalających np. na omijanie niektórych firewalli.
Konfiguracja serwera ssh
Konfiguracja serwera ssh mieści się w katalogu /etc/ssh/sshd_config
(Uwaga! Proszę nie pomylić z ssh_config
— bez d w środku).
Aby zapoznać się z możliwościami konfiguracyjnymi ssh za pomocą tego pliku, proszę przejrzeć stronę manuala: man sshd_config
.
Zadanie 1
Proszę wyłączyć możliwość logowania ssh dla użytkowników foo
oraz root
.
Po wykonaniu zmian należy zrestartować serwer wykonując polecenie:
sudo service ssh restart
Logowanie za pomocą klucza
Logowanie na zdalną maszynę
Logowanie na zdalną maszynę:
ssh username@numer_ip
Przy pierwszym logowaniu pojawi się ostrzeżenie:
The server's host key is not cached in the registry. You
have no guarantee that the server is the computer you
think it is.
The server's rsa2 key fingerprint is:
ssh-rsa 2048 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:
Mówi ono że:
Nie łączyliście się z tym serwerem do tej pory i sygnatura tego serwera nie znajduje się w rejestrze.
System SSH nie ma pewności, że połączyliście się z właściwym serwerem - w pliku ~/.ssh/known_hosts
zabrakło sygnatury serwera (moglibyśmy ją tam np. zawczasu dodać). W takim wypadku komputer zwykle pyta (1) czy na pewno chcemy się połączyć z nieznanym serwerem, oraz (2) czy od razu dodać jego sygnaturę do rejestru.
Działanie logowania za pomocą klucza
Klient generuje parę kluczy, zwanych publicznym i prywatnym, klucze te (bez wchodzenia w szczegóły) pozwalają na wykonanie kryptograficznego podpisu jakiejś wiadomości. Klucz prywatny pozwala na podpisanie wiadomości, a publiczny na weryfikację poprawności podpisu. Mając klucz publiczny nie da się ani podpisać wiadomości, ani uzyskać klucza prywatnego.
Procedura logowania za pomocą klucza wygląda tak:
- Klient i serwer negocjują połączenie 1 do 1, którego nikt nie może podsłuchać.
- Serwer udowadnia klientowi, że jest tym serwerem do którego klient chciał się połączyć (patrz wyżej)
- Klient wysyłą prośbę: chcę zalogować się jako użytkownik taki a taki.
- Serwer odpowiada: w takim razie podpisz mi ten losowy ciąg znaków.
- Klient swoim kluczem prywatnym podpisuje ów losowy ciąg znaków.
- Serwer znajduje odpowiedni klucz publiczny i sprawdza podpis.
Klucze mają następujące przewagi nad hasłami:
- Bezpieczne hasła są bardzo trudne do zapamiętania. Klucze są zapamiętywane przez komputer, więc mogą zawierać więcej “losowości”.
- Hasło jest wysyłane w tekście jawnym na serwer, w autoryzacji kluczem publicznym w komunikacji nie pojawiają się dane które pozwalają na autoryzację.
- Hasło trzeba podawać przy każdym kolejnym logowaniu, istnieją natomiast dość standardowe metody bezpiecznego przechowywania kluczy ssh w pamięci ram komputera (hasło do klucza podaje się tylko raz przy logowaniu na komputer; my na zajęciach będziemy używali kluczy bez hasła)
Instalacja swojego klucza na serwerze
By wygenerować klucz należy wykonać polecenie ssh-keygen
, można podać hasło do klucza, ale na dziś sobie to darujemy. Polecenie to wykonujemy na komputerze, z którego chcemy się zalogować.
Polecenie ssh-keygen tworzy dwa pliki:
-
.ssh/id_rsa.pub
— zawiera klucz publiczny
-
.ssh/id_rsa
— zawiera klucz prywatny
Plik $HOME/.ssh/authorized_keys zawiera listę kluczy publicznych, po jednym w każdej linii. Klucz prywatny powiązany z dowolnym z tych kluczy publicznych może posłużyć do logowania się do serwera.
Uwaga! Zarówno folder $HOME/.ssh/
oraz pliki w środku muszą mieć uprawnienia do czytania tylko przez użytnownika (np. chmod 600).
Uwaga 2! Postępowanie - generujemy na komputerze, z którego się logujemy, klucz prywatny i publiczny. Klucz publiczny wysyłamy na komputer, na który chcemy się zalogować (do folderu ~/.ssh
). Na komputerze, na który chcemy sie zalogować kopiujemy zawartość klucza publicznego do pliku authorized_keys
.
Zadanie 2
Zalogować się z maszyny-matki na maszynę wirtualną za pomocą klucza ssh.
Instalacja firewalla
Firewall to oprogramowanie pozwalające na kontrolę pakietów IP przetwarzanych przez maszynę.
W systemach GNU/Liunux firewall jest częścią jądra systemu i można go kontrolować za pomocą polecenia iptables
, polecenie to jednak nie jest bardzo przyjazne, więc poznamy bardzo prostą nakładkę na iptables: mianowicie program ufw
.
Zadanie 3.A
Proszę zainstalować firewall ufw, a następnie korzystając z informacji z man ufw:
- Wyłączyć możliwość wykonywania połączeń przychodzących
- Zweryfikować brak możliwości podłączania się z serwerem ssh
- Umożliwić łączenie się na port 22 (port SSH)
- Zweryfikować że ssh działa
- Wyłączyć firewall ufw.
Firewall i bezpieczeństwo - ciąg dalszy
-
gufw
- graficzna nakładna na ufw
-
ufw logging on
- zablokowane próby nawiązania połączenia będą zapisywane w katalogu /var/log/
w plikach o nazwach zaczynających się od ufw
.
-
netstat
- rozbudowany program wyświetlajacy informacje o połączeniach sieciowych
- Należy wypróbować:
netstat -atunp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
Port 53: DNS
tcp 0 0 127.0.1.1:53 0.0.0.0:* LISTEN -
Port 22: SSH
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
Port 631: IPP (Internet Printing Protocol)
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN -
tcp6 0 0 :::22 :::* LISTEN -
tcp6 0 0 ::1:631 :::* LISTEN -
udp 0 0 0.0.0.0:5353 0.0.0.0:* -
udp 0 0 0.0.0.0:59398 0.0.0.0:* -
udp 0 0 127.0.1.1:53 0.0.0.0:* -
udp 0 0 0.0.0.0:68 0.0.0.0:* -
udp 0 0 194.29.175.249:123 0.0.0.0:* -
udp 0 0 127.0.0.1:123 0.0.0.0:* -
udp 0 0 0.0.0.0:123 0.0.0.0:* -
udp 0 0 0.0.0.0:631 0.0.0.0:* -
udp6 0 0 :::5353 :::* -
udp6 0 0 :::51224 :::* -
udp6 0 0 fe80::15a4:1221:4cd:123 :::* -
udp6 0 0 ::1:123 :::* -
udp6 0 0 :::123 :::* -
- last - komenda wyświetlająca informacje o ostatnich logowaniach na komputer/serwer
Zadanie 3.B
- Wykonać zadanie 3.A przy użyciu gufw
- Użyć netstat do monitorowania obecnych połączeń. Następnie włączyć nasłuch na porcie 4444 (przy użyciu ncat) i połączyć się przy użyciu programu telnet. Przy użyciu ponownie wywołanego programu netstat należy zaobserwować nowe połączenie.
- Użyć komendy last by zaobserwować ostatnie logowania.
- Włączyć logowanie w ufw, wykonać nieudaną próbę połączenia, obejrzeć plik z logami.
Instalacja serwera i klienta NFS
NFS (Network File System) to sieciowy system plików, w zasadzie jeden z wielu siecowych systemów plików, przykłady innych to:
- Samba (protokół współdzielenia plików i innych rzeczy w Windowsach)
- Lustre (klastrowy system plików)
Instalacja serwera NFS
By zainstalować narzędzia nfs należy zainstalować dwie paczki: nfs-kernel-server
oraz nfs-common
, pierwsza służy do udostępniania katalogów, druga do montowania katalogów już udostępnionych.
Zadanie 4
Proszę:
- Korzystając z man exports udostępnić katalog
/home/<<waszlogin>>/foo
dla całego laboratorium (tj. dla sieci 192.168.1.0/24), do odczytu i zapisu. Konfiguracja NFS jest dostępna w katalogu /etc/exports
.
- Zamontować sobie katalog który udostępnił jakaś koleżanka/kolega i następnie zapisać coś w tym katalogu.
Do montowania plików i katalogów służy polecenie mount <skąd> <dokąd>, <dokąd> musi być istniejącym katalogiem lokalnym. <skąd> w przypadku nfs ma postać server:/ścieżka.
Uwaga! Po zmianie pliku /etc/exports należy zrestartować serwer nfs (/etc/init.d/nfs-kernel-server restart
) oraz wykonać: /etc/init.d/rpcbind restart