Zajęcia 1: Instalacja i podstawy administracji systemu Debian ============================================================= .. contents:: Spis treści Filozofia Unixa *************** .. epigraph:: Do one thing and do it well - Write programs that do one thing and do it well. Write programs to work together. Write programs to handle text streams, because that is a universal interface. Everything is file - Ease of use and security is offered by treating hardware as a file. Small is beautiful. Store data and configuration in flat text files - Text file is a universal interface. Easy to create, backup and move to another system. Use shell scripts to increase leverage and portability - Use shell script to automate common tasks across various UNIX / Linux installations. Chain programs together to complete complex task - Use shell pipes and filters to chain small utilities that perform one task at time. Choose portability over efficiency. Keep it Simple, Stupid (KISS). Instalacja systemu operacyjnego (w maszynie wirtualnej) ******************************************************* Wirtualizacja --- pozwala uruchomić **jednocześnie** wiele systemów operacyjnych na tej samej maszynie * **Host** (lub "matka") --- system, w którym urcuomione są inne systemy operacyjne (poprzez odpowiednie oprogramowanie) * **Gość** --- system, który jest uruchomiony w oprogramowaniu symulującym komputer, które działa na hoście Kiedy wirtualizacja jest przydatna: * Kiedy systemem matką jest Linux, a musimy pracować na Windows'ie * Wirtualizacji używa się w dużych zespołach programistycznych --- każdy projekt ma dedykowany szablon maszyn wirtualnych, który jest skonfigurowany pod potrzeby tego projektu. W ten sposób programista może pracować nad dwoma projektami, które wymagają różnych konfiguracju systemu operacyjnego. * Wirtualizacja jest używana przy wdrażaniu aplikacji. Na jednym serewerze może działać wiele aplikacji. Jeśli każda aplikacja jest na swojej maszynie wirtualnej wszystkie aplikacje są od siebie całkowicie odizolowane, mogą działać na różnych systemach operacyjnych, mieć przypisane inne adresy IP, można je oddzielnie włączać i wyłączać. Stworzenie maszyny wirtualnej: 20 min ------------------------------------- 1. Włączenie kreatora tworzenia maszyn wirtualnych (``Machine`` -> ``New``) 2. Nazwa: Wasze imie i nazwisko (``jan-kowalski``) 3. Operating System Linux, Version Debian 64bit .. note:: Konfigurujemy VirtualBox'a tak, że systemem gościem będzie GNU/Linux Debian w wersji o 64 bitowej architekturze procesora (chodzi tu o architekturę **maszyny gościa**, można na 64-bitowym hoście ustawić 32-bitową maszynę wirtualną --- na odwrót nie jest to możliwe). 4. Memory: **ustaw 1GB**. Pozwala to określić ile z pamięci RAM systemu host jest widoczne dla maszyny wirtualnej. Ustawienie to można łatwo zmienić. 5. Stworzenie wirtualnego dysku: Create New .. note:: Dyski maszyny wirtualej widzoczne są jako pliki na maszynie matce. Teraz konfigurujemy taki dysk. 1. Rodzaj dysku: ``VDI``. Jest to natywny format dysków VirtualBoksa. 2. Na następnej karcie: Dynamically allocated: w tym formacie rozmiar pliku z dyskiem rośnie w trakcie pracy. 3. Położenie. Bez zmian. Domyślnie dysk zapisze się w katalogu ``~`` 4. Size: ``8GB``. .. note:: Dla praktycznych zastosowań radzę wybrać większy dysk. Zmiana rozmiaru dysku po utworzeniu jest nietrywialna. Po stworzeniu maszyny wirtualnej, należy umieścić obraz płyty w wirtualnym napędzie CD. By to zrobić należy wybrać ``Settings``, dalej ``Storage`` kliknąć na ikonce dysku CD, wybrać: "Choose Virtual Optical Disk File", następnie wybrać obraz z pliku ``/opt/sk/shared/iso/*iso`` (Obraz płyty instalacyjnej debiana 8.1). .. figure:: zaj1/open-cdrom.png Wybór płyty. Instalacja w domu ----------------- 1. Virtualboxa można pobrać stąd: https://www.virtualbox.org/wiki/Downloads 2. Płytę instalacyjną Debiana stąd: http://cdimage.debian.org/debian-cd/8.2.0/amd64/iso-cd/debian-8.2.0-amd64-CD-1.iso Instalacja systemu Debian: 45 min --------------------------------- 1. Language: English. 2. Country: Poland 3. Locale: ``en_US.utf8`` 4. Hostname: ``debian`` 5. Domain: ``dowolne`` 6. Wybór hasła ``root``. Pozostawiamy puste .. note:: Konto roota jest kontem administracyjnym zawierającym wszystkie uprawnienia. Dobrą praktyką bezpieczeństwa jest uniemożliwienie logowania na konto roota. Więcej w :doc:`zaj1/admin` 7. Użytkownik i hasło. Proszę wybrać swoje imie i nazwisko i hasło: ``student``. 8. Partycjonowanie dysków. .. note:: Polecam zapoznanie się hierarchią systemu plików w systemie UNIX: :doc:`zaj1/fs` a. Wybieramy opcję Manual. b. Tworzymy dwie partycje: **Partycję na główny system plików** Parametry: 1. Rozmiar 7GB 2. Typ ``primary`` 3. Format ``ext4`` 4. Mount point ``/`` .. note:: W tej konfiguracji wszystkie dane będą na jednej partycji. W produkcyjnych środowiskach raczej przydziela się partycje na wybrane podkatalogi, na przykład ``/home`` jest na oddzielnej partycji. **Partycję na plik wymiany** 1. Rozmair (reszta wolnej przestrzeni) 2. Typ: ``Logical`` 3. Use as: ``swap`` .. note:: Obszar wymiany jest obszarem na dysku, do którego system operacyjnu może kopiować zawartość pamięci ``RAM``, gdy pamięci tej zbyt mało. W Windowsie plik wymiany jest plikiem na jednej z partycji, w UNIXach jest on z reguły oddzielną partycją. .. note:: Uwaga: Jeśli instalujecie Debiana w domu, możecie spokojnie użyć  opcji "Guided". 9. Scan another CD: No 10. Use network mirror: yes, Poland, ``ftp.pl.debian.org`` 11. Popularity contest: No 12. Software Selection: a. Debian desktop Enviorment b. Standard system utilities 13. Install GRUB to master boot record: wybieramy ``yes``. Następnie Wybieracie ``/dev/sda...``. .. note:: Grub (Grand Unified Boot Loader) zarządza ładowaniem systemu operacyjnego (i pozwala wybrać odpowiedni jeśli jest kikla systemów do zastosowania). Instalacja Guest Additions -------------------------- Proszę wykonać: .. code-block:: bash sudo aptitude install virtualbox-guest-utils Ustawienia sieci w narzędziu VirtualBox --------------------------------------- 1. Wchodzimy w ustawienia maszyny wiertualnej (zaznaczyć i kliknąć settings). 2. Ustawienia dysków są pod ``Network``. 3. Nie dokonujemy zmian, ale warto wiedzieć jakie są możliwości. Do maszyny wirtualnej można podpiąć 4 karty sieciowe. Każda z tych kart może działać w takich trybach: .. warning:: Opisy te mogą się wydać enigmatyczne, ale przy odrobinie szczęścia, po kolejnych wykładach będą jasne. ``NAT`` Maszyna dziecko funkcjonuje w wirtualnej podsieci, w której rolę bramy pełni maszyna matka. Można skonfigurować przekierowania portów, tak, by połączenie do maszyny matki na port X było przekierowane na daną maszynę wirtualną. Jest to najprostsze rozwiązanie. ``Host-only-network`` Dana karta sieciowa jest wpięta w wirtualną sieć na komputerze matce, ma w tej sieci dostęp do: * Wszystkich uruchomionych maszyn wirtualnych * Maszyny matki Dane z tej sieci nie wchodzą na zewnątrz maszyny matki. Warto skorzystać z takiej sieci jeśli: * Dane, które wynieniają między sobą maszyny wirtualne są poufne. * Jeśli chcemy mieć pełną kontrolę nad adresami IP maszyn w wirtualnej sieci. ``Bridged`` Dana karta jest podpięta do wybranego interfejsu sieciowego na maszynie matce (np. połączenie kablowe ``eth0``, połączenie WiFi ``wlan0``). Maszyna będzie funkcjonować jako kolejny host działający bezpośrednio w danej sieci. Gdybyśmy wybrali tą opcję, nasza maszyna byłaby widoczna w sieci Wydziału Fizyki. Warto skorzystać z tej sieci jeśli: * Nasza maszyna wirtualna ma być widoczna w sieci maszyny matki (jest na przykład serwerem). Powtórzenie komend Linuxa ^^^^^^^^^^^^^^^^^^^^^^^^^ Proszę pobrać tekst Romeo i Julii po angielsku:: wget http://db.fizyka.pw.edu.pl/sk-2015/_downloads/pg1112.txt Sprawdzić, w którym jesteśmy katalogu (``pwd``). Stworzyć w katalogu ``/tmp``, katalogi ``foo`` i ``bar`` (polecenie ``mkdir``). Skopiować do katalogu ``foo`` plik z tekstem dramatu. Przejść do katalogu ``bar`` i wyświetlić zawartość dramatu za pomocą ścieżki absolutnej. Skopiować dramat z katalogu ``foo`` do ``bar`` za pomocą ścieżki względnej. Użytkownik administracyjny -------------------------- W GNU/Linuksie istnieje bardzo mocno wymuszany podział na administratora komputera, oraz zwykłego użytkownika (w nowszych wersjach systemu Windows jest analogicznie). Do wykonywania czynności administracyjnych stworzono użytkownika o nazwie ``root``, o specjalnym id równym ``0``. Na nowszych systemach konto administracyjne jest domyślnie wyłączone, a jego uprawnienia zdobywa się tymczasowo, z użyciem komendy ``sudo``. Komenda sudo ------------ Komenda sudo pozwala aktualnemu użytkownikowi (o ile spełnia dodatkowo pewne wymagania) wykonywać zadania administracyjne. Przykłady:: sudo adduser jbzdak # Wykona polecenie adduser jbzdak z uprawnieniami administratora sudo -i # Zalogouje się do konsoli administratora sudo -u user -i # Uruchomi konosolę z zalogowanym użytkownikiem user Instalowania oprogramowania --------------------------- Wszystkie sytemy operacyjne Linux przychodzą z (mniej lub bardziej bogatym) zestawem oprogramowania, oraz narzędziami do automatycznej instalacji wspomnianego oprogramowania. Ma to wiele zalet: * Jest znacznie bezpieczniejsze niż pobieranie pliku ``setup.exe`` **z Internetu**. Pakiety (przynajmniej w tych dystrybucjach które znam) posiadają system *kryptograficznej weryfikacji*. * Znacznie ułatwia zarządzanie wieloma serwerami. * Znacznie ułatwia zarządzanie wersjami bibliotek System paczek debiana oparty jest o programy ``dpkg`` oraz ``apt``. .. note:: Niektóre dystrybucje (np. Ubuntu) posiadają całkiem `użyteczne graficzne nakładki `__ na system pakietów, nakładki te przypominają "Sklepy" znane z polularnych marek smartfonów. Debian posiada też inne narzędzia do pracy z Pakietami, np. bardzo dobry ``aptitude`` (tekstowy lub graficzny) oraz graficzny ``synaptic``, jednak w "pierwszym kontakcie" mogą obe być mniej intuicyjne w użyciu Repozytoria oprogramowania ************************** Żródła z których pobieramy oprogramowanie są opisane w pliku: ``/etc/apt/sources.list`` (oraz w plikach w: ``/etc/apt/sources.list.d``). Można dopisywać do tych plików repozytoria będące poza kontrolą dostawcy Waszej dystrybucji np. by zainstalować najnowszą wersję przeglądarki. Aktualnie Wasze maszyny wirtualne mogą być skonfigurowane do pobierania pakietów z płyty CD. Konfigiracja managera pakietów powinna wyglądać tak:: deb http://ftp.pl.debian.org/debian/ jessie main non-free contrib deb http://security.debian.org/ jessie/updates main contrib non-free deb http://ftp.pl.debian.org/debian/ jessie-updates main non-free contrib Instalujemy pakiety z aktuanej stabilnej wersji Debiana (``jessie``). Repozytorium debiana podzielone jest na sekcje: * ``main`` główna sekcja oprogramowania wspierana przez zespół Debiana * ``contrib`` oprogramowanie na wolnej licencji nie wspierane przez zespół debiana * ``non-free`` oprogramowanie nie wydane na wolnej licencji .. note:: Na komputer "domowy" możecie śmiało użyć tej konfigurajci, na serwer warto się  zastanowić czego potrzebujecie. Zadania 1 ********* Za pomocą sudo oraz Waszego ulubionego edytora tekstu ustawcie zawartość  pliku ``/etc/apt/sources.list`` na:: deb http://ftp.pl.debian.org/debian/ jessie main non-free contrib deb http://security.debian.org/ jessie/updates main contrib non-free deb http://ftp.pl.debian.org/debian/ jessie-updates main non-free contrib Przeszukiwanie pakietów ----------------------- Po zmianie konfiguracji repozytorióœ nalezy pobrać informacje o pakietów z repozytorium:: sudo apt-get update Komenda ``sudo apt-get update`` pobiera również informacje o nowych pakietach które wydali twórcy Debiana i dobrze ją wykonać przed każdą czynnością  dotyczącą pakietów. Do przeszukiwania repozytorium pakietów służy program ``apt-cache``. By wyszukać pakietów które mają w nazwie lub opisie ciąg znaków foo należy napisać polecenie:: apt-cache search foo By wyszukać tylko w nazwie pakietu należy napisać:: apt-cache search -n foo Zadanie 2 ********* Odnaleźć nazwę pakietu który dostarcza serwer ``ssh``, w tym celu proszę  przeszukać paczki które w nazwie mają ssh a następnie za pomocą ``grep`` znaleźć paczki które w nazwie mają ``server``. Za pomocą ``apt-get install`` zainstalować program emacs oraz serwer ssh (openssh-server). Dodawanie i usuwanie użytkowników --------------------------------- Do dodawania użytkownikow służy komenda ``adduser``, a do ich kasowania ``deluser``. Przy dodawaniu użytkowników można: * Ustawić domyślną powłokę dla użytkownika (np. na ``/bin/sh``, albo ``/bin/false``), * Ustawić położenie katalogu domowego, * Wyłączyć możliwość logowania hasłem, * Wyłączyć możliwość logowania w ogóle. .. note:: Każda usługa działająca w systemie Linux musi działać jako jakiś użytkownik, najczęściej **nie powinien to być użytkownik ``root``**. Dobrym zwyczajem jest stworzenie oddzielnego użytkownika na każdą z usług, które uruchamiacie na swoim systemie. Wszystkie informacje o użytkowniku są w ``/etc/passwd``, skrót hasła jest w pliku ``/etc/shadow``. Grupy ----- Użytkownik może należy do jednej bądź wielu grup. Grupy ułatwiają kontrolę  wielu użytkowników. By dodać użytkownika do grupy można wykonać:: adduser username group Zarządzanie uprawnieniami ``sudo`` ---------------------------------- Sudo pozwala na trochę lepszą kontrolę, niż tylko nadanie uprawnień do wykonania dowolnej komendy. Pozwala na: * Umożliwienie użytkownikowi wykonania tylko kilku poleceń z uprawnieniami root. * Umożliwienie wykonania niektórych poleceń bez podania hasła. Konfiguracja polecenia sudo jest w pliku ``/etc/sudoers``, jednak plik ten nie może być po prostu edytowany --- jeśli jego składnia będzie niepoprawna, to kolejne polecenia ``sudo`` nie będą mogły się wykonać. Do edycji pliku ``/etc/sudoers`` służy polecenie ``visudo``. .. note:: Nie jest łatwo **bezpiecznie** skonfigurować sudo, przykładowo jeśli dacie komuś dostęp do wykonywania edytora ``vim`` z uprawnieniami ``root`` to, zasadniczo, może on wykonywać dowolne operacje na systemie (ponieważ edytor ``vim`` pozwala na uruchomienie dowolnej komendy. Zadanie 3 ********* Domyślna konfiguracja sudo, pozwala na wykonanie polecenia z uprawnieniami administratora każdemu użytkownikowi w grupie ``sudo``. Dodaj użytkownika test i nadaj mu uprawnienia do wykonywania dowolnych poleceń. Zadanie 4 ********* Dodaj użytkownika ``user``, który za pomocą polecenia ``sudo`` może tylko zrestartować komputer (wykonać ``/sbin/reboot``).