|
|
(18 intermediate revisions not shown) |
Line 5: |
Line 5: |
| ==Zadania== | | ==Zadania== |
| === Zadanie 1 === | | === Zadanie 1 === |
- | Wyłączyć logowanie <code>ssh</code> dla użytkowników <code>foo</code> oraz <code>root</code>. | + | Wyłączyć logowanie <code>ssh</code> dla użytkownika <code>foo</code>. |
| | | |
| ===Zadanie 2=== | | ===Zadanie 2=== |
Line 38: |
Line 38: |
| | | |
| ==Serwer ssh== | | ==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: | + | 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, | | * bezpieczną zdalną pracę na komputerze podłączonym do Internetu, |
Line 45: |
Line 45: |
| | | |
| ===Konfiguracja serwera ssh=== | | ===Konfiguracja serwera ssh=== |
- | Konfiguracja serwera ssh mieści się w katalogu <code>/etc/ssh/sshd_config</code> ('''Uwaga!''' Proszę nie pomylić z <code>ssh_config</code> — bez ''d'' w środku). | + | Konfiguracja serwera ssh mieści się w katalogu <code>/etc/ssh/sshd_config</code> ('''Uwaga!''' Proszę nie pomylić z <code>ssh_config</code> — bez "d" w środku). |
| | | |
| Aby zapoznać się z możliwościami konfiguracyjnymi ssh za pomocą tego pliku, proszę przejrzeć stronę manuala: <code>man sshd_config</code>. | | Aby zapoznać się z możliwościami konfiguracyjnymi ssh za pomocą tego pliku, proszę przejrzeć stronę manuala: <code>man sshd_config</code>. |
| | | |
| === Zadanie 1 === | | === Zadanie 1 === |
- | Proszę wyłączyć możliwość logowania ssh dla użytkowników <code>foo</code> oraz <code>root</code>. | + | Proszę wyłączyć możliwość logowania ssh dla użytkownika <code>foo</code>. |
| | | |
| Po wykonaniu zmian należy zrestartować serwer wykonując polecenie: | | Po wykonaniu zmian należy zrestartować serwer wykonując polecenie: |
Line 76: |
Line 76: |
| | | |
| ===Działanie logowania za pomocą klucza=== | | ===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.
| + | '''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 ([https://pl.wikipedia.org/wiki/Kryptografia_klucza_publicznego więcej]). |
| | | |
- | Procedura logowania za pomocą klucza wygląda tak: | + | 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. |
- | * 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) | + | Procedura logowania za pomocą klucza wygląda następująco: |
- | * Klient wysyłą prośbę: chcę zalogować się jako użytkownik taki a taki. | + | * 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 <code>xyz</code>. |
| * Serwer odpowiada: w takim razie podpisz mi ten losowy ciąg znaków. | | * Serwer odpowiada: w takim razie podpisz mi ten losowy ciąg znaków. |
| * Klient swoim kluczem prywatnym podpisuje ów losowy ciąg znaków. | | * Klient swoim kluczem prywatnym podpisuje ów losowy ciąg znaków. |
- | * Serwer znajduje odpowiedni klucz publiczny i sprawdza podpis. | + | * Serwer znajduje odpowiedni klucz publiczny i sprawdza poprawność podpisu. |
| | | |
| Klucze mają następujące przewagi nad hasłami: | | 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”. | + | * 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 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) | + | * 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=== | | ===Instalacja swojego klucza na serwerze=== |
| By wygenerować klucz należy wykonać polecenie <code>ssh-keygen</code>, można podać hasło do klucza, ale na dziś sobie to darujemy. Polecenie to wykonujemy na komputerze, z którego chcemy się zalogować. | | By wygenerować klucz należy wykonać polecenie <code>ssh-keygen</code>, 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: | + | Polecenie <code>ssh-keygen</code> tworzy dwa pliki: |
| | | |
- | * <code>.ssh/id_rsa.pub</code> — zawiera klucz publiczny | + | * <code>~/.ssh/id_rsa.pub</code> — zawiera klucz publiczny |
- | * <code>.ssh/id_rsa </code>— zawiera klucz prywatny | + | * <code>~/.ssh/id_rsa </code>— 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. | + | Plik <code>$HOME/.ssh/authorized_keys</code> 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 <code>$HOME/.ssh/</code> oraz pliki w środku muszą mieć uprawnienia do czytania tylko przez użytnownika (np. chmod 600). | + | <!-- |
| + | '''Uwaga!''' Zarówno folder <code>$HOME/.ssh/</code> oraz pliki w środku muszą mieć uprawnienia do czytania '''tylko''' przez użytnownika (np. <code>chmod 600</code>). |
| + | --> |
| | | |
- | '''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 <code>~/.ssh</code>). Na komputerze, na który chcemy sie zalogować kopiujemy zawartość klucza publicznego do pliku <code>authorized_keys</code>. | + | '''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 <code>~/.ssh</code>). |
| + | * Na komputerze, na który chcemy sie zalogować kopiujemy zawartość klucza publicznego do pliku <code>~/.ssh/authorized_keys</code>. |
| + | * Przed pierwszym logowaniem, w nowszych wersjach Ubuntu, musimy również na maszynie, z której się będziemy logować, wykonać polecenie <code>ssh-add</code> (komenda dodaje dane klucza prywatnego do specjalnego agenta ssh, <code>ssh-agent</code>, który zarządza kluczami prywatnymi na danej maszynie). |
| | | |
| ===Zadanie 2=== | | ===Zadanie 2=== |
- | Zalogować się z maszyny-matki na maszynę wirtualną za pomocą klucza ssh. | + | Zalogować się z maszyny wirtualnej na maszynę-matkę za pomocą klucza ssh. |
| | | |
| ==Instalacja firewalla== | | ==Instalacja firewalla== |
| Firewall to oprogramowanie pozwalające na kontrolę pakietów IP przetwarzanych przez maszynę. | | 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 <code>iptables</code>, polecenie to jednak nie jest bardzo przyjazne, więc poznamy bardzo prostą nakładkę na iptables: mianowicie program <code>ufw</code>. | + | W systemach GNU/Linux firewall jest częścią jądra systemu i można go kontrolować za pomocą polecenia <code>iptables</code>. Polecenie to jednak nie jest bardzo przyjazne, więc poznamy bardzo prostą nakładkę na <code>iptables</code>, którą jes program <code>ufw</code>. |
| | | |
| ===Zadanie 3.A=== | | ===Zadanie 3.A=== |
- | Proszę zainstalować firewall ufw, a następnie korzystając z informacji z man ufw: | + | Proszę zainstalować program <code>ufw</code>, a następnie korzystając z informacji z <code>man ufw</code>: |
| | | |
| * Wyłączyć możliwość wykonywania połączeń przychodzących | | * Wyłączyć możliwość wykonywania połączeń przychodzących |
Line 120: |
Line 128: |
| * Umożliwić łączenie się na port 22 (port SSH) | | * Umożliwić łączenie się na port 22 (port SSH) |
| * Zweryfikować że ssh działa | | * Zweryfikować że ssh działa |
- | * Wyłączyć firewall ufw. | + | * Wyłączyć firewall. |
| | | |
| ==Firewall i bezpieczeństwo - ciąg dalszy== | | ==Firewall i bezpieczeństwo - ciąg dalszy== |
Line 152: |
Line 160: |
| udp6 0 0 :::123 :::* - | | udp6 0 0 :::123 :::* - |
| | | |
- | * last - komenda wyświetlająca informacje o ostatnich logowaniach na komputer/serwer | + | * <code>last</code> - komenda wyświetlająca informacje o ostatnich logowaniach na komputer/serwer |
| | | |
| ===Zadanie 3.B=== | | ===Zadanie 3.B=== |
- | * Wykonać zadanie 3.A przy użyciu gufw | + | * Wykonać zadanie 3.A przy użyciu <code>gufw</code> |
- | * 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ć <code>netstat</code> do monitorowania obecnych połączeń. Następnie włączyć nasłuch na porcie 4444 (przy użyciu <code>ncat</code>) i połączyć się przy użyciu programu <code>telnet</code>. Przy użyciu ponownie wywołanego programu <code>netstat</code> należy zaobserwować nowe połączenie. |
- | * Użyć komendy last by zaobserwować ostatnie logowania. | + | * Użyć komendy <code>last</code> by zaobserwować ostatnie logowania. |
- | * Włączyć logowanie w ufw, wykonać nieudaną próbę połączenia, obejrzeć plik z logami. | + | * Włączyć logowanie w <code>ufw</code>, wykonać nieudaną próbę połączenia, obejrzeć plik z logami. |
| | | |
| ==Instalacja serwera i klienta NFS== | | ==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: | + | 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 Windowsach) | + | * Samba (protokół współdzielenia plików i innych rzeczy w systemie Windows) |
| * Lustre (klastrowy system plików) | | * Lustre (klastrowy system plików) |
| | | |
| ===Instalacja serwera NFS=== | | ===Instalacja serwera NFS=== |
- | By zainstalować narzędzia nfs należy zainstalować dwie paczki: <code>nfs-kernel-server</code> oraz <code>nfs-common</code>, pierwsza służy do udostępniania katalogów, druga do montowania katalogów już udostępnionych. | + | By zainstalować narzędzia NFS należy zainstalować dwie paczki: <code>nfs-kernel-server</code> oraz <code>nfs-common</code>. Pierwsza z nich służy do udostępniania katalogów, druga do montowania katalogów już udostępnionych. |
| | | |
| ===Zadanie 4=== | | ===Zadanie 4=== |
| Proszę: | | Proszę: |
| | | |
- | * Zainstalować NFS | + | * Zainstalować NFS. |
- | | + | * 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>. |
- | * Korzystając z man exports udostępnić katalog <code>/home/<<waszlogin>>/foo</code> dla całego laboratorium (tj. dla sieci 192.168.1.0/24), do odczytu i zapisu. 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 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. | + | 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 /etc/exports należy zrestartować serwer nfs (<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> |
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:
Aby zapoznać się z możliwościami konfiguracyjnymi ssh za pomocą tego pliku, proszę przejrzeć stronę manuala: man sshd_config
.
Nie łączyliście się z tym serwerem do tej pory i sygnatura tego serwera nie znajduje się w rejestrze.
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.
Zalogować się z maszyny wirtualnej na maszynę-matkę za pomocą klucza ssh.
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
.
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: