Hosting WWW Bezpieczeństwo hostingu WWW Dr Michał Tanaś (http://www.amu.edu.pl/~mtanas)
System IT ogólna budowa
Historia wirtualizacji Pierwsze komputery lata 40 i 50 Komputer bezpośrednio wykonuje program użytkownika Program użytkownika bezpośrednio wywołuje niskopoziomowe funkcje sprzętu Brak oprogramowania pośredniczącego (systemu operacyjnego) Komputer potrafi wykonywać tylko jeden program na raz Przykłady: ENIAC (1946)
Historia wirtualizacji Systemy jednozadaniowe lata 60 do 90 System operacyjny (OS) pośredniczy pomiędzy programem użytkownika a sprzętem OS udostępnia programowi funkcje wysokopoziomowe i tłumaczy je na sekwencje niskopoziomowych funkcji sprzętowych Możliwość uruchamiania wielu programów bez ponownego uruchamiania systemu operacyjnego ale w dalszym ciągu tylko jeden program na raz Przykład: MS-DOS
Historia wirtualizacji Podstawowe funkcje OS Zarządzanie procesami Zarządzanie pamięcią operacyjną Zarządzanie storage (pamięcią nieulotną) Zarządzanie urządzeniami I/O
Historia wirtualizacji Systemy wielozadaniowe lata 70 do dzisiaj OS jest w stanie wykonywać wiele programów równocześnie albo naprawdę równocześnie, na różnych procesorach albo pozornie równocześnie, przełączając się co chwila pomiędzy różnymi programami (tzw. context switching)
Historia wirtualizacji Systemy wielozadaniowe lata 70 do dzisiaj OS dba aby programy nie przeszkadzały sobie nawzajem, np. poprzez ochronę pamięci blokady zasobów (np. plików na dysku) Typy wielozadaniowości Dobrowolna (cooperative multitasking) Wymuszona (preemptive multitasking)
Historia wirtualizacji Systemy wielozadaniowe lata 70 do dzisiaj OS może wykonywać wiele programów równocześnie, ale sam OS może być tylko jeden konfiguracja OS może być tylko jedna konta użytkowników (w tym administratorów) są wspólne niewielkie możliwości narzucenia ograniczeń na zasoby (np. liczby dostępnych procesorów) niewielkie możliwości separacji aplikacji służących różnym celom (np. VLANy)
Wirtualizacja - podstawy Maszyny wirtualne Jeden duży komputer (tzw. host) udaje kilka mniejszych (tzw. guest albo maszyna wirtualna) Maszyna wirtualna jest pełnoprawnym komputerem, tzn. Ma swoje własne urządzenia sprzętowe, np. Pamięć Storage Sieć Ma swój własny OS który dla każdej maszyny może być inny
Terminologia Terminologia: Host system operacyjny (lub maszyna) udostępniająca maszyny wirtualne Dedykowany poza zarządzaniem maszynami wirtualnymi nic innego nie robi Uniwersalny maszyna udostępniająca maszyny wirtualne a poza tym używana do zadań operacyjnych Guest system operacyjny (lub maszyna) działająca na maszynie wirtualnej Hypervisor oprogramowanie zarządzające dostępem maszyn wirtualnych do sprzętu
Wirtualizacja a emulacja Wirtualizacji nie należy mylić z emulacją Emulacja jeden OS wykonuje program przeznaczony dla innego OS lub innej architektury (np. wine, dosbox) Wirtualizacja na jednym komputerze działają dwa niezależne OS (np. virtualbox, Android Studio) Możliwe jest połączenie wirtualizacji z emulacją gdy maszyna wirtualna jest przeznaczona dla innej architektury niż host (np. Hercules)
Wirtualizacja a emulacja Wirtualizacja Emulacja System operacyjny Wiele różnych Wiele różnych Zarządzanie procesami Wykonywanie instrukcji i funkcji systemowych Biblioteki systemowe Niezależne przez OS maszyny wirtualnej Bezpośrednio przez sprzęt Niezależne dla każdej maszyny Aplikacja jest normalnym procesem hosta Za pośrednictwem oprogramowania tłumaczącego Tylko jeden zestaw, możliwe dodatkowe biblioteki dla emulacji Wydajność Pełna wydajność hosta Duże spowolnienie
Pełna wirtualizacja a parawirtualizacja Pełna wirtualizacja Host udostępnia guestom symulowane zasoby sprzętowe niekoniecznie takie same jak fizyczne Guest nie ma bezpośredniego dostępu do sprzętu
Pełna wirtualizacja a parawirtualizacja Pełna wirtualizacja - zalety Dobra separacja guestów małe ryzyko że jeden guest zakłóci działanie drugiego Guest OS nie wymaga modyfikacji Guest OS nie wymaga nietypowych sterowników Pełna wirtualizacja - wady Obniżona wydajność konieczność symulacji urządzeń Zazwyczaj brak możliwości pełnego wykorzystania sprzętu przez guesty np. brak dostępu do GPU
Pełna wirtualizacja a parawirtualizacja Parawirtualizacja Guest ma bezpośredni dostęp do sprzętu przy pomocy funkcji udostępnianych przez hosta Host jedynie daje guestowi dostęp do sprzętu natomiast nie pośredniczy w komunikacji sprzęt-guest
Pełna wirtualizacja a parawirtualizacja Parawirtualizacja - zalety Brak narzutu na wydajność guestów pracują bezpośrednio na sprzęcie Guest może (ale nie musi!) mieć dostęp do specyficznych funkcji sprzętu (np. GPGPU) Parawirtualizacja - wady Mała separacja guestów jeden guest może zablokować sprzęt drugiemu OS guesta wymaga modyfikacji OS guesta wymaga specyficznych sterowników
Typy wirtualizacji Wirtualizacja sprzętowa (bare metal) BIOS lub jego odpowiednik powala tworzyć maszyny wirtualne zwane LPAR (Logical PARtition) Dla guestów LPAR jest nieodróżnialny od maszyny fizycznej Przykłady: IBM pseries
Typy wirtualizacji Wirtualizacja sprzętowa (bare metal) Zalety: całkowita separacja maszyn logicznych jedna maszyna nie ma żadnego wpływu na drugą guest nie wymaga żadnych zmian w systemie operacyjnym guest ma bezpośredni dostęp do sprzętu Wady: większość zasobów sprzętowych nie może być współdzielona mała elastyczność w przydziale zasobów (przydział z góry, tylko całkowite ilości, itp.) możliwa jedynie na niektórych typach komputerów (zazwyczaj kosztownych)
Typy wirtualizacji Wirtualizacja z dedykowanym host OS Na hoście działa dedykowany system operacyjny służący jedynie tworzeniu maszyn wirtualnych i nie wykonujący żadnych zadań operacyjnych Najczęściej stosowana jest pełna wirtualizacja Przykłady: zvm VMWare ESX
Typy wirtualizacji Wirtualizacja z dedykowanym host OS Zalety: (prawie) całkowita separacja maszyn logicznych jedna maszyna nie ma żadnego wpływu na drugą elastyczny przydział zasobów (np. ułamkowa liczba procesorów) może, ale nie musi, być wspomagana przez sprzęt
Typy wirtualizacji Wirtualizacja z dedykowanym host OS Wady: guest może zakłócić działanie hosta guest najczęściej nie ma bezpośredniego dostępu do sprzętu co powoduje spadek wydajności konieczność symulacji mało wydajne współdzielenie zasobów w praktyce tak jak pomiędzy osobnymi maszynami (np. dyski sieciowe) wymaga specjalnego host OS który zazwyczaj jest drogi i mało znany
Typy wirtualizacji Wirtualizacja z uniwersalnym host OS Na komputerze działa uniwersalny system operacyjny mogący dodatkowo udostępniać maszyny wirtualne Dla hosta guesty są zwykłymi programami Najczęściej stosowane jest rozwiązanie mieszane częściowo pełna wirtualizacja, częściowo parawirtualizacja Przykłady: Oracle Virtualbox QEMU
Typy wirtualizacji Wirtualizacja z uniwersalnym host OS Zalety: bardzo elastyczne zasobów sprzętowych- niewykorzystane zasoby (np. czas procesora) mogą być przez hosta przydzielone innemu zadaniu wydajne współdzielenie zasobów np. wspólne systemy plików współpraca aplikacji z różnych OS - np. wspólny schowek może, ale nie musi, być wspomagana przez sprzęt niskie koszty
Typy wirtualizacji Wirtualizacja z uniwersalnym OS Wady: słaba separacja guestów taka jak różnych aplikacji na tym samym OS operacyjne wykorzystanie hosta ma wpływ na guesty np. odebranie czasu procesora
Typy wirtualizacji
Wirtualizacja w x86 Ciekawostka historyczna: Pierwsza wirtualizacja w architekturze x86 pojawiła się w 1985 roku (!) w procesorze Intel 80386 w postaci specjalnego trybu tzw. virtual 8086 w którym procesor 80386 mógł stworzyć osobny procesor Intel 8086 dla konkretnego programu. Była to wirtualizacja częściowo sprzętowa, częściowo programowa (wymagała wsparcia systemu operacyjnego) Dostępna do dzisiaj w trybie 32-bitowym procesorów x86 ale w praktyce nie używana ze względu na zanik programów dla procesora 8086 na początku lat 90-ątych.
Wirtualizacja w x86 Intel VT-x Sprzętowe wsparcie dla wirtualizacji w procesorach Intela Ma swoje odpowiedniki (np. AMD-V, czy VIA VT ) również w innych procesorach architektury x86 VT-x pojawiło się w roku 2005 w późnych modelach Pentium IV Obecnie dostępne w praktycznie wszystkich procesorach x86 z nielicznymi wyjątkami (np. niektóre procesory budżetowe czy Atomy) Zazwyczaj można je włączyć/wyłączyć w BIOS-ie
Wirtualizacja w x86 Funkcje Intel VT-x: Dodatkowy poziom uprzywilejowania programów (tzw. Ring -1 ) tryb o wyższym uprzywilejowaniu niż tryb systemu operacyjnego przeznaczony do wykonywania hypervisora Dodatkowy poziom translacji adresów stron pamięci funkcja występuje pod różnymi nazwami (nested paging, extended page tables, second level address translation, rapid virtualization indexing) znacznie przyspiesza zarządzanie pamięcią maszyn wirtualnych pojawia się w 2008 roku, najpierw w procesorach serwerowych
Wirtualizacja w x86 Poziomy uprzywilejowania programów (tzw. protection rings ) Procesor wykonuje każdy program na określonym poziomie ( ringu ) uprzywilejowania Im niższy ring tym większe uprzywilejowanie programu Niektóre instrukcje procesora, funkcje dostępu do pamięci czy funkcje I/O nie są dostępne dla programów niewystarczająco uprzywilejowanych a próba ich bezpośredniego użycia kończy się błędem ochrony
Wirtualizacja w x86 Poziomy uprzywilejowania programów (tzw. protection rings ) W szczególności program wyżej uprzywilejowany może zakazać dostępu do określonej strony pamięci programowi mniej uprzywilejowanemu dzięki czemu np. jeden program nie jest w stanie uszkodzić czy szpiegować innego programu
Wirtualizacja w x86 Poziomy uprzywilejowania programów (tzw. protection rings ) Program niżej uprzywilejowany może poprosić program wyżej uprzywilejowany o udostępnienie jakichś uprzywilejowanych zasobów ale program wyżej uprzywilejowany nie musi się na to zgodzić
Wirtualizacja w x86 Poziomy uprzywilejowania programów (tzw. protection rings ) Ring -1 hypervisor ma dostęp do wszystkich zasobów sprzętowych i całej pamięci może wykonywać wszystkie instrukcje procesora może zabronić dostępu do określonych zasobów wszystkim innym, nawet programowi na Ring 0 dba by jedna maszyna wirtualna nie uzyskała dostępu do pamięci innej maszyny wirtualnej
Wirtualizacja w x86 Poziomy uprzywilejowania programów (tzw. protection rings ) Ring 0 system operacyjny (tzw. kernel space) ma dostęp do wszystkich zasobów sprzętowych i całej pamięci (chyba że hypervisor mu zabroni) może wykonywać wszystkie instrukcje procesora może zabronić dostępu do zasobów programom mniej uprzywilejowanym
Wirtualizacja w x86 Poziomy uprzywilejowania programów (tzw. protection rings ) Ring 1 i Ring 2 sterowniki urządzeń mają dostęp do wszystkich zasobów sprzętowych i całej pamięci (chyba że zabroni im program na Ring 0 lub Ring -1) nie mogą wykonywać niektórych instrukcji procesora praktycznie nieużywane sterowniki działają częściowo w Ring 0 a częściowo w Ring 3
Wirtualizacja w x86 Poziomy uprzywilejowania programów (tzw. protection rings ) Ring 3 programy użytkowe (tzw. user space ) nie mają bezpośredniego dostępu ani do sprzętu ani do pamięci chyba że udzieli im go system operacyjny (Ring 0) nie mogą wykonywać niektórych instrukcji procesora
Wirtualizacja w x86 Translacja adresów pamięci Pamięć komputera zorganizowana jest w bloki zwane stronami (dawniej również: segmentami albo bankami ) Dawniej wyboru segmentu dokonywało się bezpośrednio w kodzie programu co powodowało że tworzenie struktur danych większych niż segment było bardzo skomplikowane
Wirtualizacja w x86 Translacja adresów pamięci Obecnie system operacyjny tworzy ciągłą wirtualną przestrzeń adresową dla każdego programu Gdy program odwołuje się do pamięci specjalny podsystem procesora (tzw. MMU memory management unit) tłumaczy adres pamięci widziany przez program na adres w pamięci fizycznej Każdemu programowi wydaje się że ma całą pamięć dla siebie co bardzo upraszcza programowanie.
Wirtualizacja w x86 Translacja adresów pamięci W przypadku nested paging translacja odbywa się dwuetapowo: 1. MMU tłumaczy adres z przestrzeni adresowej programu na adres z przestrzeni adresowej maszyny wirtualnej (czyli z przestrzeni adresowej host OS) 2. MMU tłumaczy adres z przestrzeni adresowej maszyny wirtualnej na adres z fizycznej przestrzeni adresowej Dzięki temu maszynie wirtualnej (guest OS) wydaje się że używa bezpośrednio sprzętowego MMU a cały proces jest znacznie wydajniejszy niż translacja softwareowa
Wirtualizacja w x86