\chapter{Υπόβαθρο} \label{background}

\hyphenation{πολλές}

\noindent Προκειμένου να κατανοήσουμε πλήρως το πρόβλημα που επιλύει η παρούσα
εργασία πρέπει να αναλύσουμε μερικές βασικές έννοιες. Αρχικά, θα δούμε τι είναι
το υπολογιστικό νέφος, τι μας προσφέρει και ποια μοντέλα παράδοσης παρέχονται
μέσω αυτού. Έπειτα θα συζητήσουμε την έννοια της εικονικοποίησης και τις
διάφορες υποκατηγορίες της που χρησιμοποιούνται στις μέρες μας. Αμέσως μετά, θα
αναλυθούν τα πλεονεκτήματα της εικονικοποίησης και θα αναδειχθεί ο λόγος που
προτιμάται η εικονικοποίηση του λειτουργικού συστήματος (δηλ. η χρήση
δοχειοποιημένων περιβαλλόντων). Τέλος, θα εμβαθύνουμε στην τεχνολογία δοχείων,
θα δούμε διάφορες υλοποιήσεις της και θα πραγματοποιήσουμε μια ανάλυση της
ασφάλειας του Docker, ως το de facto βιομηχανικό πρότυπο για την διαχείριση των
δοχείων, των εφαρμογών και των εικόνων τους.

\section{Ορισμός Νεφο-Υπολογιστικής} \label{cloudComputingDefinition}

Σύμφωνα με το \citetitle{mell2011nist} \cite{mell2011nist}, η νεφο-υπολογιστική
είναι ένα μοντέλο που επιτρέπει την ανά πάσα στιγμή διαδικτυακή πρόσβαση σε μια
κοινή δεξαμενή ρυθμιζόμενων υπολογιστικών πόρων που μπορούν να παρέχονται και
να απελευθερώνονται γρήγορα και με ελάχιστη προσπάθεια διαχείρισης ή
αλληλεπίδρασης με τον πάροχο υπηρεσιών. Στους υπολογιστικούς αυτούς πόρους
περιλαμβάνονται δίκτυα, διακομιστές, χώρος αποθήκευσης, εφαρμογές και
υπηρεσίες. Αυτό το μοντέλο νέφους αποτελείται από πέντε βασικά χαρακτηριστικά,
τρία μοντέλα υπηρεσιών και τέσσερα μοντέλα παράδοσης.

\subsection{Χαρακτηριστικά} \label{cloucComputingCharacteristics}

Τα πέντε βασικά χαρακτηριστικά της νεφο-υπολογιστικής με βάση τους
\textcite{mell2011nist} είναι τα εξής:

\begin{itemize}

    \item \textbf{Αυτοεξυπηρέτηση κατά παραγγελία (On-demand Self-service)}:

        Ένας καταναλωτής μπορεί να προμηθευτεί υπολογιστικούς πόρους, όπως
        αποθηκευτικό χώρο και ισχυρούς επεξεργαστές, κατά απαίτηση δίχως την
        ανάγκη αλληλεπίδρασης με τον αντίστοιχο πάροχο νέφους. Μόλις
        συγκροτηθούν, η χρήση των πόρων αυτών μπορεί να αυτοματοποιηθεί,
        οδηγώντας σε ένα περιβάλλον αυτοεξυπηρέτησης κατ' απαίτηση.

    \item \textbf{Πανταχού παρούσα πρόσβαση (Ubiquitous Access)}:

        Οι υπηρεσίες που παρέχονται είναι διαθέσιμες μέσω του διαδικτύου και
        είναι προσβάσιμες μέσω πρότυπων μηχανισμών από ετερογενείς πλατφόρμες
        λεπτών και πυκνών πελατών (thin \& thick clients).

    \item \textbf{Πολλαπλή Μίσθωση (Multi-Tenancy)}:

        Οι υπολογιστικοί πόροι του παρόχου είναι σχεδιασμένοι με τέτοιο τρόπο
        ώστε να μπορούν να εξυπηρετήσουν πολλούς καταναλωτές έκαστος,
        χρησιμοποιώντας ένα μοντέλο πολλαπλής μίσθωσης με διαφορετικούς
        φυσικούς και εικονικούς πόρους που εκχωρούνται και ανακατανέμονται
        ανάλογα με τη ζήτηση των καταναλωτών. Το μοντέλο αυτό διακατέχεται και
        από μια αίσθηση ανεξαρτησίας θέσης διότι ανεξάρτητα από το που
        βρίσκεται ένας τελικός χρήστης μπορεί να χρησιμοποιήσει πόρους από
        οποιοδήποτε κέντρο δεδομένων επιθυμεί. Παραδείγματα πόρων που
        παρέχονται αποτελούν μεταξύ άλλων το εύρος ζώνης δικτύου, ο
        αποθηκευτικός χώρος και οι εικονικές μηχανές.

    \item \textbf{Ελαστικότητα (Elasticity)}:

        Οι υπολογιστικές, δικτυακές και αποθηκευτικές δυνατότητες μπορούν να
        παρέχονται και να απελευθερώνονται ελαστικά (αυτόματα) με σκοπό την
        οριζόντια ή κάθετη κλιμάκωση υπηρεσιών αναλόγως την παρούσα ζήτηση. Από
        την οπτική γωνία του καταναλωτή, οι παρεχόμενες δυνατότητες μοιάζουν
        απεριόριστες και μπορούν να κατανεμηθούν ανά πάσα στιγμή σε οποιαδήποτε
        ποσότητα.

    \item \textbf{Μετρούμενη υπηρεσία}:

        Τα συστήματα νέφους ελέγχουν και βελτιστοποιούν αυτόματα τη χρήση των
        πόρων αξιοποιώντας δυνατότητες μέτρησης/παρακολούθησης κατάλληλες για
        τον τύπο της υπηρεσίας (π.χ, αποθήκευση, επεξεργασία, εύρος ζώνης). Η
        χρήση των πόρων μπορεί να παρακολουθείται, να ελέγχεται και να
        αναγράφεται, παρέχοντας διαφάνεια τόσο στον πάροχο όσο και στον
        καταναλωτή της υπηρεσίας που χρησιμοποιείται. Η αναφερόμενη χρήση
        έπειτα χρησιμοποιείται για την χρέωση του καταναλωτή ανάλογα με το
        μοντέλο χρέωσης που σχετίζεται με την χρησιμοποιούμενη υπηρεσία.

\end{itemize}

\clearpage

\subsection{Μοντέλα Υπηρεσιών/Παράδοσης} \label{cloudComputingServiceModels}

Τα τρία μοντέλα υπηρεσιών ή παράδοσης της νεφο-υπολογιστικής, όπως αναγράφονται
στο \cite{mell2011nist} είναι τα παρακάτω:

\begin{itemize}

    \item \textbf{Software as a Service (SaaS) (Λογισμικό ως Υπηρεσία)}:

        Παρέχεται στον καταναλωτή η δυνατότητα χρήσης εφαρμογών εκτελούμενων σε
        μια υποδομή νέφους προσφερόμενη είτε από τον πάροχο νέφους είτε από
        τρίτο μέρος. Οι εφαρμογές αυτές είναι προσβάσιμες, από διάφορες
        συσκευές ικανές να συνδεθούν στο διαδίκτυο, μέσω φυλλομετρητή ή
        προγραμματιστικής διεπαφής. Δεν προσφέρεται έλεγχος ή δυνατότητα
        διαχείρισης της υποκείμενης υποδομής νέφους ή των δυνατοτήτων της
        υπηρεσίας, με εξαίρεση περιορισμένη παραμετροποίηση κάποιων ρυθμίσεων
        διαμόρφωσης της εφαρμογής. Το μοντέλο χρέωσης είθισται να είναι της
        μορφής μιας σταθερής μηνιαίας ή ετήσιας συνδρομής χρησιμοποιώντας
        βαθμίδες με διαφορετικά επίπεδα παροχής υπηρεσιών του λογισμικού
        \footfullcite{saasPricingModel}.

    \item \textbf{Platform as a Service (PaaS) (Πλατφόρμα ως Υπηρεσία)}:

        Παρέχεται η δυνατότητα ανάπτυξης και εκτέλεσης εφαρμογών σε ένα
        κατάλληλο περιβάλλον παρεχόμενο από μια πλατφόρμα που υποστηρίζεται από
        πόρους του υπολογιστικού νέφους. Οι εφαρμογές αυτές αναπτύσσονται από
        τον καταναλωτή μέσω της πλατφόρμας χρησιμοποιώντας ένα ολοκληρωμένο
        περιβάλλον ανάπτυξης και εκτέλεσης αποτελούμενο από runtimes γλωσσών
        προγραμματισμού, βιβλιοθήκες, υπηρεσίες και εργαλεία. Ο καταναλωτής δεν
        έχει τον έλεγχο της υποκείμενης υποδομής νέφους, αλλά έχει τον έλεγχο
        των εφαρμογών που εκτελούνται σε αυτήν, καθώς και των ρυθμίσεων
        διαμόρφωσης τους και του περιβάλλοντος ανάπτυξης/εκτέλεσης τους.
        Συνήθως, τα περιβάλλοντα είναι προκαθορισμένα ως προς το περιεχόμενο
        τους αλλά γίνεται προσπάθεια από τους παρόχους των υπηρεσιών PaaS να
        καλύψουν τις ανάγκες όλων των πιθανών ομάδων έργων λογισμικού σε σχέση
        με τα διαφορετικά περιβάλλοντα που προσφέρονται. Το μοντέλο χρέωσης
        υπηρεσιών PaaS συνήθως περιλαμβάνει μια σταθερή χρέωση ανά χρονική
        περίοδο για κάθε είδος πόρου που χρειάστηκε να χρησιμοποιηθεί από τον
        πάροχο για την επίτευξη των απαιτήσεων της εφαρμογής του καταναλωτή
        μέσω της παρεχόμενης πλατφόρμας \footfullcite{paasPricingModel}.
        Ουσιαστικά, ο καταναλωτής χρεώνεται με βάση την χρήση των πόρων του
        παρόχου.

    \item \textbf{Infrastructure as a Service (IaaS) (Υποδομή ως Υπηρεσία)}:

        Παρέχεται η δυνατότητα χρήσης επεξεργαστικών, αποθηκευτικών, δικτυακών
        και άλλων υπολογιστικών πόρων. Συνήθως, οι πόροι αυτοί συγκροτούνται
        στην μορφή μιας εικονικής μηχανής, δηλ. ενός απογυμνωμένου
        περιβάλλοντος στο οποίο ο καταναλωτής μπορεί να εγκαταστήσει και να
        εκτελέσει το λογισμικό της επιλογής του, συμπεριλαμβανομένων
        λειτουργικών συστημάτων και εφαρμογών. Ο καταναλωτής δεν έχει τον
        έλεγχο της υποκείμενης υποδομής νέφους, αλλά έχει τον έλεγχο των
        λειτουργικών συστημάτων, του αποθηκευτικού χώρου, των περιβαλλόντων
        ανάπτυξης/εκτέλεσης, των εγκατεστημένων εφαρμογών και των ρυθμίσεων
        διαμόρφωσης τους. Το μοντέλο χρέωσης υπηρεσιών IaaS συνήθως αποτελείται
        από μια συνεχόμενη χρέωση ανά χρονική περίοδο λόγω της ανάθεσης των
        πόρων στον καταναλωτή, η οποία αυξάνεται μετά την υπέρβαση ενός ορίου
        χρήσης για ορισμένους πόρους όπως το εύρος ζώνης δικτύου.

\end{itemize}

\subsection{Μοντέλα Ανάπτυξης} \label{cloudComputingDeploymentModels}

Τα τέσσερα μοντέλα ανάπτυξης του υπολογιστικού νέφους σύμφωνα με το
\cite{mell2011nist} και την \citeauthor{cloudDeploymentModels}
\footfullcite{cloudDeploymentModels} είναι:

\begin{itemize}

    \item \textbf{Ιδιωτικό νέφος (Private Cloud)}:

        Το ιδιωτικό νέφος είναι αποκλειστικά αφιερωμένο σε έναν μόνο οργανισμό
        αποτελούμενο από πολλαπλούς καταναλωτές (π.χ. επιχειρησιακές μονάδες ή
        τμήματα). Ενδεχομένως να ανήκει, να διαχειρίζεται και να λειτουργεί από
        τον οργανισμό, από μια τρίτη οντότητα, ή έναν συνδυασμό των δύο. Το
        νέφος αυτό μπορεί να βρίσκεται εντός ή εκτός του οργανισμού (πχ. στην
        περίπτωση που λειτουργεί από τρίτη οντότητα). Παρέχει πλήρη έλεγχο στον
        τρόπο με τον οποίο μοιράζονται και αποθηκεύονται τα δεδομένα και
        διασφαλίζει την συμμόρφωση με τυχόν κανονισμούς τους οποίους καλείται
        μια επιχείρηση να ακολουθήσει. Επιπλέον, λόγω της αποκλειστικής
        αφιέρωσης του σε έναν μόνο οργανισμό, εξασφαλίζεται η διαθεσιμότητα των
        δεδομένων κατά παραγγελία, όπως επίσης και η αξιοπιστία του για
        κρίσιμους φόρτους εργασίας.

\clearpage

    \item \textbf{Κοινοτικό νέφος (Community Cloud)}:

        Είναι διαθέσιμο για μια κοινότητα καταναλωτών ή οργανισμών με κοινές
        ανησυχίες, όπως οι απαιτήσεις ασφαλείας και ζητήματα πολιτικής και
        συμμόρφωσης. Μπορεί να ανήκει, να διαχειρίζεται και να λειτουργεί από
        έναν ή περισσότερους οργανισμούς της κοινότητας, μια τρίτη οντότητα ή
        έναν συνδυασμό των δύο. Το νέφος αυτό μπορεί να βρίσκεται εντός ή εκτός
        των οργανισμών της κοινότητας (εφόσον λειτουργεί από τρίτη κοινότητα).
        Το κόστος κτήσης, λειτουργίας και συντήρησης συνήθως διαμοιράζεται
        μεταξύ των μελών/οργανισμών της κοινότητας. Επιπροσθέτως, είναι
        προσβάσιμο συνήθως μόνο από τα μέλη της κοινότητας. Οπότε, μπορεί να
        θεωρηθεί ένα ιδιωτικό νέφος και όχι μόνο για έναν αλλά πολλαπλούς
        οργανισμούς.

    \item \textbf{Δημόσιο νέφος (Public Cloud)}:

        Εδώ, το νέφος υποδομής είναι διαθέσιμο για το γενικό κοινό. Μπορεί να
        ανήκει και να διαχειρίζεται από μια επιχείρηση, έναν ακαδημαϊκό ή
        κυβερνητικό οργανισμό ή έναν συνδυασμό των παραπάνω. Λειτουργεί εντός
        των υποδομών του παρόχου νέφους. Το δημόσιο νέφος είναι ουσιαστικά οι
        εικονικές μηχανές που εκτελούνται σε διακομιστές του παρόχου νέφους,
        των οποίων οι υπολογιστικοί πόροι χρησιμοποιούνται από πολλούς
        καταναλωτές ταυτόχρονα. Αποτελεί το πιο δημοφιλές μοντέλο που παρέχουν
        εταιρίες υπηρεσιών IaaS λόγω της απουσίας απαίτησης μεγάλου αρχικού
        κόστους και της ευελιξίας που παρέχεται μέσω της αυτοεξυπηρέτησης κατά
        παραγγελία. Είναι η κατάλληλη επιλογή για μεγάλους φόρτους εργασίας
        μικρής διάρκειας λόγω του μοντέλου χρέωσης ανά χρήση και διευκολύνει
        μια επιχείρηση στην μετέπειτα διαχείριση του κόστους με βάση τις
        προβλέψεις της ζήτησης της υπηρεσίας που αυτή προσφέρει.

    \item \textbf{Υβριδικό νέφος (Hybrid Cloud)}:

        Είναι συνδυασμός δύο ή περισσότερων νεφών (ιδιωτικού, κοινοτικού ή
        δημοσίου) που διατηρούνται ως ξεχωριστές οντότητες αλλά συνδέονται
        μεταξύ τους με πρότυπες ή ιδιόκτητες τεχνολογίες που επιτρέπουν τη
        φορητότητα δεδομένων και εφαρμογών. Η πιο συνηθισμένη μορφή ενός
        υβριδικού νέφους αντιστοιχεί στη χρήση ενός ιδιωτικού νέφους, το οποίο
        μπορεί να αντλεί επιπλέον πόρους από το δημόσιο νέφος, όταν φθάνει στα
        όρια της χωρητικότητάς του.

\end{itemize}

\clearpage

\section{Ορισμός Εικονικοποίησης} \label{virtualizationDefinition}

Σύμφωνα με τον ορισμό της Red Hat
\footfullcite{redhatVirtualizationDefinition}, η εικονικοποίηση είναι μια
τεχνολογία που μας επιτρέπει να δημιουργήσουμε πολλαπλά εικονικά περιβάλλοντα ή
αποκλειστικούς πόρους από ένα μόνο, φυσικό σύστημα υλικού. Ένα λογισμικό
ονόματι υπερ-επόπτης (hypervisor) συνδέεται στο υλικό αυτό\footnote{Απευθείας
στην εικονικοποίηση υποβοηθούμενη από το υλικό και έμμεσα στην
εικονικοποίηση υποβοηθούμενη από το λογισμικό.} και δίνει τη δυνατότητα
διαμερισμού ενός συστήματος σε ξεχωριστά, διακριτά και ασφαλή περιβάλλοντα,
γνωστά και ως εικονικές μηχανές (Virtual Machines - VMs). Επομένως, αυτές οι
εικονικές μηχανές βασίζονται στην ικανότητα του υπερ-επόπτη να διαχωρίζει τους
πόρους της μηχανής και να τους κατανέμει κατάλληλα.

