Zajęcia 5: Administracja systemem Linux ======================================= Zmiana interfejsu sieciowego ************************************ * Wyłączamy maszyny wirtualne * Settings -> Network Adapters -> Attached to: Bridged Adapter, eth0. * Startujemy maszyny. Serwer ``ssh`` -------------- SSH to standard protokołów komunikacyjnych, które umożliwiają: * Bezpieczną zdalną pracę na komputerze podłączonym do Internetu * Bezpieczne logowanie za pomocą pary kryptograficznych kluczy * Tworzenie bezpiecznych tuneli pozwalających na np. omijanie niektórych firewalli. Konfiguracja serwera ``ssh`` ---------------------------- Konfiguracja serwera mieści się w katalogu ``/etc/ssh/sshd_config`` (proszę nie pomylić z ``ssh_config`` --- bez ``d`` w środku). By zapoznać się z tym co można skonfigurować w tym pliku, proszę przejrzeć  stronę manuala: ``man sshd_config``. Zadanie 1 ********* Wyłączyć logowanie 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 za pomocą klucza publicznego jest "lepszą" alternatywą dla logowania za pomocą haseł. Logowanie na zdalną maszynę ********************************* Logowanie na zdalną maszynę:: ssh username@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. * System SSH nie ma pewności, że połączyliście się z właściwym serwerem (SSH potrafi zweryfikować że połączyliście się z serwerem posiadającym dany klucz publiczny). Działanie logowania za pomocą klucza ************************************ Klient generuje parę kluczy, zwanych publicznym i prywatnym, klucze te (nie będę wchodził w kryptograficzne 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. .. note:: 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ć (zaraz o tym jak to robi) * 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`` stworzyło 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``). W komputerze, na który chcemy sie zalogować kopiujemy zawartość klucza publicznego do pliku ``authorized_keys``. Zadanie 2 ********* Zalogować się na maszynę virtualną 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 ********* Proszę zainstalować firewall ``ufw``, a następnie korzystając z informacji z ``man ufw``: 1. Wyłączyć możliwość wykonywania połączeń przychodzących 2. Zweryfikować brak możliwości podłączania się z serwerem ssh 3. Umożliwić łączenie się na port ``22`` (port SSH) 4. Zweryfikować że ssh działa 5. Wyłączyć firewall ufw. Instalacja serwera i klienta NFS -------------------------------- NFS to sieciowy system plików, w zasadzie jeden z wielu siecowych systemów plików, przykłady innych to: * Samba (protokółw spół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ę: 1. Zainstalować NFS 2. Konfiguracja NFS jest w katalogu ``/etc/exports``, korzystając z ``man exports`` udostępnić katalog ``/home/<>/foo`` dla całego laboratorium (tj. dla sieci ``192.168.1.0/24``), do odczytu i zapisu 3. 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 ``, ```` musi być **istniejącym** katalogiem lokalnym. ```` 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``