May 19, 2024, Sunday, 139

SK Zadanie 6

From Łukasz Graczykowski

(Difference between revisions)
Jump to: navigation, search
(Serwer ssh)
(Zadanie 4)
 
Line 180: Line 180:
* Zainstalować NFS.
* Zainstalować NFS.
-
* Korzystając z <code>man exports</code> udostępnić katalog <code>/home/<<waszlogin>>/foo</code> dla całego laboratorium (tj. dla sieci 192.168.1.0/24), zarówno do odczytu jak i zapisu. Konfiguracja NFS jest dostępna w katalogu <code>/etc/exports</code>.
+
* Korzystając z <code>man exports</code> udostępnić katalog <code>/home/<<waszlogin>>/foo</code> dla kolegi/koleżanki w parze (tj. dla numeru IP drugiej osoby), zarówno do odczytu jak i zapisu (należy zmienić uprawnienia folderu na 777 (chmod) oraz właściciela folderu na nobody:nogroup (chown)). Konfiguracja NFS jest dostępna w katalogu <code>/etc/exports</code>.
* Zamontować sobie katalog, który został udostępniony przez jedną z koleżanek/kolegów i następnie zapisać coś w tym katalogu.
* Zamontować sobie katalog, który został udostępniony przez jedną z koleżanek/kolegów i następnie zapisać coś w tym katalogu.
-
Do montowania plików i katalogów służy polecenie <code>mount <skąd> <dokąd></code>, gdzie <code><dokąd></code> musi być '''istniejącym katalogiem''' lokalnym. Z kolei <code><skąd></code> w przypadku <code>nfs</code> ma postać <code>server:/ścieżka</code>.
+
Do montowania plików i katalogów służy polecenie <code>mount <skąd> <dokąd></code>, gdzie <code><dokąd></code> musi być '''istniejącym katalogiem''' lokalnym. Z kolei <code><skąd></code> w przypadku <code>nfs</code> ma postać <code>IP:ścieżka(rw,sync)</code>.
'''Uwaga!''' Po zmianie pliku <code>/etc/exports</code> należy zrestartować serwer <code>nfs</code> (<code>/etc/init.d/nfs-kernel-server restart</code>) oraz wykonać: <code>/etc/init.d/rpcbind restart</code>
'''Uwaga!''' Po zmianie pliku <code>/etc/exports</code> należy zrestartować serwer <code>nfs</code> (<code>/etc/init.d/nfs-kernel-server restart</code>) oraz wykonać: <code>/etc/init.d/rpcbind restart</code>

Latest revision as of 09:55, 15 December 2022

Contents

Zadania

Zadanie 1

Wyłączyć logowanie ssh dla użytkownika foo.

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 poprzednich zajęciach. 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żytkownika foo.

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. 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. Oczywiście, gdybyśmy ręcznie dodali sygnaturę serwera do tego pliku, ssh nie wyświetliłby tego komentarza nawet za pierwszym połączeniem.

Działanie logowania za pomocą klucza

Kryptografia klucza publicznego (nazywana również kryptografią asymetryczną) to rodzaj kryptografii, w którym używa się zestawów dwu lub więcej powiązanych ze sobą kluczy, umożliwiających wykonywanie różnych czynności kryptograficznych. Jeden z kluczy może być udostępniony publicznie bez utraty bezpieczeństwa danych zabezpieczanych tym kryptosystemem (więcej).

Klient generuje parę kluczy, zwanych publicznym i prywatnym, klucze te (bez wchodzenia w szczegóły) pozwalają na wykonanie kryptograficznego podpisu wiadomości. Klucz prywatny pozwala na podpisanie wiadomości, a publiczny na weryfikację poprawności podpisu i jej otwarcie. Mając klucz publiczny nie da się ani podpisać wiadomości, ani uzyskać klucza prywatnego.

Procedura logowania za pomocą klucza wygląda następująco:

  • 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 xyz.
  • 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 poprawność podpisu.

Klucze mają następujące przewagi nad hasłami:

  • Bezpieczne hasła są bardzo trudne do zapamiętania (długi ciąg losowych znaków). 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 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 ~/.ssh/authorized_keys.
  • Przed pierwszym logowaniem, w nowszych wersjach Ubuntu, musimy również na maszynie, z której się będziemy logować, wykonać polecenie ssh-add (komenda dodaje dane klucza prywatnego do specjalnego agenta ssh, ssh-agent, który zarządza kluczami prywatnymi na danej maszynie).

Zadanie 2

Zalogować się z maszyny wirtualnej na maszynę-matkę za pomocą klucza ssh.

Instalacja firewalla

Firewall to oprogramowanie pozwalające na kontrolę pakietów IP przetwarzanych przez maszynę.

W systemach GNU/Linux 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, którą jes program ufw.

Zadanie 3.A

Proszę zainstalować program 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.

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, który pozwala na dostęp do wybranych plików wielu komputerom w danej sieci komputerowej. Oprócz NFS istnieje wiele innych sieciowych systemów plików. Inne ważne to:

  • Samba (protokół współdzielenia plików i innych rzeczy w systemie Windows)
  • 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 z nich służy do udostępniania katalogów, druga do montowania katalogów już udostępnionych.

Zadanie 4

Proszę:

  • Zainstalować NFS.
  • Korzystając z man exports udostępnić katalog /home/<<waszlogin>>/foo dla kolegi/koleżanki w parze (tj. dla numeru IP drugiej osoby), zarówno do odczytu jak i zapisu (należy zmienić uprawnienia folderu na 777 (chmod) oraz właściciela folderu na nobody:nogroup (chown)). Konfiguracja NFS jest dostępna w katalogu /etc/exports.
  • Zamontować sobie katalog, który został udostępniony przez jedną z koleżanek/kolegów i następnie zapisać coś w tym katalogu.

Do montowania plików i katalogów służy polecenie mount <skąd> <dokąd>, gdzie <dokąd> musi być istniejącym katalogiem lokalnym. Z kolei <skąd> w przypadku nfs ma postać IP:ścieżka(rw,sync).

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