Το φυσικό υλικό, εξοπλισμένο με έναν υπερ-επόπτη, ονομάζεται ξενιστής (host) ή
μηχάνημα φιλοξενίας, ενώ οι πολλές εικονικές μηχανές που χρησιμοποιούν τους
πόρους του είναι οι επισκέπτες (guests) ή αλλιώς τα φιλοξενούμενα μηχανήματα.
Οι επισκέπτες, αντιμετωπίζουν τους υπολογιστικούς πόρους όπως είναι η κεντρική
μονάδα επεξεργασίας, η μνήμη και ο αποθηκευτικός χώρος, ως μια δεξαμενή πόρων
που μπορεί εύκολα να ανακατανεμηθεί. Οι χειριστές μπορούν να ελέγχουν εικονικά
στιγμιότυπα αυτών των πόρων, ούτως ώστε να πραγματοποιούν οριζόντια ή κάθετη
κλιμάκωση. Δηλαδή είτε να δημιουργούν περισσότερες εικονικές μηχανές, είτε να
αναδημιουργούν την ίδια με επιπλέον πόρους (εφόσον δεν έχουν δεσμευτεί από
άλλες εικονικές μηχανές του ίδιου φυσικού μηχανήματος) όταν αυτό είναι
απαραίτητο.

Η εικονικοποίηση καθιστά δυνατή τη δημιουργία χρήσιμων υπηρεσιών ΤΠ
χρησιμοποιώντας πόρους στους οποίους παραδοσιακά μπορούσαμε να έχουμε πρόσβαση
μονάχα με την ιδιοκτησία φυσικών μηχανημάτων. Μας επιτρέπει να αξιοποιήσουμε
όλες τις δυνατότητες ενός φυσικού μηχανήματος διανέμοντας τις σε πολλούς
χρήστες και περιβάλλοντα. Με άλλα λόγια, υποστηρίζεται η πολλαπλή μίσθωση ανά
φυσικό μηχάνημα με τη μορφή εικονικών μηχανημάτων καθώς και η αυξημένη χρήση
πόρων των φυσικών μηχανημάτων (στα κέντρα δεδομένων του νέφους).

\clearpage

Με βάση ένα παράδειγμα της Red Hat \footfullcite{redhatVirtualization}, ας
φανταστούμε πως έχουμε τρεις διακομιστές (servers) (δηλ. φυσικά μηχανήματα),
στον καθένα από τους οποίους έχει ανατεθεί ένας συγκεκριμένος σκοπός. Ένας
διακομιστής ηλεκτρονικού ταχυδρομείου, ένας διακομιστής ιστού και ένας που
εκτελεί εσωτερικές εταιρικές εφαρμογές οι οποίες σταμάτησαν να διατηρούνται
αλλά είναι ακόμα λειτουργικές. Στο συγκεκριμένο παράδειγμα κάθε ένας από τους
διακομιστές χρησιμοποιεί μονάχα το 30\% των δυνατοτήτων του (ως προς τους
πόρους που μπορεί να διαθέσει).

\begin{center}
\begin{figure}[!ht]
\centering
    \includegraphics[width = .5\textwidth]{Figures/RedHat_Virtualization/redhat_virtualization_server_usage1.png}
    \captionof{figure}{Χρήση διακομιστών χωρίς εικονικοποίηση \cite{redhatVirtualization}}
    \label{fig:virtualizationServerUsage1}
\end{figure}
\vspace*{-30pt}
\end{center}

Παραδοσιακά, αυτή η αρχιτεκτονική όπου εκτελούνται μεμονωμένες εργασίες σε
μεμονωμένους διακομιστές ήταν ευκολότερη και πιο αξιόπιστη αλλά δεν παύει να
είναι η λιγότερο αποδοτική λύση. Με την άφιξη της τεχνολογίας της
εικονικοποίησης όμως, είναι πλέον εφικτό να χωριστεί ένας διακομιστής σε
περισσότερα μέρη, έχοντας δύο ή παραπάνω εικονικά μηχανήματα με τη χρήση ενός
φυσικού.

\begin{center}
\begin{figure}[!ht]
\centering
    \includegraphics[width = .5\textwidth]{Figures/RedHat_Virtualization/redhat_virtualization_server_usage2.png}
    \captionof{figure}{Χρήση διακομιστών με εικονικοποίηση \cite{redhatVirtualization}}
    \label{fig:virtualizationServerUsage2}
\end{figure}
\vspace*{-30pt}
\end{center}

Εφόσον ένας διακομιστής χωρίζεται σε δύο ή παραπάνω εικονικά μέρη, μπορεί να
αυξηθεί ραγδαία η αξιοποίηση των δυνατοτήτων του. Με βάση το προηγούμενο
παράδειγμα, αν μια εικονική μηχανή λαμβάνει το 30\% των πόρων ενός
διακομιστή/φυσικού μηχανήματος, τότε και οι τρεις προαναφερόμενες
λειτουργικότητες (παροχής υπηρεσιών ιστού, ηλεκτρονικού ταχυδρομείου και
εφαρμογών) θα μπορούσαν να εγκατασταθούν στον ίδιο διακομιστή με την μορφή
τριών διαφορετικών εικονικών μηχανημάτων, αντίστοιχα.

\clearpage

Αφού η δημιουργία και καταστροφή των εικονικών μηχανών σε ένα μηχάνημα
πραγματοποιείται δυναμικά ανάλογα με τη ζήτηση, αυτό σημαίνει πως ένας
διακομιστής μπορεί να συνεχίσει να χρησιμοποιείται για νέους σκοπούς σε σχέση
με τους αρχικούς ή να αποσυρθεί τελείως σταματώντας την λειτουργία του (switch
off). Το τελευταίο είναι χρήσιμο κυρίως όταν η ζήτηση σε ένα κέντρο δεδομένων
είναι μικρή και επομένως υπάρχει οικονομικό συμφέρον (λόγω ενεργειακού κόστους)
ως προς το κλείσιμο των διακομιστών που δεν απαιτούνται για την κάλυψη της
παρούσας ζήτησης.

\subsection{Ιστορική αναδρομή της εικονικοποίησης} \label{virtualizationHistory}

Όπως αναφέρει μια θυγατρική της IBM \footfullcite{redhatVirtualization}, ενώ η
τεχνολογία εικονικοποίησης χρονολογείται από τη δεκαετία του 1960, δεν
υιοθετήθηκε ευρέως μέχρι τις αρχές της δεκαετίας του 2000. Οι τεχνολογίες που
την έκαναν πραγματικότητα, όπως οι υπερ-επόπτες, αναπτύχθηκαν πριν από
δεκαετίες για να δώσουν σε πολλούς χρήστες ταυτόχρονη πρόσβαση σε υπολογιστές
που επεξεργαζόντουσαν πολλά δεδομένα ταυτόχρονα. Κάτι ιδιαίτερα δημοφιλές στον
τομέα των επιχειρήσεων για καθήκοντα ρουτίνας που έπρεπε να εκτελεστούν
χιλιάδες φορές και πολύ γρήγορα όπως η μισθοδοσία υπαλλήλων.

Ωστόσο, μέσα στις επόμενες δεκαετίες, ήρθαν στο προσκήνιο άλλες λύσεις στο
πρόβλημα διαμοιρασμού ενός μηχανήματος σε πολλούς χρήστες, μειώνοντας έτσι το
ενδιαφέρον για την τεχνολογία εικονικοποίησης. Μία από αυτές ήταν ο
διαμοιρασμός χρόνου (time-sharing) όπου ένας χρήστης μπορούσε να χρησιμοποιεί
το λειτουργικό σύστημα απομονωμένα από τους υπόλοιπους. Κάτι που οδήγησε στη
δημιουργία λειτουργικών συστημάτων όπως το UNIX, το οποίο με τη σειρά του
άνοιξε δρόμο για την άφιξη του Linux. Καθ' όλη τη διάρκεια αυτή, η
εικονικοποίηση παρέμεινε σε μεγάλο βαθμό μη διαδεδομένη.

Προχωρώντας στη δεκαετία του 1990, οι περισσότερες επιχειρήσεις διέθεταν
φυσικούς διακομιστές και στοίβες μηχανημάτων ενός προμηθευτή, οι οποίες δεν
είχαν τη δυνατότητα εκτέλεσης εφαρμογών σε υλικό διαφορετικού προμηθευτή. Καθώς
οι εταιρείες αναβάθμιζαν τα περιβάλλοντα πληροφορικής τους με λιγότερο
δαπανηρούς διακομιστές, λειτουργικά συστήματα και εφαρμογές από διάφορους
προμηθευτές, ήταν υποχρεωμένες να υπολειτουργούν το φυσικό υλικό, αφού κάθε
διακομιστής μπορούσε συνήθως να εκτελέσει μόνο μια εργασία/εφαρμογή που είχε
υλοποιηθεί με βάση το υλικό του συγκεκριμένου προμηθευτή (του διακομιστή).

\clearpage

Από εκείνο το σημείο και έπειτα, άρχισε να γίνεται εμφανής η ανάγκη της
εικονικοποίησης και να ανεβαίνει η δημοτικότητα της. Οι εταιρείες μπορούσαν
πλέον να διαμερίσουν τους διακομιστές τους και να εκτελούν ακόμα και τις
παλαιές τους εφαρμογές σε πολλούς τύπους και εκδόσεις λειτουργικών συστημάτων.
Οι διακομιστές άρχισαν να χρησιμοποιούνται πιο αποδοτικά ή και καθόλου,
μειώνοντας το απαιτούμενο κόστος αγοράς, εγκατάστασης, συντήρησης και ψύξης
τους.

Η ευρεία εφαρμογή της εικονικοποίησης συνέβαλε στη μείωση του εγκλωβισμού σε
έναν μόνο προμηθευτή και την κατέστησε το θεμέλιο του υπολογιστικού νέφους.
Σήμερα είναι τόσο διαδεδομένη σε όλες τις επιχειρήσεις που συχνά απαιτείται
εξειδικευμένο λογισμικό διαχείρισης των εικονικών πόρων
\footfullcite{redhatVirtualizationManagement} για να μπορέσει κανείς να
παρακολουθεί τα δρώμενα της επιχείρησης. Πρόκειται για ένα λογισμικό το οποίο
διασυνδέεται με εικονικά περιβάλλοντα και το υποκείμενο φυσικό υλικό τους με
απώτερο σκοπό την απλοποίηση της διαχείρισης πόρων, τη βελτίωση της ανάλυσης
δεδομένων και τον εξορθολογισμό των λειτουργιών. Ουσιαστικά ένα λογισμικό που
συνδέεται απομακρυσμένα με υπερ-επόπτες, προσφέροντας φιλική προς τον χρήση
διεπαφή και επιπρόσθετες λειτουργίες όπως η συγκρότηση αναφορών χρήσης, η
αυτοματοποίηση επιβολής κανόνων και η παρακολούθηση χρήσης εικονικών
περιβαλλόντων.

\section{Τι είναι ένας υπερ-επόπτης} \label{hypervisors}

Προτού οι υπερ-επόπτες έρθουν στο προσκήνιο, οι περισσότεροι φυσικοί
υπολογιστές μπορούσαν να εκτελέσουν ένα λειτουργικό σύστημα τη φορά. Αυτό
συνέβαλε στη σταθερότητα τους μιας και δε χρειαζόταν να διαχειριστούν αιτήματα
από άλλα λειτουργικά συστήματα. Αυτή η προσέγγιση όμως είχε ένα μειονέκτημα.
Μεγάλο κομμάτι των πόρων του συστήματος έμενε ανεκμετάλλευτο.

Τη λύση σε αυτό το πρόβλημα την έφερε η εισαγωγή των υπερ-εποπτών. Πρόκειται
για μια στρώση λογισμικού που καθιστά δυνατή την εκτέλεση πολλαπλών
λειτουργικών συστημάτων, το ένα δίπλα στο άλλο, μοιράζοντας τους ίδιους
φυσικούς πόρους σε κάθε ένα από αυτά. Η πράξη αυτή ονομάζεται εικονικοποίηση
και τα στιγμιότυπα των λειτουργικών συστημάτων λέγονται εικονικές μηχανές και
αντιπροσωπεύουν προσομοιώσεις φυσικών υπολογιστών.

\clearpage

Οι υπερ-επόπτες είναι υπεύθυνοι για τη διαχείριση των εικονικών μηχανών
χωρίζοντας τις και αναθέτοντας σε κάθε μια ένα κομμάτι της διαθέσιμης
υπολογιστικής ισχύος, μνήμης και χώρου αποθήκευσης. Αυτή η διαδικασία τις
αποτρέπει από την αλληλεπίδραση μεταξύ τους. Μάλιστα, στην περίπτωση
κατάρρευσης μιας εικονικής μηχανής, οι υπόλοιπες παραμένουν ανεπηρέαστες.

\subsection{Είδη υπερ-εποπτών} \label{hypervisorTypes}

Οι υπερ-επόπτες χωρίζονται σε δύο κατηγορίες ανάλογα με το περιβάλλον στο οποίο
εκτελούνται. Με βάση την \citeauthor{ibmHypervisorDefinition}
\footfullcite{ibmHypervisorDefinition}, αυτές είναι:

\begin{itemize}

    \item \textbf{Τύπου 1 (Bare Metal)}:

        Ένας υπερ-επόπτης τύπου 1 εκτελείται απευθείας στο φυσικό υλικό του
        υποκείμενου υπολογιστή, αλληλεπιδρώντας άμεσα με την κεντρική μονάδα
        επεξεργασίας, τη μνήμη και το φυσικό αποθηκευτικό χώρο. Για το λόγο
        αυτό, οι υπερ-επόπτες τύπου 1 αναφέρονται επίσης ως bare-metal
        υπερ-επόπτες και αντικαθιστούν το λειτουργικό σύστημα του κεντρικού
        υπολογιστή. Η άμεση πρόσβαση στο φυσικό υλικό, τους καθιστά ιδιαίτερα
        αποδοτικούς. Παρ' όλα αυτά, επειδή αντικαθιστούν το ΛΣ, προκειμένου να
        μπορούν να αξιοποιηθούν απομακρυσμένα, συχνά απαιτείται μια ξεχωριστή
        μηχανή στην οποία θα εκτελείται λογισμικό διαχείρισης εικονικών πόρων
        \footfullcite{phoenixnapHypervisors}, μέσω του οποίου προσφέρεται μια
        διεπαφή για τον έλεγχο των εικονικών μηχανών και του υλικού του
        κεντρικού υπολογιστή.

    \item \textbf{Τύπου 2 (Hosted)}:

        Ένας υπερ-επόπτης τύπου 2 δεν εκτελείται απευθείας στο υποκείμενο
        υλικό. Αντ' αυτού, εκτελείται ως εφαρμογή σε ένα υπάρχον λειτουργικό
        σύστημα. Η χρήση τους δε συνηθίζεται σε περιβάλλοντα με πολλούς
        διακομιστές λόγω της καθυστέρησης που εισάγεται εξαιτίας της συνεχούς
        επικοινωνίας του με το ΛΣ φιλοξενίας και επειδή το υποκείμενο αυτό ΛΣ
        βάζει σε προτεραιότητα τις δικές του εφαρμογές και λειτουργίες έναντι
        αυτών του υπερ-επόπτη \footfullcite{amazonHypervisors}.

\clearpage

        Αντίθετα, είναι καταλληλότεροι για μεμονωμένους τελικούς χρήστες
        υπολογιστών που έχουν την ανάγκη να εκτελέσουν πολλαπλά λειτουργικά
        συστήματα (σε έναν υπολογιστή). Παραδείγματα τέτοιων χρηστών είναι
        μηχανικοί, επαγγελματίες ασφαλείας που αναλύουν κακόβουλο λογισμικό και
        υπάλληλοι επιχειρήσεων που χρειάζονται πρόσβαση σε εφαρμογές που είναι
        διαθέσιμες αποκλειστικά σε διαφορετικές πλατφόρμες λογισμικού από τη
        δική τους.

        Διατίθενται συχνά πρόσθετες εργαλειοθήκες για τους χρήστες, οι οποίες
        μπορούν να εγκατασταθούν στο λειτουργικό σύστημα προκειμένου να
        παρέχουν βελτιωμένες συνδέσεις μεταξύ του υποκείμενου λειτουργικού
        συστήματος και εκείνου της εικονικής μηχανής. Οι πρόσθετες δυνατότητες
        που υποστηρίζονται μετά την παραπάνω διαδικασία μπορεί να είναι η
        αποκοπή και επικόλληση μεταξύ των δύο συστημάτων ή η κοινή πρόσβαση
        στον αποθηκευτικό χώρο.

        Η τρέχουσα προσέγγιση επιτρέπει τη γρήγορη εναλλαγή σε διαφορετικά
        λειτουργικά συστήματα πέραν του ήδη υπάρχοντος, πράγμα που αυξάνει την
        παραγωγικότητα του τελικού χρήστη, αφού μπορεί να έχει πρόσβαση σε
        εργαλεία που δεν υποστηρίζονται στο δικό του (αρχικό/υπάρχον σύστημα).

        Σε κάθε τύπο υπερ-επόπτη, όταν το φιλοξενούμενο ΛΣ αιτηθεί πρόσβαση
        στους πόρους υπολογισμού, μνήμης και δικτύου του φυσικού υλικού, όλες
        οι προσβάσεις περνάνε πρώτα από αυτόν. Στην περίπτωση όμως
        υπερ-επόπτη τύπου 2, επειδή εκτελείται ως εφαρμογή του ΛΣ φιλοξενίας,
        οι προσβάσεις αυτές χρειάζεται να μεταφραστούν προτού περάσουν στο
        φιλοξενούμενο ΛΣ και τους υποκείμενους πόρους του. Επομένως, σε
        αντίθεση με τους υπερ-επόπτες τύπου 1 όπου η πρόσβαση γίνεται άμεσα, η
        χρήση υπερ-εποπτών τύπου 2 εισάγει προβλήματα καθυστέρησης που μπορεί
        να επηρεάσουν την απόδοση.

        Κατά την χρήση υπερ-επόπτη τύπου 2 παρέχεται μεγαλύτερη
        συμβατότητα/γκάμα υλικού διότι αυτό διαχειρίζεται από το υποκείμενο ΛΣ
        φιλοξενίας. Επιπροσθέτως, εισάγεται πιθανός κίνδυνος ασφαλείας εάν ένας
        εισβολέας παραβιάσει το κεντρικό λειτουργικό σύστημα, επειδή θα
        μπορούσε στη συνέχεια να χειραγωγήσει οποιοδήποτε φιλοξενούμενο
        λειτουργικό σύστημα εκτελείται σε αυτόν.

\end{itemize}

\clearpage

\subsection{Χαρακτηριστικά ενός υπερ-επόπτη}  \label{hypervisorCharacteristics}

Αν και υπάρχουν διαφορετικά είδη υπερ-εποπτών, όλοι έχουν κάποια χαρακτηριστικά
που πρέπει να λάβει κανείς υπόψιν όταν επιλέγει ποιον θα χρησιμοποιήσει. Μερικά
σημαντικά αυτών όπως αναφέρονται από την \citeauthor{ibmHypervisorDefinition}
\footfullcite{ibmHypervisorDefinition} είναι:

\begin{itemize}

    \item \textbf{Απόδοση}:

        Βασικό χαρακτηριστικό ενός υπερ-επόπτη είναι η απόδοση του. Αυτή
        διαφέρει από τον ένα υπερ-επόπτη στον άλλο αναλόγως την κατασκευή και
        τον τύπο του. Όμως, εν γένει, οι bare-metal υπερ-επόπτες θα πρέπει να
        παρέχουν απόδοση κοντά στην εγγενή λόγω της απουσίας ανάγκης μετάφρασης
        των αιτημάτων του φιλοξενούμενου ΛΣ.

    \item \textbf{Οικοσύστημα}:

        Για τη διαχείριση ενός υπερ-επόπτη σε διάφορες κλίμακες πρέπει να
        υπάρχει καλή τεκμηρίωση και διάφορα εργαλεία είτε επίσημα είτε από την
        κοινότητα που να επιτρέπουν δυνατότητες όπως δημιουργία αντιγράφων
        ασφαλείας, ανάλυση χωρητικότητας και διαχείριση εναλλαγής εικονικών
        μηχανών \footfullcite{vmfailover} με αντίγραφα τους σε περιπτώσεις
        σφάλματος του λειτουργικού συστήματος της εκτελούμενης (εικονικής
        μηχανής).

    \item \textbf{Εργαλεία διαχείρισης}:

        Η εκτέλεση εικονικών μηχανών δεν αποτελεί το μοναδικό καθήκον ενός
        διαχειριστή κατά τη χρήση ενός υπερ-επόπτη. Απαραίτητες πρόσθετες
        ενέργειες είναι η συντήρηση και η ανάλυση τους, καθώς και η διαγραφή
        όσων δε χρησιμοποιούνται πλέον. Επομένως, η ύπαρξη εργαλείων που να
        καθιστούν δυνατές αυτές τις ενέργειες αποτελεί σημαντικό παράγοντα κατά
        την επιλογή λογισμικού υπερ-επόπτη.

    \item \textbf{Μεταφορά κατά τη λειτουργία}:

        Πρέπει να υπάρχει η δυνατότητα μεταφοράς εικονικών μηχανών από έναν
        υπερ-επόπτη σε έναν δεύτερο σε διαφορετική φυσική μηχανή, ιδανικά χωρίς
        την ανάγκη διακοπής της λειτουργίας τους. Ένα χαρακτηριστικό που
        χρησιμεύει τόσο για την αποτροπή αποτυχίας παροχής υπηρεσιών της
        εκάστοτε επιχείρησης όσο και για την εξισορρόπηση του φόρτου εργασίας.

\clearpage

    \item \textbf{Κόστος}:

        Το κόστος είναι ένας παράγοντας που πρέπει να ληφθεί υπόψιν κατά την
        επιλογή ενός υπερ-επόπτη. Οι περισσότεροι είναι δωρεάν αλλά υπάρχουν
        και εμπορικές εκδόσεις που προσφέρουν περισσότερες δυνατότητες. Για
        παράδειγμα, η ύπαρξη ή μη, λογισμικού διαχείρισης τους που να επιτρέπει
        την εύκολη κλιμάκωση με βάση τις απαιτήσεις της επιχείρησης.

\end{itemize}

\subsection{Επιλογή υπερ-επόπτη} \label{hypervisorSelection}

        Σε κάθε περίπτωση υπερ-επόπτη, το φιλοξενούμενο ΛΣ δεν γνωρίζει πως
        εκτελείται σε εικονικοποιημένο περιβάλλον ενώ στην περίπτωση παραβίασης
        του ίδιου, η χειραγώγηση όλων των εικονικών μηχανών θα μπορεί να
        πραγματοποιηθεί χωρίς μεγάλη δυσκολία.

        Η επιλογή του τύπου υπερ-επόπτη που θα χρησιμοποιηθεί είναι άμεσα
        εξαρτώμενη από τις ανάγκες του κάθε τελικού χρήση ή επιχείρησης
        ζυγίζοντας τα πλεονεκτήματα και μειονεκτήματα που έρχονται με την κάθε
        επιλογή. Παραδείγματος χάριν, αν η ταχύτητα και η απόδοση αποτελούν
        χαρακτηριστικά υψίστης σημασίας, τότε η επιλογή υπερ-επόπτη τύπου 1
        αποτελεί μονόδρομο. Από την άλλη, αν η προτεραιότητα είναι η ευκολία
        διαχείρισης και η ευελιξία ταχείας εναλλαγής σε διαφορετικά λειτουργικά
        συστήματα, η πιο ταιριαστή επιλογή είναι ένας υπερ-επόπτης τύπου 2.

\section {Τρόπος λειτουργίας της εικονικοποίησης} \label{virtualizationOperation}

Για να πραγματοποιηθεί η εικονικοποίηση, χρειαζόμαστε έναν υπερ-επόπτη. Δηλαδή
ενός λογισμικού που διαχωρίζει τους φυσικούς πόρους από τα εικονικά
περιβάλλοντα, τα οποία τους χρειάζονται. Ένας υπερ-επόπτης μπορεί να
τοποθετηθεί πάνω σε ένα λειτουργικό σύστημα ή να εγκατασταθεί απευθείας στο
υλικό. Η τελευταία εναλλακτική είναι αυτή που επιλέγουν οι περισσότερες
επιχειρήσεις για λόγους αποδοτικότητας αφού θα βρίσκεται μια στρώση πιο κοντά
στο υλικό το οποίο θα διαχειρίζεται. Η δουλειά ενός υπερ-επόπτη είναι
ουσιαστικά να λάβει τους φυσικούς πόρους ενός (φυσικού) μηχανήματος και να τους
χωρίσει με τέτοιο τρόπο ώστε να μπορούν να χρησιμοποιηθούν από τα εικονικά μας
περιβάλλοντα \footfullcite{redhatVirtualization}.

\begin{center}
\begin{figure}[!ht]
\centering
    \includegraphics[width = .5\textwidth]{Figures/RedHat_Virtualization/redhat_virtualization_architecture.png}
    \captionof{figure}{Υπερ-επόπτης πάνω σε διακομιστές \cite{redhatVirtualization}}
    \label{fig:hypervisorOnServers}
\end{figure}
\vspace*{-30pt}
\end{center}

Μετά τη δημιουργία μιας εικονικής μηχανής, οι χρήστες αλληλεπιδρούν με αυτή
όπως θα αλληλεπιδρούσαν με μια φυσική. Οι εικονικές μηχανές έχουν τη μορφή ενός
ενιαίου αρχείου, πράγμα που καθιστά εύκολη τη μεταφορά και ανάγνωση τους από
οποιονδήποτε υπολογιστή αναμένοντας τον ίδιο τρόπο λειτουργίας. Κατά την
εκτέλεση του εικονικού περιβάλλοντος, όταν ένας χρήστης ή ένα πρόγραμμα εκδώσει
μία εντολή που απαιτεί περισσότερους πόρους από τους διαθέσιμους του, ο
υπερ-επόπτης είτε αναμεταδίδει το αίτημα αυτό στο φυσικό σύστημα είτε πρώτα το
μεταφράζει και μεταδίδει το μεταφρασμένο αν είναι υπερ-επόπτης τύπου 2. Έπειτα,
μπορεί να διαθέσει τους απαραίτητους για την εκτέλεση πόρους. Όλα αυτά
συμβαίνουν με σχεδόν εγγενή ταχύτητα αν γίνεται χρήση υπερ-επόπτη τύπου 1 όπου
δεν υπάρχει λειτουργικό σύστημα ανάμεσα στις εικονικές μηχανές και το φυσικό
μηχάνημα. Εξαίρεση στον κανόνα απουσίας λειτουργικού συστήματος αποτελεί η
χρήση ενός υπερ-επόπτη ανοιχτού κώδικα βασισμένου στο KVM (Kernel-based Virtual
Machine), που επιτρέπει στο Linux να συμπεριφέρεται ως ένας υπερ-επόπτης. Αυτό
συμβαίνει διότι το KVM αποτελεί κομμάτι του πυρήνα του Linux από την έκδοση
2.6.20 και έπειτα, επιτρέποντας του να επωφεληθεί από τους διαθέσιμους
μηχανισμούς απομόνωσης μέσω αυτού. Επομένως, του προσφέρεται η ικανότητα να
λάβει αποκλειστικούς πόρους από το φυσικό μηχάνημα \footfullcite{kvm}, κάτι που
εξαλείφει το μειονέκτημα έλλειψης προτεραιότητας των διεργασιών ενός
υπερ-επόπτη τύπου 2 έναντι αυτών του λειτουργικού συστήματος φιλοξενίας.

\clearpage

\subsection{Είδη εικονικοποίησης} \label{virtualizationImplementations}

Υπάρχουν πολλά είδη εικονικοποίησης. Πέντε βασικά αυτών όπως αναφέρονται από
την Red Hat \footfullcite{redhatVirtualization} και τρία ακόμα που
χρησιμοποιούνται συχνά είναι τα παρακάτω:

\begin{itemize}

    \item \textbf{Εικονικοποίηση Δεδομένων}:

        \begin{center}
        \begin{figure}[!ht]
        \centering
            \includegraphics[width = .5\textwidth]{Figures/RedHat_Virtualization/redhat_data_virtualization.png}
            \captionof{figure}{Εικονικοποίηση Δεδομένων \cite{redhatVirtualization}}
            \label{fig:dataVirtualization}
        \end{figure}
        \vspace*{-30pt}
        \end{center}

        Η εικονικοποίηση δεδομένων είναι μια προσέγγιση ενσωμάτωσης δεδομένων
        από διαφορετικές πηγές, σε μια ολιστική, λογική προβολή δίχως την
        ανάγκη της φυσικής μετακίνησης τους \footfullcite{dataVirtualization}.
        Δηλαδή διασκορπισμένα ετερογενή δεδομένα παρεχόμενα από πηγές διαφόρων
        τοποθεσιών δύναται να συσσωματωθούν σε μοναδικά, λογικά τεμάχια μιας
        ενιαίας εικονικής πηγής. Με αυτόν τον τρόπο, οι εταιρείες μπορούν από
        ένα μόνο μοντέλο διαχείρισης δεδομένων να οργανώσουν και να
        επεξεργαστούν διασκορπισμένες πληροφορίες με γνώμονα τις ανάγκες των
        χρηστών με μεγαλύτερη ευκολία και αποδοτικότητα χωρίς την ανάγκη να
        γνωρίζουν τεχνικές λεπτομέρειες (όπως γλώσσες πρόσβασης, δομές
        αποθήκευσης κα.). Τομείς οι οποίοι επωφελούνται από την εικονικοποίηση
        δεδομένων είναι η λήψη αποφάσεων, η επιχειρηματική αναλυτική και η
        αξιολόγηση των κινδύνων.

\clearpage

    \item \textbf{Εικονικοποίηση Επιφάνειας Εργασίας}:

        \begin{center}
        \begin{figure}[!ht]
        \centering
            \includegraphics[width = .5\textwidth]{Figures/RedHat_Virtualization/redhat_desktop_virtualization.png}
            \captionof{figure}{Εικονικοποίηση Επιφάνειας Εργασίας \cite{redhatVirtualization}}
            \label{fig:desktopVirtualization}
        \end{figure}
        \vspace*{-30pt}
        \end{center}

        Με την εικονικοποίηση επιφάνειας εργασίας, δίνεται σε έναν κεντρικό
        διαχειριστή η ικανότητα διαμοιρασμού προσομοιωμένων περιβαλλόντων
        εργασίας σε εκατοντάδες φυσικές μηχανές ή συσκευές ταυτοχρόνως. Εν
        αντιθέσει με τα παραδοσιακά περιβάλλοντα εργασίας που χρήζουν
        εγκατάστασης, διαμόρφωσης και ενημέρωσης σε κάθε υπολογιστή, η
        εικονικοποίηση επιφάνειας εργασίας καθιστά δυνατή τη μαζική διαμόρφωση,
        ενημέρωση και έλεγχο ασφαλείας σε όλα τα εικονικά περιβάλλοντα εργασίας
        που παρέχονται από έναν μόνο διακομιστή. Καθ' αυτόν τον τρόπο, οι
        επιχειρήσεις επιτρέπουν στους χρήστες να μπορούν να εργαστούν από
        οπουδήποτε και με κάθε συσκευή ανεξαρτήτως του είδους ή του
        λειτουργικού συστήματος τους \footfullcite{desktopVirtualization}.

\clearpage

    \item \textbf{Εικονικοποίηση Διακομιστών}:

        \begin{center}
        \begin{figure}[!ht]
        \centering
            \includegraphics[width = .5\textwidth]{Figures/RedHat_Virtualization/redhat_server_virtualization.png}
            \captionof{figure}{Εικονικοποίηση Διακομιστών \cite{redhatVirtualization}}
            \label{fig:serverVirtualization}
        \end{figure}
        \vspace*{-30pt}
        \end{center}

        Οι διακομιστές είναι υπολογιστές σχεδιασμένοι με σκοπό να
        επεξεργάζονται πολύ καλά έναν μεγάλο όγκο συγκεκριμένων διεργασιών,
        ώστε οι κύριοι υπολογιστές μιας επιχείρησης να μπορούν να δίνουν
        προτεραιότητα σε άλλες εργασίες. Με την εικονικοποίηση διακομιστών
        αναφερόμαστε στην διαδικασία κατά την οποία ένας φυσικός διακομιστής
        χωρίζεται σε πολλούς μικρότερους εικονικούς διακομιστές, με απώτερο
        σκοπό την αποτελεσματικότερη αξιοποίηση των πόρων του. Αυτό είναι
        απαραίτητο διότι προτιμάται για λόγους ευκολίας της διαχείρισης τους,
        κάθε διακομιστής να είναι υπεύθυνος για μια μόνο διεργασία την φορά.
        Μετά την κατάτμησή του, ενώ μπορεί να ακολουθείται η ίδια πρακτική,
        παύει το φυσικό μηχάνημα να μένει με αχρησιμοποίητους πόρους και
        πρακτικά μπορεί το σύνολο τον πόρων του να χρησιμοποιηθεί για την
        εξυπηρέτηση πολλαπλών λειτουργιών. Ο ορισμός της εικονικοποίησης
        διακομιστών αναλύθηκε πιο λεπτομερώς και στο
        \ref{virtualizationDefinition}.

\clearpage

    \item \textbf{Εικονικοποίηση Λειτουργικού Συστήματος}:

        \begin{center}
        \begin{figure}[!ht]
        \centering
            \includegraphics[width = .5\textwidth]{Figures/RedHat_Virtualization/redhat_os_virtualization.png}
            \captionof{figure}{Εικονικοποίηση Λειτουργικού Συστήματος \cite{redhatVirtualization}}
            \label{fig:operatingSystemVirtualization}
        \end{figure}
        \vspace*{-30pt}
        \end{center}

        Η εικονικοποίηση λειτουργικού συστήματος είναι κάτι που συμβαίνει στον
        πυρήνα. Αποτελεί υποκατηγορία της εικονικοποίησης διακομιστών και
        πραγματοποιείται σε επίπεδο λειτουργικού συστήματος. Ουσιαστικά
        αναφερόμαστε στην διαδικασία της δοχειοποίησης και συγκεκριμένα, την
        δοχειοποίηση λειτουργικών συστημάτων. Κατά την χρήση της, μπορούν να
        εκτελεστούν ταυτοχρόνως πολλαπλά λειτουργικά συστήματα μέσα σε
        απομονωμένα εικονικά περιβάλλοντα, όπου το κάθε ένα από αυτά μοιράζεται
        τον ίδιο πυρήνα με το λειτουργικό σύστημα φιλοξενίας. Μεγαλύτερη
        ανάλυση της εικονικοποίησης σε επίπεδο λειτουργικού συστήματος
        πραγματοποιήθηκε στο \ref{osVirtualization}.

\clearpage

    \item \textbf{Εικονικοποίηση Λειτουργιών Δικτύου}:

        \begin{center}
        \begin{figure}[!ht]
        \centering
            \includegraphics[width = .5\textwidth]{Figures/RedHat_Virtualization/redhat_network_function_virtualization.png}
            \captionof{figure}{Εικονικοποίηση Λειτουργιών Δικτύου \cite{redhatVirtualization}}
            \label{fig:networkFunctionVirtualization}
        \end{figure}
        \vspace*{-30pt}
        \end{center}

        Η εικονικοποίηση λειτουργιών δικτύου (Network Functions Virtualization
        - NFV) διαχωρίζει τις βασικές λειτουργίες ενός δικτύου (όπως ο
        διαμοιρασμός αρχείων, και η διαμόρφωση IP), ώστε να μπορούν να
        διανεμηθούν σε διάφορα περιβάλλοντα. Από τη στιγμή που οι λειτουργίες
        λογισμικού είναι ανεξάρτητες από τα φυσικά μηχανήματα στα οποία
        εκτελούνται, συγκεκριμένες λειτουργίες μπορούν να πακεταριστούν μαζί σε
        ένα νέο δίκτυο και να ανατεθούν σε ένα ξεχωριστό περιβάλλον. Η
        εικονικοποίηση των δικτύων μειώνει τον αριθμό των φυσικών εξαρτημάτων,
        όπως οι μεταγωγείς, δρομολογητές, διακομιστές, καλώδια και κόμβοι, που
        απαιτούνται για τη δημιουργία πολλαπλών, ανεξάρτητων δικτύων και είναι
        ιδιαίτερα δημοφιλής στον κλάδο των τηλεπικοινωνιών. Παραδοσιακά, οι
        λειτουργίες δικτύου εκτελούνταν σε ιδιόκτητο υλικό συγκεκριμένου σκοπού
        και επομένως ήταν απαραίτητο να πραγματοποιηθεί αγορά, ρύθμιση και
        συντήρηση του κάθε φυσικού εξαρτήματος. Με την αύξηση όμως της
        δημοτικότητας των τεχνολογιών εικονικοποίησης, άρχισε να γίνεται πιο
        δημοφιλής και η πρακτική πακεταρίσματος των λειτουργιών των εξαρτημάτων
        αυτών σε διακομιστές κοινής χρήσης (commodity servers). Το αποτέλεσμα
        αυτού, ήταν η απόκτηση της δυνατότητας εκτέλεσης των λειτουργιών
        δικτύου μιας επιχείρησης σε τυπικούς διακομιστές γενικού σκοπού και
        κατά προέκταση, η αντικατάσταση κάθε ξεχωριστού φυσικού μηχανήματος με
        ένα αντίστοιχο εικονικό εκτελούμενο μέσα από μια εικονική μηχανή
        \footfullcite{redhatNFV}.

\clearpage

    \item \textbf{Εικονικοποίηση Μνήμης}:

        \begin{center}
        \begin{figure}[!ht]
        \centering
            \includegraphics[width = .5\textwidth]{Figures/VMWARE_Virtualization/vmware_memory_virtualization.png}
            \captionof{figure}{Εικονικοποίηση Μνήμης \cite{vmwareMemoryVirtualization}}
            \label{fig:memoryVirtualization}
        \end{figure}
        \vspace*{-30pt}
        \end{center}

        Η εικονικοποίηση μνήμης αποτελεί ένα κομμάτι της ευρύτερης έννοιας της
        εικονικοποίησης πόρων \footfullcite{hostitsmartMemoryVirtualization}.
        Συγκεκριμένα, είναι μια τεχνική κατά την οποία δύναται να
        διαχειριστούμε με έναν πιο αποδοτικό τρόπο την φυσική μνήμη (RAM) που
        χρησιμοποιείται στα υπολογιστικά μας συστήματα. Αυτό συμβαίνει διότι
        στην βασικότερη μορφή της, η εικονικοποίηση μνήμης εμφανίζεται ως
        εικονική μνήμη ή όπως η μνήμη swap σε διακομιστές και σταθμούς εργασίας
        \footfullcite{petriMemoryVirtualization}. Δηλαδή, ως επιπρόσθετη μνήμη
        την οποία το σύστημα εκλαμβάνει ως πραγματική και μπορεί να την
        χρησιμοποιήσει προτού αναγκαστεί να τερματίσει διεργασίες για να
        απελευθερώσει κομμάτι της μνήμης. Για να επιτευχθεί αυτό, μέσω του
        υπερ-επόπτη πραγματοποιείται αντιστοίχιση σελίδων φυσικής μνήμης του
        φιλοξενούμενου λειτουργικού συστήματος στις σελίδες φυσικής μνήμης της
        υποκείμενης μηχανής. Καθ' αυτόν τον τρόπο, κάθε εικονική μηχανή βλέπει
        έναν συνεχόμενο χώρο διευθύνσεων μνήμης που δύναται να χρησιμοποιήσει
        \footfullcite{vmwareMemoryVirtualization}. Ως αποτέλεσμα, επιτυγχάνεται
        εν γένει υψηλότερη αξιοποίηση της μνήμης και η δυνατότητα διαμοιρασμού
        μιας κοινής δεξαμενής μνήμης ακόμα και σε κατανεμημένα συστήματα,
        παρακάμπτοντας τους περιορισμούς της φυσικής μνήμης
        \footfullcite{codingninjasMemoryVirtualization}.

\clearpage

    \item \textbf{Εικονικοποίηση Αποθήκευσης}:

        \begin{center}
        \begin{figure}[!ht]
        \centering
            \includegraphics[width = .4\textwidth]{Figures/UnixArena_Virtualization/unixarena_storage_virtualization.png}
            \captionof{figure}{Εικονικοποίηση Αποθήκευσης \cite{unixarenaVirtualization}}
            \label{fig:storageVirtualization}
        \end{figure}
        \vspace*{-30pt}
        \end{center}

        Ένα ακόμα κομμάτι της ευρύτερης έννοιας της εικονικοποίησης πόρων είναι
        και η εικονικοποίηση αποθήκευσης. Συγκεκριμένα, ο όρος εικονικοποίηση
        αποθήκευσης αναφέρεται στην πρακτική της συγκέντρωσης φυσικού
        αποθηκευτικού χώρου από πολλαπλές συσκευές αποθήκευσης σε μια
        φαινομενικά ενιαία, εικονική συσκευή
        \footfullcite{ubackupStorageVirtualization}. Παρομοίως με την
        εικονικοποίηση μνήμης, αυτό είναι κάτι που θα επιτρέψει την υψηλότερη
        αξιοποίηση δίσκου, θα επιφέρει μεγαλύτερη ευελιξία στον τομέα της
        αποθήκευσης και επιπλέον, θα αποτελέσει ένα πιο διαχειρίσιμο μοντέλο
        χώρου αποθήκευσης σε σχέση με το παραδοσιακό, όπου κάθε υπολογιστής
        έχει πρόσβαση μονάχα στον δικό του δίσκο.

        Προκειμένου να γίνει πράξη, απαιτείται αναλόγως την μέθοδο
        εικονικοποίησης και τον τύπος της, είτε να χρησιμοποιηθεί ένας
        αλγόριθμος για να εντοπίσει δυναμικά τα δεδομένα είτε να δημιουργηθεί
        ένας χάρτης αντιστοίχισης τους χρησιμοποιώντας μεταδεδομένα
        \footfullcite{cloudinfraStorageVirtualization}. Αφότου γίνει αυτό, τα
        δεδομένα πλέον αποθηκεύονται σε ένα αρχείο και οι συστοιχίες δίσκων
        τοποθετούνται μέσα σε μια εικονική δεξαμενή. Έπειτα, κάθε αίτημα
        ανάγνωσης και εγγραφής από τις εφαρμογές φιλτράρεται και δύναται έμμεσα
        μέσω των αντιστοιχιών η δυνατότητα εύρεσης και αποθήκευσης δεδομένων.

\clearpage

    \item \textbf{Εικονικοποίηση Εφαρμογών}:

        \begin{center}
        \begin{figure}[!ht]
        \centering
            \includegraphics[width = .5\textwidth]{Figures/TutorialsPoint_Virtualization/tutorialspoint_application_virtualization.jpg}
            \captionof{figure}{Εικονικοποίηση Εφαρμογών \cite{tutorialsPointVirtualization}}
            \label{fig:applicationVirtualization}
        \end{figure}
        \vspace*{-30pt}
        \end{center}

        Όπως και η εικονικοποίηση λειτουργικού συστήματος, έτσι και η
        εικονικοποίηση εφαρμογών αποτελεί υποκατηγορία της εικονικοποίησης
        διακομιστών και υπάγεται στην διαδικασία της δοχειοποίησης. Το
        επιθυμητό αποτέλεσμα της εικονικοποίησης εφαρμογών είναι ο διαχωρισμός
        των βιβλιοθηκών και εξαρτήσεων τους από το περιβάλλον στο οποίο
        εκτελούνται μέσω της δημιουργίας δοχείων. Στα δοχεία αυτά,
        εικονικοποιούνται οι απαραίτητοι υπολογιστικοί πόροι όπως το
        λειτουργικό σύστημα, η μνήμη και η κεντρική μονάδα επεξεργασίας
        \footfullcite{geeksforgeeksApplicationVirtualization}, κάνοντας χρήση
        των διαθέσιμων μηχανισμών απομόνωσης του πυρήνα του λειτουργικού
        συστήματος. Περισσότερες λεπτομέρειες για τον τρόπο κατά τον οποίο
        επιτυγχάνεται αυτό, παρουσιάζονται στο \ref{osVirtualization}.

\end{itemize}

\clearpage

\subsection{Πλεονεκτήματα της εικονικοποίησης} \label{virtualizationAdvantages}

Η εικονικοποίηση προσφέρει πολλά πλεονεκτήματα στις επιχειρήσεις. Τα πιο
αξιοσημείωτα αυτών με βάση την \citeauthor{ibmVirtualizationDefinition}
\footfullcite{ibmVirtualizationDefinition} είναι τα εξής:

\begin{itemize}

    \item \textbf{Αποδοτικότητα πόρων}:

        Η χρήση εικονικοποίησης συνεπάγεται με την μείωση του αριθμού των
        φυσικών μηχανημάτων που απαιτούνται για την εκτέλεση των εφαρμογών.
        Αυτό συμβαίνει διότι εφόσον ένας φυσικός διακομιστής μπορεί να
        φιλοξενήσει πολλαπλές εικονικές μηχανές, αυτές με την σειρά τους
        δύναται να αντικαταστήσουν άλλους φυσικούς διακομιστές που θα ήταν
        απαραίτητοι για την εκτέλεση διαφορετικών λειτουργιών
        \footfullcite{mediumVirtualization}. Με αυτόν τον τρόπο, εξοικονομείται
        η ενέργεια που θα απαιτούσε η διάθεση των υπολογιστικών πόρων των
        φυσικών μηχανημάτων που αποσύρθηκαν, ενώ ταυτόχρονα αξιοποιούνται σε
        μεγαλύτερο βαθμό οι υπολογιστικοί πόροι του μηχανήματος που φιλοξενεί
        τις εικονικές μηχανές.

    \item \textbf{Ευκολότερη διαχείριση}:

        Αντικαθιστώντας φυσικούς υπολογιστές με προγραμματιστικά καθορισμένες
        εικονικές μηχανές δύναται η χρήση αυτοματοποιημένων ροών διαχειριστικών
        εργασιών. Οι διαχειριστές συστημάτων μπορούν να χρησιμοποιούν εργαλεία
        για τον καθορισμό εικονικών μηχανών χρησιμοποιώντας πρότυπα κατάλληλα
        για την υποδομή κάθε επιχείρησης. Με αυτόν τον τρόπο, η εγκατάσταση και
        η ρύθμισή τους μπορεί να γίνεται επανειλημμένα με αυτοματοποιημένο
        τρόπο δίχως το ρίσκο ανθρώπινου λάθους και γλιτώνοντας τον χρόνο
        εγκατάστασης και ρύθμισης τους χειροκίνητα. Ένας συνδυασμός εργαλείων
        που κάνει αυτή τη διαδικασία πραγματικότητα είναι τα Ansible
        \footfullcite{ansible} και Terraform \footfullcite{terraform}.

    \item \textbf{Ελάχιστος χρόνος διακοπής λειτουργίας}:

        Οι καταρρεύσεις λειτουργικών συστημάτων και εφαρμογών μπορεί να
        προκαλέσουν διακοπή λειτουργίας και να διαταράξουν την παραγωγικότητα
        των χρηστών. Οι διαχειριστές έχουν την δυνατότητα εκτέλεσης
        πλεοναζουσών εικονικών μηχανών, με σκοπό την ταχεία εναλλαγή σε αυτές
        στην περίπτωση που προκύψουν προβλήματα στις αρχικές. Κάτι τέτοιο, δεν
        θα ήταν αποδοτικό για την επιχείρηση διαθέτοντας αποκλειστικά μη
        εικονικοποιημένα φυσικά μηχανήματα.

    \item \textbf{Ταχύτερη παροχή}:

        Η αγορά, εγκατάσταση και διαμόρφωση του υλικού για κάθε εφαρμογή είναι
        χρονοβόρα. Εφόσον το υλικό είναι ήδη στη θέση του και μπορεί να
        εντοπίζεται και απομακρυσμένα (όπως στην περίπτωση περιβαλλόντων
        νέφους), η παροχή εικονικών μηχανών για την εγκατάσταση και  εκτέλεση
        όλων των εφαρμογών είναι σημαντικά ταχύτερη.

\end{itemize}

\subsection{Παρα-εικονικοποίηση} \label{paraVirtualization}

Όταν αναφερόμαστε στην εικονικοποίηση συνήθως μιλάμε για την πιο συνηθισμένη
μορφή της, η οποία είναι η πλήρης εικονικοποίηση. Με την πάροδο του χρόνου και
την αύξηση της δημοτικότητας της εικονικοποίησης, αναπτύχθηκαν πολλοί
υπερ-επόπτες που μπορεί να διαφέρουν όχι μόνο στα χαρακτηριστικά τους αλλά και
στις διάφορες τεχνικές που χρησιμοποιούν για να κάνουν την εικονικοποίηση
πραγματικότητα. Μια από αυτές ονομάζεται παρα-εικονικοποίηση
(para-virtualization) \footfullcite{suseParavirtualizationDefinition}.

Κάθε εικονική μηχανή απαιτεί ένα συγκεκριμένο ποσοστό χρήσης υπολογιστικών
πόρων του φυσικού διακομιστή για να εκτελείται. Μέσα σε αυτό το ποσοστό,
συμπεριλαμβάνεται και η επιβάρυνση που εισάγει η συνεχής μετάφραση εικονικών σε
φυσικούς πόρους. Έχοντας υπόψιν πως κάθε φυσικός διακομιστής διαθέτει
πεπερασμένους πόρους, με την πλήρη εικονικοποίηση επιβάλλεται ένα όριο στον
αριθμό των εικονικών μηχανών που μπορεί αυτός να υποστηρίξει. Επιπροσθέτως,
προκύπτουν και προβλήματα καθυστέρησης αφού η διαδικασία της μετάφρασης απαιτεί
κάποιο χρόνο για να διεκπεραιωθεί. Επομένως, η πλήρης εικονικοποίηση περιορίζει
σημαντικά τον αριθμό των εικονικών μηχανών που δύναται ένας διακομιστής να
εκτελέσει παράλληλα, όπως επίσης και τα είδη εφαρμογών που μπορούν να
εκτελεστούν σε μια εικονική μηχανή (εφόσον η ταχύτητα εκτέλεσης τους παίζει
σημαντικό ρόλο στην ευχρηστία τους). Μερικοί τομείς που επωφελούνται από την
παρα-εικονικοποίηση είναι η χρήση λογισμικών που επιτρέπουν την ανάκαμψη από
καταστροφές, την μετανάστευση δεδομένων μεταξύ λειτουργικών συστημάτων
\footfullcite{insightsForProfessionalsParavirtualization} ή ακόμα και λογισμικά
ενσωματωμένων συστημάτων αυτοκινήτων
\footfullcite{blackberryParavirtualization}.

\clearpage

Η παρα-εικονικοποίηση είναι μια τεχνική εικονικοποίησης που αναπτύχθηκε
προκειμένου να ξεπεραστούν τα προαναφερόμενα προβλήματα επιδόσεων που έρχονται
με την χρήση της πλήρους εικονικοποίησης. Κατά την χρήση της, το φιλοξενούμενο
λειτουργικό σύστημα δεν είναι πλήρως απομονωμένο από το υλικό αλλά απομονώνεται
μερικώς \footfullcite{serverWatchParavirtualization} και έχει άμεση επικοινωνία
με αυτό. Υπάρχει δηλαδή επίγνωση της εικονικοποίησης από μεριάς του ΛΣ των
εικονικών μηχανών και αξιοποίηση της, μέσω της χρήσης υπερ-κλήσεων προς τον
υπερ-επόπτη. Οι κλήσεις αυτές, επιτρέπουν σε κάθε ΛΣ να ζητάει πόρους κατά
παραγγελία και να αναθέτει την εκτέλεση διεργασιών του απευθείας στο υλικό. Για
να μπορέσει να επιτευχθεί αυτό, απαιτείται η τροποποίηση του φιλοξενούμενου
λειτουργικού συστήματος, η οποία θα του επιτρέπει την υλοποίηση ενός ειδικού
API, ώστε να μπορεί να κάνει χρήση των υπερ-κλήσεων
\footfullcite{servermaniaParavirtualization}, ενώ επιβάλλεται να υποστηρίζεται
και από τον υπερ-επόπτη η κατανόηση τους.

Παρ' όλα τα πλεονεκτήματα που παρέχει η χρήση της παρα-εικονικοποίησης,
υπάρχουν και μερικά ζητήματα που πρέπει να ληφθούν υπόψιν. Εξαιτίας της ανάγκης
τροποποίησης του λειτουργικού συστήματος των φιλοξενούμενων λειτουργικών
συστημάτων, αυτά καθίστανται λιγότερο φορητά σε σχέση με την πλήρη
εικονικοποίηση, αφού τροποποιούνται για την υποστήριξη συγκεκριμένου υλικού
αντί ενός υπερ-επόπτη \footfullcite{blackberryParavirtualization}. Ταυτοχρόνως,
η στενή εξάρτηση μεταξύ του υπερ-επόπτη και των φιλοξενούμενων ΛΣ μπορεί να
διακοπεί από τις ενημερώσεις του λειτουργικού συστήματος
\footfullcite{insightsForProfessionalsParavirtualization}, κάνοντας την
παρα-εικονικοποίηση λιγότερο αξιόπιστη.

\clearpage

Στο σχήμα \ref{fig:FullVirtualization}
\cite{geeksforgeeksParavirtualizationDefinition} παρουσιάζεται η αρχιτεκτονική
της πλήρους εικονικοποίησης όπου το φιλοξενούμενο λειτουργικό σύστημα (της
εικονικής μηχανής) επιβάλλεται να περάσει τα αιτήματα του (πρόσβασης πόρων)
μέσω του υπερ-επόπτη.

\begin{center}
\begin{figure}[!ht]
\centering
    \includegraphics[width = .5\textwidth]{Figures/GeeksForGeeksParavirtualization/Full-Virualization.png}
    \captionof{figure}{Πλήρης εικονικοποίηση \cite{geeksforgeeksParavirtualizationDefinition}}
    \label{fig:FullVirtualization}
\end{figure}
\vspace*{-30pt}
\end{center}

Αντιθέτως, στo σχήμα \ref{fig:ParaVirtualization} όπου και φαίνεται η
αρχιτεκτονική της παρα-εικονικοποίησης, βλέπουμε πως μέσω των υπερ-κλήσεων, όλα
τα αιτήματα προορίζονται στη στρώση εικονικοποίησης και από εκεί στο κύριο
σύστημα (χωρίς την ανάγκη κάποιας επεξεργασίας ή μετάφρασης).

\begin{center}
\begin{figure}[!ht]
\centering
    \includegraphics[width = .5\textwidth]{Figures/GeeksForGeeksParavirtualization/Paravirtualization.png}
    \captionof{figure}{Παρα-εικονικοποίηση \cite{geeksforgeeksParavirtualizationDefinition}}
    \label{fig:ParaVirtualization}
\end{figure}
\vspace*{-30pt}
\end{center}

\clearpage

Οι διαφορές της πλήρους εικονικοποίησης με την παρα-εικονικοποίηση με βάση τον
οργανισμό \citeauthor{geeksforgeeksParavirtualizationDefinition}
\footfullcite{geeksforgeeksParavirtualizationDefinition} είναι οι εξής:

\begin{savenotes} % by the package footnote because footfullcite did not work inside a tabular
\selectfont
\begin{table}[!ht]
\caption{Διαφορές πλήρους εικονικοποίησης και παρα-εικονικοποίησης}
\renewcommand{\arraystretch}{1.5}
\centering
\newcolumntype{C}{>{\centering\arraybackslash}m{6cm}}
\textgreek{\begin{tabular}{||c|C|C||}
\hline

Νούμερο & Πλήρης εικονικοποίηση & Παρα-εικονικοποίηση \\ [0.5ex]

\hline\hline

1 &

Πλήρης απομόνωση της εικονικής μηχανής. &

Μερική απομόνωση και χρήση API για αμεσότερη επικοινωνία. \\

\hline

2 &

Λιγότερο ασφαλής. &

Υπάρχει επίγνωση του εικονικού περιβάλλοντος και δε γίνεται εκκίνηση του BIOS
\footfullcite{ParavirtualizationSecurity}, πράγμα που την καθιστά ασφαλέστερη.
\\

\hline

3 &

Χρήση δυαδικής μετάφρασης.\footnote{\textgreek{Αυτό ισχύει στην περίπτωση
εικονικοποίησης υποβοηθούμενη από το λογισμικό.}} &

Χρήση υπερ-κλήσεων κατά την εκτέλεση. \\

\hline

4 &

Πιο αργές ταχύτητες
\footfullcite{ParavirtualizationVmware}\footnote{\textgreek{Με βάση την VMware,
η απόδοση της παρα-εικονικοποίησης είναι καλύτερη υπό ορισμένες περιπτώσεις,
ενώ η πλήρης εικονικοποίηση με χρήση δυαδικής μετάφρασης παρέχει καλύτερη
απόδοση από την πρώτη γενιά εικονικοποίησης υποβοηθούμενη από το υλικό.}}. &

Γρηγορότερη εκτέλεση. \\

\hline

5 &

Μεγαλύτερη συμβατότητα και μεταφερσιμότητα. &

Λόγω της αρχιτεκτονικής της είναι δυσκολότερη η μεταφορά εικονικών μηχανών. \\

\hline

6 &

Υποστήριξη όλων των συστημάτων χωρίς την απαίτηση τροποποιήσεων. &

Απαιτείται τροποποίηση του φιλοξενούμενου λειτουργικού συστήματος για να κάνει
χρήση υπερ-κλήσεων. \\

\hline
\end{tabular}}
\label{table:virtualizationTypesDifferences}
\renewcommand{\arraystretch}{1}
\end{table}
\end{savenotes}

\clearpage

\section{Ασφάλεια στην εικονικοποίηση} \label{virtualizationSecurity}

Η χρήση της εικονικοποίησης παρέχει αρκετά εγγενή οφέλη ασφαλείας με την μορφή
μέτρων ανάκαμψης από επιθέσεις. Ένα σημαντικό αυτών, είναι η ικανότητα
επαναφοράς εικονικών μηχανών που έχουν μολυνθεί με κακόβουλο λογισμικό σε μια
χρονική περίοδο πριν τη μόλυνση τους. Αυτό επιτυγχάνεται μέσω της δυνατότητας
δημιουργίας στιγμιοτύπων εικονικών μηχανών \footfullcite{vmSnapshots}, η οποία
παρέχεται από τον υπερ-επόπτη. Επιπρόσθετα, μπορεί εύκολα να πραγματοποιηθεί
διαγραφή και αναδημιουργία τους με έναν αυτοματοποιημένο τρόπο, σε περίπτωση
που η επαναφορά σε προηγούμενη χρονική περίοδο για οποιονδήποτε λόγο δεν είναι
εφικτή. Αυτή η λύση μπορεί να εφαρμοστεί χωρίς αρνητικές επιπτώσεις εάν τα
δεδομένα της εικονικής μηχανής είτε δεν μας ενδιαφέρουν, είτε βρίσκονται σε
διαφορετική τοποθεσία επειδή γίνεται χρήση εικονικοποίησης αποθήκευσης, είτε
υπάρχουν αντίγραφα ασφαλείας τους. Αυτές οι λειτουργίες είναι αρκετές φορές
αδύνατο να εφαρμοστούν σε ένα φυσικό μηχάνημα διότι το κακόβουλο λογισμικό
συχνά μπορεί να είναι βαθιά ριζωμένο στα βασικά συστατικά του συστήματος
\footfullcite{ibmVirtualizationDefinition}. Επιπλέον, ακόμα και αν το κακόβουλο
λογισμικό ήταν σε θέση να εξαφανιστεί με μια επαναφορά, κάτι τέτοιο θα
χρειαζόταν σημαντικά περισσότερο χρόνο για να διεκπεραιωθεί σε ένα φυσικό
μηχάνημα συγκριτικά με μια εικονική μηχανή.

Παρ' όλα αυτά, η εικονικοποίηση δεν είναι απαλλαγμένη από κινδύνους καθώς
παραβιάζοντας τον υπερ-επόπτη, ένας επιτιθέμενος έχει πρόσβαση σε όλες τις
εικονικές μηχανές που διαχειρίζονται μέσω αυτού. Επίσης, αυτό είναι δυσκολότερο
να εντοπιστεί λόγω της ικανότητας του υπερ-επόπτη να επιτρέπει στις εικονικές
μηχανές τη μεταξύ τους επικοινωνία χωρίς την αλληλεπίδραση με το φυσικό δίκτυο.
Τέλος, η ακεραιότητα του συστήματος εξαρτάται άμεσα και από τον τύπο του
υπερ-επόπτη. Αυτό συμβαίνει διότι για υπερ-επόπτες τύπου 2, υπάρχει πολλές
φορές η ανάγκη διαμοιρασμού δεδομένων μεταξύ των εικονικών μηχανών και του ΛΣ
φιλοξενίας. Επομένως, η παραβίαση ενός υπερ-επόπτη τύπου 2 μπορεί δυνητικά να
οδηγήσει στην εξάπλωση κακόβουλου λογισμικού και να κινδυνεύσει όλο το σύστημα
\footfullcite{techtargetHypervisorSecurity}.

\clearpage

\subsection{Απειλές στην εικονικοποίηση} \label{virtualizationThreats}

Όλες οι μορφές εικονικοποίησης είναι ευάλωτες σε επιθέσεις. Όπως αναφέρεται και
στο \cite{wen2008sevmm} μέσω του \cite{arif2015virtualization}, πολλές φορές δε
δύναται ο υπερ-επόπτης, το λειτουργικό σύστημα ή ακόμα και η υπηρεσία ελέγχου
πρόσβασης (Mandatory Access Control) του Linux να ανταπεξέλθουν στις απαιτήσεις
ασφαλείας όλων των εφαρμογών. Το παράδειγμα που παρουσιάζεται στο
\cite{arif2015virtualization} αναφέρεται στην εικονικοποίηση χώρου αποθήκευσης
μέσω δικτύου αλλά πολλές από τις απειλές δεν περιορίζονται μονάχα εκεί.

Πολλές από τις απειλές που θα αναφερθούν παρακάτω
\ref{virtualizationThreatsCategorization}, μπορούν να κατηγοριοποιηθούν και ως
εξής:

\begin{table}[!ht]
\caption{Πηγές απειλών στην εικονικοποίηση}
\renewcommand{\arraystretch}{1.5}
\centering
\newcolumntype{C}{>{\centering\arraybackslash}m{6cm}}
\textgreek{\begin{tabular}{||C|C||}
\hline

Πηγή απειλής & Περιγραφή \\ [0.5ex]

\hline\hline

Δίκτυο $\Rightarrow$ Υπερ-επόπτη &

Απειλές που προέρχονται από το δίκτυο και στοχεύουν τον υπερ-επόπτη. \\

\hline

Δίκτυο $\Rightarrow$ Εικονική Μηχανή &

Απειλές που προέρχονται από το δίκτυο και στοχεύουν εικονικές μηχανές. \\

\hline

Υπερ-επόπτη $\Rightarrow$ Εικονική Μηχανή &

Απειλές που προέρχονται από τον υπερ-επόπτη και στοχεύουν εικονικές μηχανές. \\

\hline

Εικονική μηχανή $\Rightarrow$ Εικονική Μηχανή &

Απειλές που προέρχονται από εικονικές μηχανές και στοχεύουν άλλες εικονικές
μηχανές. \\

\hline

Εικονική μηχανή $\Rightarrow$ Υπερ-επόπτη &

Απειλές που προέρχονται από εικονικές μηχανές και στοχεύουν τον υπερ-επόπτη. \\

\hline

Διαχειριστή $\Rightarrow$ Υπερ-επόπτη &

Απειλές που προέρχονται από τον διαχειριστή εικονικών μηχανών και στοχεύουν τον
υπερ-επόπτη. \\

\hline

Διαχειριστή $\Rightarrow$ Εικονική Μηχανή &

Απειλές που προέρχονται από τον διαχειριστή εικονικών μηχανών και στοχεύουν τις
εικονικές μηχανές. \\

\hline
\end{tabular}}
\label{table:virtualizationThreatSources}
\renewcommand{\arraystretch}{1}
\end{table}

\clearpage

\subsubsection{Απειλές για τον πάροχο νέφους μέσω δικτύου} \label{cloudProviderThreatsOverNetwork}

Σήμερα όλο και περισσότερες επιχειρήσεις θα προτιμήσουν να βασιστούν σε έναν
πάροχο νέφους για την απόκτηση υποδομών προκειμένου να ξεκινήσουν να
εξυπηρετούν τους δυνητικούς πελάτες τους έναντι της παραδοσιακής διαδικασίας
αγοράς, ρύθμισης και διαχείρισης φυσικών διακομιστών. Η ταχύτερη εκκίνηση
παροχής υπηρεσιών, το μικρότερο κόστος και η ευκολία διαχείρισης της υποδομής
τους, δεν αφήνουν περιθώρια αμφιβολίας της ορθότητας αυτής της απόφασης. Για να
μπορούν όμως να παρέχουν τις υπηρεσίες τους στους τελικούς χρήστες, είναι
απαραίτητη η μεταφορά δεδομένων από την επιχείρηση προς τον πάροχο νέφους, στις
υποδομές του οποίου στεγάζονται οι εφαρμογές τους. Όπως αναφέραμε όμως στο
\ref{cloudComputingSecurity}, εισάγεται έτσι ένα αναγκαίο μοντέλο εμπιστοσύνης
ανάμεσα στον πάροχο νέφους και τις επιχειρήσεις. Δηλαδή ταυτόχρονη εμπιστοσύνη
ως προς την απουσία μη εξουσιοδοτημένης πρόσβασης σε αυτά από τον πάροχο και ως
προς την ικανότητα του παρόχου να λάβει τα απαραίτητα μέτρα ασφαλείας για την
προστασία τους από εξωτερικούς κακόβουλους χρήστες.

Ένα από τα σημαντικότερα ζητήματα που απασχολεί μια επιχείρηση είναι η
ασφάλεια. Επιλέγοντας να χρησιμοποιήσουν τις υπηρεσίες ενός παρόχου νέφους,
όμως, παραχωρούν ουσιαστικά πρόσβαση στις εφαρμογές τους και στα ευαίσθητα
δεδομένα αυτών, διότι η ευθύνη προστασίας των υποδομών ανήκει στον ιδιοκτήτη
των υποδομών αυτών και στην προκειμένη περίπτωση αυτός είναι ο πάροχος νέφους.
Έτσι κακόβουλοι εισβολείς θα προσπαθήσουν να βρουν τρωτότητες στη διαδικασία
παράδοσης των υπηρεσιών του παρόχου, τις υπηρεσίες τις ίδιες ή και τις διεπαφές
με τις οποίες παρέχονται. Ένας συνηθισμένος τρόπος για να γίνει αυτό είναι
εκτελώντας επιθέσεις τύπου Cross site scripting (XSS), έγχυση SQL (SQL
injection), χειραγώγησης cookies ή εκμετάλλευσης μη ασφαλούς ρύθμισης, θέτοντας
έτσι σε κίνδυνο ευαίσθητες πληροφορίες και δεδομένα των επιχειρήσεων. Επιπλέον,
επειδή όλα τα δίκτυα είναι επιρρεπή σε επιθέσεις αν δεν έχουν ληφθεί τα
κατάλληλα μέτρα προστασίας, ένας πάροχος πρέπει να μπορεί να προστατευτεί από
επιθέσεις όπως η κατασκοπεία και διείσδυση δικτύου (network
penetration)\cite{arif2015virtualization}.

\clearpage

\subsubsection{Απειλές για τον πάροχο νέφους μέσω εικονικών μηχανών} \label{cloudProviderAttackOverVMs}

Όπως μια επιχείρηση πρέπει να εμπιστεύεται τον πάροχο νέφους ότι θα
προστατεύσει τα δεδομένα της, έτσι και ο πάροχος πρέπει να εμπιστεύεται την
επιχείρηση ότι δε θα προσπαθήσει να προκαλέσει ζημιά στις υπηρεσίες του. Αυτό
μπορεί να πραγματοποιηθεί με την εκτέλεση κακόβουλου λογισμικού στις εικονικές
μηχανές του παρόχου είτε από την επιχείρηση την ίδια, είτε μέσω ενός
επιτιθέμενου που παραβίασε τις εικονικές μηχανές της.

Ουσιαστικά κάθε εικονική μηχανή που έχει πρόσβαση στο διαδίκτυο είναι ευάλωτη
σε απειλές όπως δούρειοι ίπποι (Trojans), ιοί και κακόβουλα λογισμικά που
μπορεί να εξαπλωθούν στο σύστημα μεταπηδώντας από μια εικονική μηχανή στον
υπερ-επόπτη και από εκεί είτε να συνεχίσουν στο σύστημα είτε να μολύνουν και
τις υπόλοιπες εικονικές μηχανές που αυτός διαχειρίζεται. Επομένως, ο πάροχος
απαιτείται να έχει λάβει τα κατάλληλα μέτρα προστασίας έναντι κακόβουλων
εικονικών μηχανών.

Με βάση την ανάλυση που έγινε στο \cite{virtualizationSecurity}, στις απειλές
από εικονική μηχανή σε εικονική μηχανή, οι πιο συνηθισμένες είναι η επίθεση
πλευρικού καναλιού (cross VM side channel attack), οι επιθέσεις βάσει
χρονοπρογραμματιστή (Scheduler based attacks) και οι επιθέσεις που στοχεύουν
τρωτότητες της διαδικασίας μετανάστευσης και επαναφοράς εικονικών μηχανών (VM
migration and rollback attacks). Από την άλλη, όσον αφορά τις απειλές από
εικονικές μηχανές προς τον υπερ-επόπτη, ανάμεσα στις πιο σημαντικές βρίσκονται
η μεταπήδηση εικονικής μηχανής (VM Hopping) και η απόδραση εικονικής μηχανής
(VM Escape). Τέλος, μερικές επιπρόσθετες απειλές σύμφωνα με τους
\citeauthor{Aalam_2021} \cite{Aalam_2021}, είναι η κλοπή εικονικών μηχανών και
η τροποποίηση του υπερ-επόπτη.

\clearpage

\subsubsection{Κατηγοριοποίηση απειλών στην εικονικοποίηση} \label{virtualizationThreatsCategorization}

Οι προαναφερόμενες απειλές σε συνδυασμό με μερικές πιθανές ευπάθειες, έχουν
κατηγοριοποιηθεί από τους \citeauthor{virtualizationSecurity} στο
\cite{virtualizationSecurity} ως εξής:

\begin{table}[!ht]
\caption{Κατηγοριοποίηση απειλών στην εικονικοποίηση}
\renewcommand{\arraystretch}{1.5}
\centering
\newcolumntype{C}{>{\centering\arraybackslash}m{6cm}}
\newcommand\Tstrut{\rule{0pt}{2.6ex}}         % = `top' strut
\newcommand\Bstrut{\rule[-0.9ex]{0pt}{0pt}}   % = `bottom' strut
\textgreek{\begin{tabular}{||C|C||}
\hline

Κατηγορία & Απειλές και πιθανά ευπαθή σημεία \\ [0.5ex]

\hline\hline

Απειλές Δικτύου &

XML Signature Wrapping Attacks\Tstrut\Bstrut\hline
Flooding Attacks (DDoS)\Tstrut\Bstrut\hline
Metadata Spoofing Attacks\Tstrut\Bstrut\hline
Insecure Web Apps \& APIs\Tstrut\Bstrut\hline
Cross Site Scripting Attacks\Tstrut\Bstrut\hline
Port scanning\Tstrut\Bstrut\hline
Botnets\Tstrut\Bstrut\hline
Spoofing attacks\Tstrut\Bstrut\hline
DNS attacks\Tstrut\Bstrut\hline
Sniffer attacks\Tstrut\Bstrut\hline
Denial of Service (DoS)\Tstrut\Bstrut \\

\hline

Απειλές για τον Πάροχο &

Sniffing Attacks\Tstrut\Bstrut\hline
Spoofing Attacks\Tstrut\Bstrut\hline
Denial of Service Attacks\Tstrut\Bstrut\hline
cross VM side channel attacks\Tstrut\Bstrut\hline
VM scheduler based attacks\Tstrut\Bstrut\hline
VM Hopping\Tstrut\Bstrut\hline
VM Escape\Tstrut\Bstrut\hline
Dynamic Data Updates\Tstrut\Bstrut\hline
Data scavenging\Tstrut\Bstrut \\

\hline

Απειλές για τις Εφαρμογές &

Malware injection\Tstrut\Bstrut\hline
Steganography attacks\Tstrut\Bstrut\hline
Web services attacks\Tstrut\Bstrut\hline
Protocol-based attacks\Tstrut\Bstrut\hline
Security Misconfigurations\Tstrut\Bstrut\hline
SQL Injection Attacks\Tstrut\Bstrut \\

\hline
\end{tabular}}
\label{table:virtualizationThreatCategories}
\renewcommand{\arraystretch}{1}
\end{table}

\clearpage

Κατηγοριοποίηση με μεγαλύτερη λεπτομέρεια ως προς τις κατηγορίες αδυναμιών όπου
δύναται να υπάρχουν τρωτότητες και τις αντιστοιχούμενες αδυναμίες αυτών,
πραγματοποιήθηκε από τον οργανισμό \citeauthor{enisaSecurityOfVirtualization}
στο \cite{enisaSecurityOfVirtualization} όπου και απεικονίζεται ως:

\begin{center}
    \begin{figure}[!ht]
        \centering
        \includegraphics[width = .93\textwidth]{Figures/Enisa/enisaThreats.jpg}
        \captionof{figure}{Πιθανά σημεία εμφάνισης τρωτοτήτων και οι απειλές που τους αντιστοιχούν}
        \label{fig:virtualizationThreats.png}
    \end{figure}
\vspace*{-30pt}
\end{center}

\clearpage

\subsection{Η τριάδα της ασφάλειας} \label{securityTriad}

Εν γένει, ο λόγος που μια επιχείρηση ενδιαφέρεται για την ασφάλεια, είναι
προκειμένου να διασφαλίσει την ακεραιότητα, την εμπιστευτικότητα και τη
διαθεσιμότητα των δεδομένων της. Αυτά τα τρία στοιχεία αποτελούν την τριάδα της
ασφάλειας \footfullcite{ciaTriad} και η απώλεια οποιουδήποτε από αυτά μπορεί να
έχει σοβαρές επιπτώσεις στην επιχείρηση. Η σημασία του καθενός, καθώς και
γενικές ορθές πρακτικές διατήρησης τους περιγράφονται ως εξής:

\begin{itemize}

    \item \textbf{Ακεραιότητα δεδομένων} \label{dataIntegrity}

        Η ακεραιότητα των δεδομένων είναι ένα από τα τρία βασικά στοιχεία της
        ασφάλειας, δίχως την οποία οι επιχειρήσεις δε θα μπορούσαν να
        παραμείνουν λειτουργικές. Αναφέρεται στην προστασία των δεδομένων από
        μη εξουσιοδοτημένη αλλοίωση καθ' όλη τη διάρκεια της ύπαρξης τους.
        Δηλαδή είτε βρίσκονται στο στάδιο της μεταφοράς, είτε της αποθήκευσης.
        Για κάθε επιχείρηση, απαιτείται μεγάλη προσοχή κατά τον σχεδιασμό των
        βάσεων δεδομένων και της συντήρησης τους σε περιβάλλοντα νέφους αλλά
        και η χρήση ορθών πρακτικών, όπως ο περιοδικός έλεγχος των δεδομένων
        για την ανίχνευση πιθανών αλλοιώσεων και η χρήση μηχανισμών αναγνώρισης
        και αποκατάστασης σφαλμάτων.

    \item \textbf{Εμπιστευτικότητα δεδομένων} \label{dataConfidentiality}

        Όπως η ακεραιότητα, έτσι και η εμπιστευτικότητα των δεδομένων είναι
        κάτι για το οποίο μια επιχείρηση πρέπει να φροντίσει εκ των προτέρων.
        Αναφέρεται στην προστασία των δεδομένων από μη εξουσιοδοτημένη πρόσβαση
        κατά τη μεταφορά, την αποθήκευση και την επεξεργασία τους. Ένα κενό
        ασφαλείας στην τελική εφαρμογή ενός χρήστη μπορεί να δώσει πρόσβαση σε
        έναν εισβολέα παραβιάζοντας έτσι τις βάσεις δεδομένων της επιχείρησης.
        Επειδή σε ένα περιβάλλον νέφους δεν έχει η ίδια η επιχείρηση πρόσβαση
        στις υποδομές που χρησιμοποιεί, πέρα από μέτρα προστασίας που θα πρέπει
        να λάβει η ίδια, είναι απαραίτητη και η επικοινωνία με τον πάροχο
        νέφους προκειμένου να διαπιστωθεί ο τρόπος εξασφάλισης της
        εμπιστευτικότητας των δεδομένων από μεριάς του.

\clearpage

    \item \textbf{Διαθεσιμότητα δεδομένων} \label{dataAvailability}

        Η διαθεσιμότητα των δεδομένων, που ολοκληρώνει την τριάδα της
        ασφάλειας, είναι το στοιχείο που εξασφαλίζει πως μια επιχείρηση θα
        μπορεί να παρέχει τις υπηρεσίες της στους τελικούς της χρήστες.
        Αναφέρεται στην αποφυγή της διακοπής πρόσβασης στα δεδομένα της από
        εξουσιοδοτημένους φορείς και εξαρτάται άμεσα από τη συνεχή παροχή
        υπηρεσιών υποδομών προς την επιχείρηση. Η απώλεια της θα είχε ως
        αποτέλεσμα την διακοπή σημαντικών λειτουργιών της και δυνητικά την
        μείωση της αξιοπιστίας της. Για να μπορέσει να διασφαλιστεί, πρέπει μια
        επιχείρηση να έχει προβλέψει για ένα σχέδιο ανάκτησης εφεδρικών
        αντιγράφων προς αποφυγή της απώλειας σημαντικών δεδομένων της, καθώς
        και για ένα σχέδιο επαναφοράς των διαδικασιών παροχής τους ώστε να
        μειώσει στο ελάχιστο την οποιαδήποτε διάρκεια διακοπής των υπηρεσιών
        της. Τέλος, πρέπει να υπάρχει εμπιστοσύνη προς τον πάροχο νέφους πως
        δεν θα υπάρξει από μεριάς του απρόσμενη διακοπή της λειτουργίας
        υποδομών που μπορεί να είναι απαραίτητες για την επιχείρηση.

\end{itemize}

\subsection{Μέτρα ασφαλείας} \label{securityMeasures}

Προκειμένου να προστατευτεί μια επιχείρηση από τις απειλές που αναφέρθηκαν
παραπάνω, θα πρέπει να έχει λάβει τα κατάλληλα μέτρα ασφαλείας. Μερικές ορθές
πρακτικές με βάση τους οργανισμούς
\citeauthor{geeksforgeeksVirtualizationSecurityGoodPractices}
\footfullcite{geeksforgeeksVirtualizationSecurityGoodPractices} και
\citeauthor{enisaSecurityOfVirtualization}
\footfullcite{enisaSecurityOfVirtualization} είναι οι παρακάτω:

\begin{itemize}

    \item \textbf{Συχνή ενημέρωση του υπερ-επόπτη}:

        Ο υπερ-επόπτης είναι ο πυρήνας του συστήματος εικονικοποίησης και
        επομένως η ασφάλεια του είναι ζωτικής σημασίας. Οι εταιρείες που
        αναπτύσσουν το λογισμικό του, τον ενημερώνουν συχνά για να διορθώσουν
        τυχόν ευπάθειες που έχουν ανακαλυφθεί. Επομένως, οι επιχειρήσεις πρέπει
        να εφαρμόζουν τις ενημερώσεις αυτές το συντομότερο δυνατόν από την
        στιγμή που θα είναι διαθέσιμες.

    \item \textbf{Περιορισμός πρόσβασης στο διαχειριστικό πάνελ του υπερ-επόπτη}:

        Η πρόσβαση στον υπερ-επόπτη παρέχει πλήρη έλεγχο στις λειτουργίες του
        και επομένως, πρέπει να περιορίζεται μόνο σε εξουσιοδοτημένα άτομα.
        Επιπλέον, οι επιχειρήσεις πρέπει να επιβάλλουν την χρήση πολύπλοκων
        κωδικών πρόσβασης και να τους αλλάζουν τακτικά, καθώς και την χρήση
        αυθεντικοποίησης πολλαπλών παραγόντων.

    \item \textbf{Έλεγχος των μηχανημάτων που έχουν πρόσβαση στον υπερ-επόπτη}:

        Οι επιχειρήσεις πρέπει να ελέγχουν συχνά ποια μηχανήματα έχουν πρόσβαση
        στον υπερ-επόπτη και να προσθέτουν ή να αφαιρούν μηχανήματα από την
        εξουσιοδοτημένη λίστα. Ο συχνός έλεγχος πρόσβασης θα μπορέσει επίσης να
        αναδείξει προσπάθειες μη εξουσιοδοτημένης πρόσβασης ώστε να ληφθούν τα
        κατάλληλα μέτρα περιορισμού των ατόμων που επιχειρούν να εισέλθουν σε
        αυτόν.

    \item \textbf{Περιορισμός δικτυακής πρόσβασης στο διαχειριστικό πάνελ του υπερ-επόπτη}:

        Η πρόσβαση στο διαχειριστικό πάνελ του υπερ-επόπτη πρέπει να
        πραγματοποιείται μόνο από ασφαλή δίκτυα. Επομένως, για την επιβολή
        περιορισμών θα πρέπει να γίνεται χρήση αναχωμάτων ασφαλείας και άλλων
        εργαλείων ασφαλείας του δικτύου.

    \item \textbf{Χρήση κρυπτογράφησης εικονικών μηχανών}:

        Η κρυπτογράφηση των εικονικών μηχανών προστατεύει τα δεδομένα τους από
        μη εξουσιοδοτημένη πρόσβαση. Επιπλέον, στην περίπτωση κλοπής εικονικής
        μηχανής μετά από παραβίαση του υπερ-επόπτη, ο επιτιθέμενος δεν θα είναι
        σε θέση να αποκτήσει πρόσβαση στα δεδομένα της.

    \item \textbf{Απομόνωση των εικονικών μηχανών μεταξύ τους}:

        Ένας υπερ-επόπτης πρέπει να επιτρέπει την αλληλεπίδραση μεταξύ
        εικονικών μηχανών μόνο όταν αυτό είναι απαραίτητο (παραδείγματος χάριν,
        για τον διαμοιρασμό αποθηκευτικού χώρου). Επιβάλλεται να εφαρμοστούν
        πολιτικές που να διαχειρίζονται την φυσική και λογική κατάτμηση πόρων.
        Αυτό θα αποτρέψει την μη εξουσιοδοτημένη πρόσβαση, θα μειώσει τις
        επιθέσεις έγχυσης κώδικα από μια εικονική μηχανή σε μια άλλη, καθώς και
        το ρίσκο επίθεσης τύπου άρνησης υπηρεσίας.

    \item \textbf{Παρακολούθηση των πόρων}:

        Η δικτυακή κίνηση, η μνήμη και οι διεργασίες των εκτελούμενων εικονικών
        μηχανών πρέπει να παρακολουθούνται διαρκώς προκειμένου να ξεχωρίζουν οι
        εικονικές μηχανές που παρουσιάζουν ασυνήθιστες συμπεριφορές. Αυτό θα
        βοηθήσει στην ορθότερη θέση σε λειτουργία υπαρχόντων μηχανισμών
        ασφαλείας και ανίχνευσης εισβολών.

\clearpage

    \item \textbf{Ορθή διαχείριση στιγμιοτύπων εικονικών μηχανών}:

        Κάθε στιγμιότυπο μιας εικονικής μηχανής, δύναται να περιέχει ευαίσθητα
        δεδομένα όπως κωδικοί και προσωπικά δεδομένα χρηστών. Συνεπώς, πρέπει
        κατά την αποθήκευση τους να προστατεύονται έναντι μη εξουσιοδοτημένης
        πρόσβασης, τροποποίησης και αντικατάστασης. Αυτό περιλαμβάνει την ορθή
        κρυπτογράφηση τους και την διαγραφή όσων στιγμιοτύπων δεν χρειάζονται
        πλέον.

    \item \textbf{Ασφάλιση του μηχανήματος φιλοξενίας}:

        Το μηχάνημα φιλοξενίας αποτελεί ένα από τα πιο σημαντικά σημεία που
        πρέπει να προστατευτούν. Αν ένας εισβολέας καταφέρει να αποκτήσει
        πρόσβαση σε αυτό, θα μπορεί να αποκτήσει πρόσβαση σε όλες τις εικονικές
        μηχανές που αυτό φιλοξενεί. Επομένως, οι επιχειρήσεις πρέπει να εφαρμόζουν
        τακτικά ενημερώσεις λογισμικού, να περιορίζουν την πρόσβαση στο
        μηχάνημα, να εφαρμόζουν πολύπλοκους κωδικούς πρόσβασης και να
        παρακολουθούν την πρόσβαση σε αυτό.

\end{itemize}

\section{Δοχειοποίηση} \label{containerizationDefinition}

Πέραν της πλήρους εικονικοποίησης και της παρα-εικονικοποίησης, εδώ και αρκετά
χρόνια πολλές επιχειρήσεις στρέφονται σε τεχνολογίες που χρησιμοποιούν μια
υποκατηγορία της εικονικοποίησης, ονόματι δοχειοποίηση (containerization). Με
βάση την \citeauthor{ibmContainerizationDefinition}
\footfullcite{ibmContainerizationDefinition}, πρόκειται για το πακετάρισμα
λογισμικού μονάχα με τις βιβλιοθήκες και τις εξαρτήσεις που χρειάζεται για να
εκτελεστεί, δημιουργώντας ένα εκτελέσιμο \textquote{δοχείο} που πάντοτε θα
εκτελείται με την ίδια συμπεριφορά ανεξαρτήτως υποδομής. Με την παραδοσιακή
μέθοδο ανάπτυξης λογισμικού, υπήρχε πάντα το ρίσκο το πρόγραμμα που αναπτύχθηκε
σε ένα συγκεκριμένο περιβάλλον να μη λειτουργεί με τον αναμενόμενο τρόπο κατά
τη μεταφορά του σε ένα άλλο, εκτός εάν έχει ελεγχθεί ότι υπάρχουν όλες οι
εξαρτήσεις που χρειάζεται στις εκδόσεις που τις χρειάζεται. Ακόμα και σε αυτήν
την περίπτωση όμως, πέραν του κόπου για τον έλεγχο, είναι αρκετά πιθανό ένα
δεύτερο πρόγραμμα να χρειάζεται διαφορετικές εκδόσεις των ίδιων εξαρτήσεων.
Αυτό πρακτικά σήμαινε πως το δεύτερο αυτό πρόγραμμα θα έπρεπε να στεγαστεί σε
διαφορετικό διακομιστή, αυξάνοντας το σχετικό κόστος.

\clearpage

Τα προβλήματα αυτά έρχεται να λύσει η τεχνολογία της δοχειοποίησης. Με τη
δοχειοποίηση, είναι δυνατή η συστέγαση δοχείων, δηλ. διαφορετικών προγραμμάτων
ή συστατικών προγραμμάτων στο ίδιο μηχάνημα (είτε αυτό είναι φυσικό είτε
εικονικό). Όπως αναφέραμε στο \ref{containerManagement}, από το 2013 και έπειτα
η άφιξη του Docker επιτάχυνε κατά πολύ την υιοθέτηση της τεχνολογίας αυτής. Σε
τέτοιο βαθμό που σε μια έρευνα της IBM \footfullcite{ibmContainerSurvey}
βρέθηκε πως το 61\% όσων ξεκίνησαν να χρησιμοποιούν δοχεία, το κάνουν στο 50\%
ή παραπάνω των εφαρμογών που δημιούργησαν τα τελευταία δύο χρόνια, ενώ 64\%
αυτών, αναμένουν στο 50\% των υπαρχουσών εφαρμογών τους να κάνουν χρήση δοχείων
στα επόμενα δύο χρόνια.

Ένας από τους χαρακτηρισμούς των δοχείων είναι η \textquote{ελαφρότητα} τους σε
σχέση με μια εικονική μηχανή λόγω της ικανότητας τους να μοιράζονται τον πυρήνα
του ίδιου λειτουργικού συστήματος (ΛΣ). Η απαίτηση μιας εικονικής μηχανής να
χρειάζεται να έχει δικό της ΛΣ, την καθιστά μεγαλύτερη σε μέγεθος και λιγότερο
αποδοτική στη χρήση πόρων του συστήματος. Απεναντίας, τα δοχεία είναι εγγενώς
μικρότερα σε μέγεθος και έχουν και μικρότερο χρόνο εκκίνησης. Πράγμα που
τραβάει το ενδιαφέρον των επιχειρήσεων διότι αυτό μεταφράζεται σε υψηλότερη
αποδοτικότητα \& βαθμό χρήσης των διακομιστών και επομένως μειωμένα κόστη
λειτουργίας. Επίσης, τα δοχεία κλιμακώνονται αρκετά πιο γρήγορα σε σχέση με τις
εικονικές μηχανές, επιτρέποντας την αντίδραση σε οποιαδήποτε διακύμανση του
φόρτου εργασίας.

\subsection{Δοχειοποίηση Εφαρμογών (Application Containerization)} \label{applicationContainerization}

Τα δοχεία ενθυλακώνουν ένα λογισμικό ή μέρος εφαρμογής ως ένα αυτόνομο πακέτο
που περιέχει τον κώδικα, τις βιβλιοθήκες και τις εξαρτήσεις που χρειάζεται για
να εκτελεστεί. Οι διεργασίες ενός δοχείου θεωρούνται απομονωμένες με την έννοια
ότι δεν έχουν ανάγκη ένα αντίγραφο του λειτουργικού συστήματος αλλά αντ' αυτού
μια μηχανή εκτέλεσης δοχείων (container execution engine) στο μηχάνημα
(φιλοξενίας) που λειτουργεί ως διαμεσολαβητής των δοχείων για να μοιράζονται το
ίδιο λειτουργικό σύστημα και κατά προέκταση τους υποκείμενους πόρους του μεταξύ
τους. Κοινές βιβλιοθήκες ή εκτελέσιμα αρχεία μιας στρώσης εικόνας δοχείων
μπορούν επίσης να χρησιμοποιηθούν για την δημιουργία πολλών δοχείων,
συμβάλλοντας έτσι στην εξάλειψη περιττής υπολογιστικής ισχύος, καθιστώντας τα
δοχεία μικρά στον χώρο που καταλαμβάνουν, γρήγορα στην εκκίνηση και ικανά να
εκτελεστούν σε οποιαδήποτε πλατφόρμα ή περιβάλλον νέφους
\footfullcite{ibmContainerizationDefinition}.

Η δοχειοποίηση εφαρμογών αποτελεί εν γένει την πιο δημοφιλή μορφή δοχειοποίησης
που χρησιμοποιείται σήμερα. Είθισται να χρησιμοποιείται σε περιπτώσεις χρήσης
μικρο-υπηρεσιών, CI/CD pipelines, επαναλαμβανόμενες διεργασίες και εφαρμογής
μεθόδων DevOps \footfullcite{applicationContainerization}.

\subsection{Πλεονεκτήματα Δοχειοποίησης} \label{containerizationAdvantages}

Τα δοχεία προσφέρουν μια σειρά από πλεονεκτήματα σε σχέση με τις παραδοσιακές
εικονικές μηχανές. Αυτά, σύμφωνα με την
\citeauthor{ibmContainerizationDefinition}
\footfullcite{ibmContainerizationDefinition}, είναι τα εξής:

\begin{itemize}

    \item \textbf{Mεταφερσιμότητα}:

        Τα δοχεία είναι ανεξάρτητα από το λειτουργικό σύστημα και το περιβάλλον
        εκτέλεσης τους και ως εκ τούτου μπορούν να εκτελεστούν σε οποιαδήποτε
        πλατφόρμα ή περιβάλλον νέφους ομοιόμορφα και με συνέπεια. Εφόσον τα
        κομμάτια ενός προγράμματος μπορούν να ορισθούν σε ένα μονάχα αρχείο
        κειμένου και να κατασκευαστούν με αυτοματοποιημένο τρόπο οπουδήποτε,
        αυτό δίνει στα δοχεία πολύ μεγαλύτερο προβάδισμα στον τομέα της
        μεταφερσιμότητας σε σχέση με τις εικονικές μηχανές.

    \item \textbf{Ευελιξία}:

        Το Docker Engine ξεκίνησε το βιομηχανικό πρότυπο Docker για τη χρήση
        δοχείων προσφέροντας απλά εργαλεία ανάπτυξης και μια καθολική
        προσέγγιση πακεταρίσματος που λειτουργεί εξίσου καλά σε όλες τις
        πλατφόρμες. Το οικοσύστημα των δοχείων έχει μετατοπιστεί σε μηχανές
        δοχείων που ακολουθούν τα πρότυπα της Open Container Initiative (OCI)
        και οι προγραμματιστές μπορούν εύκολα και γρήγορα να πακετάρουν τις
        εφαρμογές τους ως δοχεία, τα οποία μπορούν να παρέχονται χωρίς την
        έγνοια υποστήριξης πολλών διαφορετικών πλατφορμών.

    \item \textbf{Ταχύτητα}:

        Τα δοχεία είναι ελαφρύτερα από τις παραδοσιακές εικονικές μηχανές λόγω
        του διαμοιρασμού του ίδιου ΛΣ και γι' αυτό έχουν μικρότερο χρόνο
        εκκίνησης. Αυτό τα καθιστά ιδανικά για την ανάπτυξη και την εκτέλεση
        εφαρμογών σε περιβάλλοντα νέφους όπου η αποδοτικότητα αξιοποίησης των
        υπολογιστικών πόρων αντανακλάται σε άμεση εξοικονόμηση κόστους.

\clearpage

    \item \textbf{Απομόνωση σφαλμάτων}:

        Εφόσον κάθε δοχείο είναι απομονωμένο και λειτουργεί ανεξάρτητα από τα
        υπόλοιπα, η αποτυχία ενός δοχείου στο ίδιο ΛΣ δε θα επηρεάσει τη συνεχή
        λειτουργία των υπόλοιπων δοχείων. Με αυτόν τον τρόπο, οι ομάδες
        ανάπτυξης λογισμικού μπορούν να εντοπίζουν και να διορθώνουν τυχόν
        τεχνικά προβλήματα χωρίς να υπάρχει διακοπή λειτουργίας σε άλλα δοχεία.
        Επιπρόσθετα, ο εντοπισμός του προβλήματος είναι εύκολος διότι εστιάζει
        σε ένα μόνο δοχείο και όχι σε περισσότερα. Αυτό οδηγεί σε πιο γρήγορη
        αποσφαλμάτωση και εν τέλει την πιο γρήγορη ανάπτυξη και διατήρηση
        προγραμμάτων.

    \item \textbf{Αποδοτικότητα}:

        Το γεγονός ότι τα δοχεία μοιράζονται το ίδιο ΛΣ και κοινά κομμάτια μιας
        στρώσης εικόνας δοχείου μπορούν να χρησιμοποιηθούν ξανά για την
        δημιουργία πολλών δοχείων, τα καθιστά αρκετά μικρά σε μέγεθος ώστε να
        είναι δυνατόν να εκτελεστούν πολλά περισσότερα δοχεία σε έναν
        διακομιστή απ' ότι θα μπορούσαν εικονικές μηχανές. Επομένως,
        αξιοποιούνται καλύτερα οι πόροι του συστήματος.

    \item \textbf{Ευκολία διαχείρισης}:

        Τα δοχεία σε ένα σύστημα είναι εύκολα διαχειρίσιμα με απλές εντολές. Η
        διαδικασία ενημέρωσης, εκκίνησης, τερματισμού τους και εν γένει
        διαχείρισης τους είναι γρήγορη και απλή. Ακόμα και για μια επιχείρηση
        με πολλούς διακομιστές, όπου ο αντίστοιχος φόρτος διαχείρισης θα ήταν
        αρκετά υψηλός, υπάρχουν πλατφόρμες ενορχήστρωσης δοχείων που πέραν της
        αυτοματοποίησης αυτών των λειτουργιών διαχείρισης, βοηθάνε και στην
        κλιμάκωση και διαχείριση του φόρτου εργασίας των δοχειοποιημένων
        εφαρμογών τους.

    \item \textbf{Ασφάλεια}:

        Η απομόνωση των εφαρμογών ως δοχεία, όταν εφαρμόζεται ακολουθώντας
        ορθές πρακτικές, εγγενώς αποτρέπει την εισβολή κακόβουλου λογισμικού
        από το να επηρεάσει τα υπόλοιπα δοχεία ή το σύστημα στο οποίο
        εκτελούνται. Συγκεκριμένα, χρησιμοποιώντας Kernel Security Modules όπως
        AppArmor ή SELinux μπορούν να ορισθούν άδειες ασφαλείας με σκοπό τον
        περιορισμό του εύρους πρόσβασης του Docker στο σύστημα, ενώ με access
        authorization plugins \footfullcite{accessAuthorizationPlugin},
        περιορίζεται η πρόσβαση στον δαίμονα του Docker. Επιπροσθέτως, πολύ
        εύκολα μπορεί να περιοριστεί και η επικοινωνία μεταξύ δοχείων, καθώς
        και με το δίκτυο του συστήματος.

\end{itemize}

\subsection{Διαφορές σε υλοποιήσεις της δοχειοποίησης} \label{containerizationImplementationDifferences}

Στην παράγραφο \ref{containerizationDefinition} αναφέραμε την έννοια της
δοχειοποίησης. Η ραγδαία αύξηση του ενδιαφέροντος και της χρήσης δοχείων
οδήγησε στην ανάγκη για πρότυπα γύρω από την τεχνολογία αυτή. Έτσι, η Open
Container Initiative (OCI), η οποία ιδρύθηκε τον Ιούνιο του 2015 από την Docker
και άλλους ηγέτες του κλάδου, προωθεί κοινά, ανοικτά πρότυπα και προδιαγραφές
γύρω από την τεχνολογία δοχείων. Εξαιτίας αυτού, η OCI συμβάλλει στη διεύρυνση
των επιλογών για μηχανές δοχείων ανοιχτού κώδικα και συνεπώς, οι χρήστες δε θα
είναι εγκλωβισμένοι στην τεχνολογία ενός συγκεκριμένου προμηθευτή. Απεναντίας,
θα μπορούν να επωφεληθούν από τις πιστοποιημένες από την OCI τεχνολογίες που θα
τους επιτρέπουν να δημιουργούν εφαρμογές σε δοχεία χρησιμοποιώντας ένα ευρύ
σύνολο εργαλείων DevOps, τις οποίες θα μπορούν να εκτελούν με τον ίδιο τρόπο σε
οποιεσδήποτε υποδομές της επιλογής τους.

Σήμερα αν και το Docker αποτελεί μία από τις πιο γνωστές και ευρέως
χρησιμοποιούμενες μηχανές δοχείων, υπάρχουν πολλές άλλες υλοποιήσεις.
Εναλλακτικές μηχανών δοχείων όπως το Podman \footfullcite{podman} και container
runtimes όπως το LXC και το containerd, το οποίο ήταν για καιρό η προεπιλογή
του Docker για container runtime προτού υιοθετήσει το runC, μπορεί να έχουν
διαφορετικά χαρακτηριστικά και προεπιλογές αλλά η υιοθέτηση και η αξιοποίηση
των προδιαγραφών της OCI καθώς αυτές εξελίσσονται θα διασφαλίσει ότι οι
εναλλακτικές αυτές παραμένουν ανεξάρτητες από τους προμηθευτές, πιστοποιημένες
για να τρέχουν σε πολλαπλά λειτουργικά συστήματα και χρησιμοποιήσιμες σε
πολλαπλά περιβάλλοντα \footfullcite{ibmContainerizationDefinition}.

Παρότι οι προδιαγραφές της OCI έχουν ως στόχο να διασφαλίσουν την ομοιόμορφη
λειτουργία της τεχνολογίας αυτής, υπάρχουν αρκετές διαφορές στην υλοποίηση της.
Παραδείγματος χάριν, το Podman, ενώ συμμορφώνεται στις προδιαγραφές της OCI
όπως το Docker, δουλεύει χωρίς δαίμονα από πίσω, πράγμα που επιδιώκει να
κατευνάσει τις ανησυχίες γύρω από τον τρόπο λειτουργίας του Docker. Αυτό
συμβαίνει διότι το Docker χρειάζεται διαχειριστικές άδειες για την λειτουργία
του δαίμονα του, γεγονός που αφήνει το σύστημα ευάλωτο σε επιθέσεις σε
περίπτωση που αυτός παραβιαστεί. Παρότι και οι δύο αυτές μηχανές δοχείων
χρησιμοποιούν το runC ως container runtime, το Podman χρησιμοποιεί το systemd
για την διαχείριση των δοχείων του, το οποίο μπορεί να χρησιμοποιηθεί από
χρήστες χωρίς διαχειριστικές άδειες. Συνεπώς, εξαιτίας του τρόπου λειτουργίας
του, αν και από το 2021, χάρη στη δουλειά του Akihiro Suda
\footfullcite{AkihiroSuda}, η αποφυγή χρήσης δαίμονα δεν ισχύει μόνο για αυτό
πλέον, το Podman δύναται να εκτελεστεί από έναν χρήστη πέραν του
διαχειριστή/ριζικού (root).

Ένα ακόμα εργαλείο που έχει παρόμοια αρχιτεκτονική με το Podman είναι το rkt το
οποίο προσπαθούσε να κρατήσει μια προσέγγιση ασφαλούς σχεδιασμού εξαρχής
(Secure-by-design). Μπορούσε να ενσωματώσει χαρακτηριστικά ασφαλείας, όπως
υποστήριξη SELinux, TPM measurement και εκτέλεση δοχείων σε απομονωμένες από το
υλικό εικονικές μηχανές. Παρ' όλα αυτά, σύμφωνα με το \cite{dockerAlternatives}
\footfullcite{dockerAlternatives}, έπαψε να έχει ενεργή ανάπτυξη και επομένως
δεν θα συνεχίζει να ανταγωνίζεται παρόμοια εργαλεία στον κλάδο των δοχείων.

Στην παράγραφο \ref{virtualizationImplementations} αναφέραμε την εικονικοποίηση
λειτουργικού συστήματος και στην \ref{containerManagement} το LXC. Αποτελεί και
αυτό ένα container runtime, με την διαφορά ότι αντί να επικεντρώνεται στην
δοχειοποίηση εφαρμογών όπως κάνει το Docker χρησιμοποιώντας το runC, ο κύριος
σκοπός της δημιουργίας του ήταν η δοχειοποίηση λειτουργικών συστημάτων. Αν και
χρησιμοποιείται ακόμα στις μέρες μας, η δημοτικότητα του έχει πέσει από τότε
που το ενδιαφέρον τον επιχειρήσεων στράφηκε στην δοχειοποίηση εφαρμογών, με
αποτέλεσμα την ανάγκη δημιουργίας εργαλείων που να διευκολύνουν την διαδικασία
αυτή, η οποία οδήγησε στην δημιουργία του Docker.

Σχετικά με τα container runtimes runC και containerd, το πρώτο είναι ένα
container runtime χαμηλού επιπέδου ενώ το δεύτερο υψηλού επιπέδου.
Δημιουργήθηκαν και τα δύο από το Docker σε διαφορετικές χρονικές περιόδους και
από τις αρχικές του εκδόσεις, το Docker χρησιμοποιούσε το containerd από
προεπιλογή. Μετέπειτα, αποφάσισε να το καταστήσει ένα αυτόνομο container
runtime και αντικαταστάθηκε με το runC προκειμένου να μπορέσουν τα δοχεία του
Docker να δουλεύουν ευκολότερα σε διαφορετικές πλατφόρμες όπως το Kubernetes
\footfullcite{containerdRunc}. Επιπροσθέτως, η απόφαση αυτή κατέστησε το Docker
πιο διαχειρίσιμο διότι πλέον αποτελούνταν από πολλά μικρότερα εργαλεία, όπου το
καθένα από αυτά είχε συγκεκριμένους ρόλους. Αναλυτικότερα, το containerd πλέον
είναι υπεύθυνο για την απόκτηση εικόνων δοχείων και την διαχείριση τους, προτού
τις μεταβιβάσει στο runC, το οποίο είναι το εργαλείο που θα αλληλεπιδράσει με
τον πυρήνα του Linux προκειμένου να χρησιμοποιήσει χαρακτηριστικά όπως οι
ομάδες ελέγχου (control groups) για να δημιουργήσει δοχεία.

\clearpage

\subsection{Ασφάλεια στο Docker} \label{dockerSecurityMore}

Οι εφαρμογές σε δοχεία έχουν ένα εγγενές επίπεδο ασφαλείας αφού μπορούν να
εκτελούνται ως απομονωμένες διεργασίες και να λειτουργούν ανεξάρτητα από τα
υπόλοιπα δοχεία. Με πλήρη απομόνωση θα μπορούσε να αποτραπεί στην περίπτωση
μόλυνσης από κακόβουλο λογισμικό, ο κίνδυνος να επηρεαστούν άλλα δοχεία ή το
ίδιο το σύστημα. Ωστόσο, η απομόνωση τους δεν είναι πλήρης. Ο διαμοιρασμός
κομματιών μιας εφαρμογής σε δοχεία βοηθάει στην αποδοτικότητα του συστήματος
αλλά ανοίγει και ένα παράθυρο ευκαιρίας για επιθέσεις. Το γεγονός επίσης πως
μοιράζονται τον ίδιο πυρήνα σημαίνει πως μια επίθεση με στόχο αυτόν, μπορεί
δυνητικά να επηρεάσει όλα τα δοχεία.

Σχετικά με τις εικόνες δοχείων που αναφέρθηκαν στο \ref{containerTechnologies},
τα κομμάτια δηλαδή από τα οποία μια εφαρμογή σε μορφή δοχείου αποτελείται και
αντιστοιχούν σε καλούπια μέσω των οποίων παράγονται τα δοχεία της εφαρμογής, η
ασφάλεια δεν είναι πάντα εγγυημένη. Αυτό είναι κάτι που συμβαίνει διότι ο
καθένας έχει την δυνατότητα να ανεβάσει μια εικόνα δοχείου προς χρήση από
τρίτους. Σε περίπτωση που δεν εξετασθεί το περιεχόμενο της μπορεί είτε να
περιέχει κακόβουλο λογισμικό, είτε να μην ακολουθούνται ορθές πρακτικές
ασφαλείας με αποτέλεσμα να μένει το σύστημα που την χρησιμοποιεί ευάλωτο σε
επιθέσεις. Συνεπώς, πρέπει να ληφθούν μέτρα προστασίας όπως η χρήση εικόνων
προερχόμενες μόνο από εγκεκριμένες πηγές, δηλαδή να υπάρχει εμπιστοσύνη ανάμεσα
στον προμηθευτή μιας εικόνας δοχείου και τον τελικό χρήστη. Επιπροσθέτως, πριν
την χρήση μιας εικόνας δοχείου, πρέπει αυτή να εξετάζεται με εργαλεία
ανίχνευσης τρωτοτήτων, καθώς και να έχει πραγματοποιηθεί επαρκώς σκλήρυνση του
Docker ώστε να μειωθούν οι επιπτώσεις κατά την χρήση της εαν περιέχει κακόβουλο
λογισμικό.

Οι πάροχοι τεχνολογίας δοχείων έχουν αποκτήσει μια προσέγγιση ασφαλούς
σχεδιασμού ώστε πολλά από τα απαραίτητα μέτρα να είναι ενεργοποιημένα χωρίς την
απαίτηση επιπρόσθετης αλληλεπίδρασης από τον χρήστη. Πλέον, η μηχανή δοχείων
υποστηρίζει όλες τις ιδιότητες απομόνωσης που υποστηρίζει και το λειτουργικό
σύστημα στο οποίο εκτελείται, ενώ άδειες ασφαλείας μπορούν να δοθούν στα δοχεία
και τον δαίμονα του Docker μέσω του πυρήνα του ΛΣ, με σκοπό τον επιπρόσθετο
περιορισμό χρήσης πόρων και του εύρους του συστήματος στο οποίο έχει πρόσβαση η
μηχανή δοχείων \footfullcite{ibmContainerizationDefinition}.

\clearpage

\subsubsection{Μετριασμός επιθέσεων στο Docker με χρήση χώρων ονομάτων} \label{dockerAttackVectorMitigation}

Με βάση το μοντέλο που περιγράφει το \cite{reshetova2014security}, όπως
αναφέρεται στο \cite{bui2015analysis}, έχουμε ένα μηχάνημα στο οποίο
εκτελούνται διάφορα δοχεία, από τα οποία ένα υποσύνολο έχει τεθεί υπό τον
έλεγχο ενός κακόβουλου χρήστη. Για να προστατευτούμε από επιθέσεις, όπως
άρνησης υπηρεσίας και κλιμάκωσης δικαιωμάτων πρέπει να πραγματοποιηθεί
απομόνωση των διεργασιών, των αρχείων της συσκευής, του IPC, του δικτύου και
των πόρων.

Αυτά επιτυγχάνονται κατά σειρά με τη χρήση:

\begin{itemize}

    \item \textbf{Χώρων ονομάτων (namespaces)} όπου οριοθετείται η ορατότητα
        των διεργασιών ανάμεσα στα δοχεία και το σύστημα, όπως επίσης και τα
        δικαιώματά τους.

    \item \textbf{Mount namespaces}, με τα οποία οι διεργασίες κάθε δοχείου
        βλέπουν με διαφορετικό τρόπο τη διάταξη των αρχείων του συστήματος.
        Όλες οι δράσεις mount, που γίνονται στο εκάστοτε δοχείο, περιορίζονται
        σε αυτό. Επίσης, οριοθετούνται τα δικαιώματα των αρχείων του πυρήνα σε
        μονάχα ανάγνωσης και αποτρέπονται περαιτέρω remountings.

    \item \textbf{Device Whitelist Controller}, ενός χαρακτηριστικού των
        cgroups για περιορισμό συσκευών, που αναφέρεται στο
        \cite{deviceWhitelistController}
        \footfullcite{deviceWhitelistController}, με τη βοήθεια του οποίου
        περιορίζεται το σύνολο τον συσκευών στις οποίες έχει πρόσβαση ένα
        δοχείο και το αποτρέπει από το να δημιουργήσει καινούριες
        αναπαραστάσεις συσκευών. Επιπροσθέτως, επειδή τα mount γίνονται με τη
        χρήση της παραμέτρου nodev\footnote{\textgreek{Μια παράμετρος της
        εντολής mount κατά την οποία απαγορεύεται η δημιουργία και η
        πρόσβαση αναπαραστάσεων συσκευών που βρίσκονται στον φάκελο /dev.}},
        στην περίπτωση που μια αναπαράσταση συσκευής είχε δημιουργηθεί σε
        προηγούμενο χρόνο μέσα στην εικόνα δοχείου που χρησιμοποιήθηκε για να
        κατασκευαστεί το δοχείο, οι διεργασίες του δοχείου αυτού δε δύνανται να
        τη χρησιμοποιήσουν για να επικοινωνήσουν με τον πυρήνα. Επιπλέον,
        επειδή η προεπιλεγμένη συνθήκη είναι να μη δίνονται εκτεταμένα προνόμια
        σε ένα δοχείο, δεν υπάρχει πρόσβαση σε καμία συσκευή παρά μόνο εάν
        γίνει εκτέλεση δοχείου ως χρήστης με ανώτατα δικαιώματα, όπου τότε
        υπάρχει πρόσβαση σε όλες (τις συσκευές).

    \item \textbf{IPC namespaces} για περιορισμό IPC, δηλαδή της επικοινωνίας
        των διεργασιών μεταξύ τους. Τα IPC namespaces καθιστούν δυνατή τη
        δημιουργία ξεχωριστών συνόλων των διεργασιών, που επικοινωνούν μεταξύ
        τους αλλά όχι με άλλες διεργασίες πέραν του υποσυνόλου.

    \item \textbf{Network namespaces}. Μία από τις σημαντικότερες απομονώσεις
        είναι αυτή του δικτύου. Χωρίς δικτυακή απομόνωση υπάρχει κίνδυνος
        επιθέσεων, όπως ενδιάμεσου (Man in the middle), ARP, DNS πλαστογράφηση
        (spoofing) και άλλες. Για να απομονωθεί η κίνηση δικτύου που λαμβάνει
        μέρος σε ένα δοχείο από αυτήν των υπολοίπων και του συστήματος πρέπει
        να γίνει χρήση των network namespaces. Κάθε δοχείο θα έχει δικές του
        διευθύνσεις IP, συσκευές και ό,τι χρειάζεται, προκειμένου να γίνεται
        αλληλεπίδραση μεταξύ των δοχείων μέσω της διεπαφής δικτύου του καθενός
        σαν να είναι εξωτερικές οντότητες.

    \item \textbf{Ομάδες ελέγχου (cgroups)}. Επιβάλλεται η οριοθέτηση των
        υπολογιστικών πόρων προκειμένου να αποφευχθεί μια επίθεση τύπου άρνησης
        υπηρεσίας, όπου μια διεργασία ή ένα σύνολο αυτών προσπαθεί να
        καταναλώσει όλους τους πόρους του συστήματος. Με τη βοήθεια των ομάδων
        ελέγχου, επιτυγχάνεται ο έλεγχος του ποσοστού πόρων όπως CPU, μνήμης
        και χωρητικότητας, που μπορεί να έχει κάθε δοχείο στη διάθεση του.

\end{itemize}

Αυτές οι δυνατότητες υποστηρίζονται από το Docker και μπορεί κανείς να τις
εκμεταλλευτεί για να προστατεύσει το περιβάλλον του από επιθέσεις. Επιπλέον,
υπάρχει και η δυνατότητα υποστήριξης Kernel Security Modules, όπως SELinux
\footfullcite{selinux} και AppArmor \footfullcite{apparmor} αλλά και του
Seccomp \footfullcite{seccomp} (στην περίπτωση χρήσης LXC), καθώς επίσης και
συμβατότητα με Linux capabilities, που θα μπορούσαν να εισάγουν ένα ακόμα
επίπεδο ασφαλείας, αν χρησιμοποιηθούν σωστά, περιορίζοντας τα δικαιώματα των
διεργασιών των δοχείων σε μονάχα όσα χρειάζονται. Το Docker παρέχει αρκετά
υπάρχοντα μέσα άμυνας προκειμένου να προστατευτεί από επιθέσεις ακόμα και χωρίς
επιπρόσθετες ρυθμίσεις. Παρ' όλα αυτά, οι αρχικές ρυθμίσεις ασφαλείας είναι πιο
ελαστικές απ' όσο χρειάζεται προκειμένου να συνεχίζει να λειτουργεί κανονικά
για όλους τους χρήστες, αφήνοντας έτσι τους διαχειριστές ασφαλείας υπεύθυνους
να χρησιμοποιήσουν όσες δυνατότητες είναι απαραίτητες προκειμένου να
ανταπεξέλθουν σε κάθε επίθεση ανάλογα το περιβάλλον και τις ανάγκες τους.

\clearpage

\subsubsection{Συχνά είδη επιθέσεων σε δοχεία και μέθοδοι πρόληψης} \label{commonAttacksAndPrevention}

Μερικά είδη επιθέσεων σε δοχεία με τους τρόπους αντιμετώπισής τους, όπως
αναφέρονται στο \cite{yasrab2018mitigating}, είναι τα εξής:

\begin{itemize}

    \item \textbf{Εκμεταλλεύσεις πυρήνα (Kernel Exploits)}:

        Ο πυρήνας είναι υπεύθυνος για τη διαχείριση των λειτουργιών και
        διεργασιών των δοχείων. Λόγω του διαμοιρασμού του πυρήνα του συστήματος
        με κάθε δοχείο το οποίο εκτελείται σε αυτό, εάν οποιοδήποτε από αυτά
        τεθεί υπό τον έλεγχο ενός κακόβουλου χρήστη, αυτός μπορεί δυνητικά να
        πάρει τον έλεγχο του συστήματος και όλων των δοχείων αυτού. Ο τρόπος
        αντιμετώπισης που προτείνεται είναι η χρήση SELinux ή AppArmor κατά την
        εκτέλεση δοχείων σε συνδυασμό με εκμετάλλευση των user namespaces.
        Επιπλέον, συνίσταται να μην εκτελούνται εφαρμογές με δικαιώματα
        διαχειριστικού λογαριασμού. Μερικά ακόμα μέτρα προστασίας που μπορεί να
        παρθούν αλλά πιθανώς να μην είναι εφικτά γιατί ενδεχομένως να πηγαίνουν
        ενάντια στις λειτουργίες του εκάστοτε δοχείου, είναι να τεθεί το
        σύστημα του σε επίπεδο πρόσβασης που επιτρέπει μόνο την ανάγνωση των
        αρχείων, να απενεργοποιηθεί η επικοινωνία μεταξύ δοχείων και να
        αποφευχθεί η εγκατάσταση περιττών προγραμμάτων σε αυτά.

    \item \textbf{Άρνηση υπηρεσίας}:

        Μια από τις πιο συνηθισμένες επιθέσεις σε πόρους διαθέσιμους μέσω
        δικτύου. Κατά τη διάρκεια μιας τέτοιας επίθεσης, μια διεργασία ή ένα
        σύνολο διεργασιών επιχειρεί να καταναλώσει όλους τους πόρους του
        συστήματος προκειμένου να μην μπορεί να εξυπηρετήσει άλλους χρήστες.
        Αυτό μπορεί να συμβεί εάν ένα δοχείο βρεθεί υπό τον έλεγχο ενός
        επιτιθέμενου και επιχειρήσει να διεκδικήσει πόρους που κανονικά δε
        χρειάζεται. Για να ανταπεξέλθει ένα σύστημα σε μια επίθεση άρνησης
        υπηρεσίας, πρέπει να γίνει χρήση των δυνατοτήτων που αναφέραμε στο
        \ref{dockerAttackVectorMitigation} με σκοπό τον αυστηρότερο έλεγχο
        διαμοιρασμού των πόρων του συστήματος. Με τον καθορισμό διαθέσιμων
        πόρων για κάθε δοχείο εξαρχής, δεν υπάρχει κίνδυνος να προσπαθήσει
        κάποιο δοχείο να διεκδικήσει περισσότερους.

\clearpage

    \item \textbf{Αποδράσεις Δοχείων (Container Breakouts)}:

        Σε τέτοιου είδους επιθέσεις, ένας επιτιθέμενος προσπαθεί αφού απέκτησε
        πρόσβαση σε ένα δοχείο, να καταφέρει μέσω αυτού να έχει πρόσβαση στα
        αρχεία του κύριου συστήματος. Αυτό μπορεί να συμβεί με τη χρήση μιας
        συνάρτησης που απαιτεί δικαιώματα διαχειριστικού λογαριασμού μέσα από
        το δοχείο προκειμένου να κάνει κλήση μιας ικανότητας (capability) στην
        οποία είχε πρόσβαση εξαρχής. Σύμφωνα με το Docker η μόνη έκδοση που
        είχε αυτή την ευπάθεια ήταν η 0.11 και στην επόμενη διορθώθηκε. Για την
        πρόληψη μελλοντικών μεθόδων διεκπεραίωσης τέτοιου είδους επίθεσης,
        συνίσταται να τίθενται τα δοχεία και οι αποθηκευτικοί τους χώροι σε
        κατάσταση μονάχα ανάγνωσης, καθώς και να αποφεύγεται η χρήση της
        παραμέτρου \textquote{privileged}.

    \item \textbf{Δηλητηριασμένες εικόνες δοχείων}:

        Οι εικόνες δοχείων μπορεί να περιέχουν κακόβουλο λογισμικό ή λογισμικό
        για το οποίο έχουν βρεθεί πλέον ευπάθειες. Ο τωρινός τρόπος ελέγχου
        εγκυρότητας τους βασίζεται μονάχα στην παρουσία ενός υπογεγραμμένου
        manifest αλλά δε γίνεται ποτέ αυθεντικοποίηση του αθροίσματος ελέγχου
        (checksum) της κάθε εικόνας. Αυτό αφήνει ανοιχτό το ενδεχόμενο ένας
        επιτιθέμενος να διαδώσει οποιαδήποτε εικόνα μαζί με το υπογεγραμμένο
        manifest της. Επιβάλλεται οι χρήστες να κατεβάζουν εικόνες από
        εγκεκριμένους προμηθευτές και επιπρόσθετα να τις ελέγχουν με κατάλληλα
        εργαλεία ανίχνευσης τρωτοτήτων προτού τις χρησιμοποιήσουν.

    \item \textbf{Απόκτηση μυστικών κωδικών/κλειδιών}:

        Η απόκτηση επιχειρησιακών ή προσωπικών μυστικών ελλοχεύει πολλούς
        κινδύνους για μια επιχείρηση. Σε περίπτωση που κάτι τέτοιο συμβεί, ένας
        επιτιθέμενος μπορεί να έχει πρόσβαση σε βάσεις δεδομένων ή άλλα
        κομμάτια του συστήματος απειλώντας έτσι την ακεραιότητα, την
        εμπιστευτικότητα και διαθεσιμότητα των δεδομένων. Προκειμένου να
        αποφευχθεί η εισβολή σε κάποιο δοχείο που θα προκαλούσε την απόκτηση
        τέτοιων μυστικών, καθίσταται επιτακτική η χρήση δοχείων σε κατάσταση
        ανάγνωσης και όχι εγγραφής αλλά και η αποφυγή χρήσης μεταβλητών για την
        αποθήκευση κωδικών. Χρήσιμη επίσης θα ήταν και η εσκεμμένη παράλειψη
        της παραμέτρου \textquote{privileged}.

\clearpage

    \item \textbf{Ενδιάμεσου (Man-in-the-Middle - MitM)}:

        Σε μια τέτοια επίθεση ένας κακόβουλος χρήστης προσπαθεί να μπει ανάμεσα
        στην επικοινωνία δύο οντοτήτων με σκοπό να αλλοιώσει, να υποκλέψει ή να
        παρακολουθεί πληροφορίες. Το καλύτερο αντίμετρο είναι η απομόνωση
        δικτύου. Πρέπει να γίνει ρύθμιση των δοχείων με τέτοιο τρόπο ώστε να
        μην έχουν πρόσβαση στη δικτυακή επικοινωνία του κύριου μηχανήματος ή
        άλλων δοχείων. Αυτά επιτυγχάνονται με χρήση network namespaces, καθώς
        και με την ορθότερη ρύθμιση των API που χρησιμοποιεί το Docker για την
        επικοινωνία μέσω δικτύου.

    \item \textbf{Πλαστογράφηση ARP (ARP spoofing)}:

        Σε μια Address Resource Protocol (ARP) spoofing επίθεση, ο επιτιθέμενος
        επιχειρεί να στείλει ψεύτικα ARP μηνύματα σε ένα δίκτυο τοπικής
        περιοχής (Local Area Network - LAN). Είναι πιθανό να προσποιηθεί πως η
        συσκευή του είναι μια από τις συσκευές της επιχείρησης, αλλάζοντας τη
        MAC διεύθυνση του στην IP μιας συσκευής που το σύστημα αναγνωρίζει.
        Επομένως, το σύστημα της επιχείρησης, θα συμπεριφέρεται στην συσκευή
        του επιτιθέμενου με τον ίδιο τρόπο που θα συμπεριφερόταν στην αυθεντική
        συσκευή. Δηλαδή, στέλνοντας σε αυτόν όλα τα πακέτα και τα δεδομένα που
        προορίζονταν για εκείνη. Το Docker χρησιμοποιεί το ARP για να κάνει την
        αντιστοίχιση IPv4 σε MAC διευθύνσεις, οι οποίες χρησιμοποιούνται από
        την εικονική γέφυρα δικτύου για να διανέμουν σωστά τα πλαίσια (frames)
        Ethernet αφού δεν υπάρχει φίλτρο για τα πακέτα ARP και επομένως κανένας
        μηχανισμός άμυνας. Γι' αυτό τον λόγο τα δοχεία μπορούν να προσποιηθούν
        ότι είναι άλλα δοχεία ή ακόμα και το κύριο μηχάνημα. Στην περίπτωση
        παραβίασης ενός δοχείου, υπάρχει κίνδυνος ο επιτιθέμενος να υποκλέψει
        μυστικά της επιχείρησης ή των τελικών χρηστών της υπηρεσίας που η
        επιχείρηση προσφέρει. Ένας από τους τρόπους που βοηθάει στην αποφυγή
        τέτοιας επίθεσης είναι η εκτέλεση δοχείων δίχως το NET\_RAW capability,
        αφού έτσι τα προγράμματα μέσα στο δοχείο δε θα μπορούν να δημιουργήσουν
        PF\_PACKET sockets και θα ήταν αδύνατη η διεκπεραίωση της επίθεσης.
        Βέβαια, αυτή η μέθοδος έχει μειονεκτήματα αφού μπορεί αυτή η ικανότητα
        να ήταν άκρως απαραίτητη για την ορθή λειτουργία της υπηρεσίας.
        Επομένως, μια εναλλακτική μέθοδος προστασίας είναι η χρήση
        \textquote{ebtables} για φιλτράρισμα πλαισίων Ethernet ούτως ώστε ARP
        πακέτα με λάθος πρωτόκολλο αποστολέα ή διεύθυνση MAC να ανιχνεύονται
        εγκαίρως και να απορρίπτονται.

\end{itemize}
