\chapter{Εγκατάσταση \& Επίδειξη του εργαλείου SecDep} \label{installationANDShowcase}

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

\section{Εγκατάσταση του πηγαίου κώδικα του SecDep}

Για την εγκατάσταση του πηγαίου κώδικα του SecDep απαιτείται η χρήση του
προγράμματος git ή η πρόσβαση σε έναν φυλλομετρητή. Στην περίπτωση που ο
χρήστης δεν έχει εγκατεστημένο το git, πρέπει να μεταβεί στην ιστοσελίδα του
αποθετηρίου \footfullcite{secdep} και να επιλέξει είτε την επιλογή αποθήκευσης
ως αρχείο zip, είτε ως tar.gz όπως απεικονίζεται παρακάτω. Έπειτα, πρέπει να
αποσυμπιεστεί με το κατάλληλο για τον τύπο αρχείου πρόγραμμα.

\begin{center}
    \begin{figure}[!ht]
        \centering
        \includegraphics[width = .7\textwidth]{Figures/Installation/secdep_install_without_git.png}
        \captionof{figure}{Αποθήκευση του πηγαίου κώδικα του SecDep ως αρχείο}
        \label{fig:secdep_install_without_git}
    \end{figure}
\vspace*{-30pt}
\end{center}

\clearpage

\noindent Η πιο εύκολη μέθοδος για την εγκατάσταση του SecDep είναι η χρήση του
git η οποία απαιτεί μονάχα την εκτέλεση της παρακάτω εντολής.

\begin{listing}[!ht]
\begin{bashcode}
git clone https://git.konsthol.eu/konsthol/SecDep.git
\end{bashcode}
\caption{Εγκατάσταση του SecDep με την χρήση του git}
\label{lst:secdep_install_with_git}
\vspace*{-10pt}
\end{listing}

\subsection{Εγκατάσταση των απαιτούμενων εξαρτήσεων}

Μετά την ολοκλήρωση της εγκατάστασης του πηγαίου κώδικα του SecDep, αφού ο
χρήστης μεταβεί στον φάκελο με τα περιεχόμενα που απεικονίζονται στο Σχήμα
\ref{fig:secdep_install_without_git}, επιβάλλεται να γίνει χρήση του
προγράμματος pip \footfullcite{pip} για την εγκατάσταση των βιβλιοθηκών που
απαιτούνται για την λειτουργία του εργαλείου. Αυτό επιτυγχάνεται με την
εκτέλεση της παρακάτω εντολής.

\begin{listing}[!ht]
\begin{bashcode}
pip install -r requirements.txt
\end{bashcode}
\caption{Εγκατάσταση των απαιτούμενων βιβλιοθηκών για την λειτουργία του SecDep}
\label{lst:secdep_install_requirements}
\vspace*{-10pt}
\end{listing}

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

\begin{listing}[!ht]
\begin{bashcode}
pip install -r requirements.txt --break-system-packages
\end{bashcode}
\caption{Εξαναγκασμένη μορφή της εντολής εγκατάστασης εξαρτήσεων του SecDep}
\label{lst:focre_secdep_install_requirements}
\vspace*{-10pt}
\end{listing}

\section{Ρύθμιση του SecDep}

Αφού έχει ολοκληρωθεί η εγκατάσταση των απαιτούμενων εξαρτήσεων, ο χρήστης
πρέπει να δώσει στο εργαλείο τα απαραίτητα διαπιστευτήρια για την χρήση των
υποδομών νέφους της επιλογής του. Ενώ υποστηρίζονται και οι τρεις μεγαλύτεροι
πάροχοι υπηρεσιών IaaS, επιλέχθηκε για την παρούσα ενότητα η κάλυψη της χρήσης
των υπηρεσιών της Amazon έναντι της Azure και της GCE, λόγω της ευκολότερης και
απλούστερης διαδικασίας αυθεντικοποίησης που παρέχει. Συγκεκριμένα, απαιτεί την
συμπλήρωση μονάχα δύο πεδίων. Αυτά είναι, τα
\textquote{SECDEP\_AWS\_ACCESS\_KEY} και \textquote{SECDEP\_AWS\_SECRET\_KEY}.

\subsection{Δημιουργία κλειδιού πρόσβασης με την AWS}

Για την απόκτηση των παραπάνω διαπιστευτηρίων, ο χρήστης πρέπει να επισκεφθεί
την ιστοσελίδα διαχείρισης του λογαριασμού που έχει δημιουργήσει με την AWS και
να μεταβεί στην ενότητα IAM (Identity and Access Management) προκειμένου να
δημιουργήσει ένα κλειδί πρόσβασης. Αυτό απεικονίζεται ως εξής:

\begin{center}
    \begin{figure}[!ht]
        \centering
        \includegraphics[width = .6\textwidth]{Figures/AWS_setup/go_to_iam.png}
        \captionof{figure}{Μετάβαση στην ενότητα IAM της AWS}
        \label{fig:go_to_iam}
    \end{figure}
\vspace*{-30pt}
\end{center}

\noindent Έπειτα, πρέπει να εισέλθει στην ενότητα \textquote{Manage Access
Keys} και να δημιουργήσει ένα νέο κλειδί πρόσβασης όπως φαίνεται παρακάτω:

\begin{center}
    \begin{figure}[!ht]
        \centering
        \includegraphics[width = .6\textwidth]{Figures/AWS_setup/create_access_key.png}
        \captionof{figure}{Δημιουργία νέου κλειδιού πρόσβασης}
        \label{fig:create_access_key}
    \end{figure}
\vspace*{-30pt}
\end{center}

\clearpage

\noindent Η αντιστοιχία των απαιτούμενων πεδίων με το κλειδί πρόσβασης που
δημιουργήθηκε είναι η εξής:

\begin{savenotes}
\selectfont
\begin{table}[!ht]
\caption{Αντιστοιχία των πεδίων του SecDep με το κλειδί πρόσβασης της AWS}
\renewcommand{\arraystretch}{1.5}
\centering
\newcolumntype{C}{>{\centering\arraybackslash}m{7cm}}
\textgreek{\begin{tabular}{||C|C||}
\hline

Μεταβλητή του SecDep & Αντιστοιχία \\ [0.5ex]

\hline\hline

SECDEP\_AWS\_ACCESS\_KEY & Το αναγνωριστικό του κλειδιού \\

\hline

SECDEP\_AWS\_SECRET\_KEY & Το περιεχόμενο του κλειδιού \\

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

\subsection{Αντιστοίχιση των πεδίων του SecDep με το κλειδί πρόσβασης της AWS}

Μετά το πέρας της δημιουργίας του κλειδιού πρόσβασης, ο χρήστης πρέπει να
αρχικοποιήσει τις μεταβλητές του SecDep με τις τιμές που αντιστοιχούν στην κάθε
μια. Υπάρχουν πολλοί τρόποι για την επίτευξη αυτού του σκοπού. Στην προκειμένη
περίπτωση που θα γίνει χρήση ενός μονάχα παρόχου, αρκεί η εκτέλεση της παρακάτω
εντολής:

\begin{listing}[!ht]
\begin{bashcode}
python3 secdep.py --init aws
\end{bashcode}
\caption{Αρχικοποίηση των μεταβλητών του SecDep για την χρήση της AWS}
\label{lst:secdep_init_aws}
\vspace*{-10pt}
\end{listing}

Έπειτα, θα ζητηθούν από τον χρήστη τα αντίστοιχα διαπιστευτήρια. Οι μεταβλητές
αυτές θα αποθηκευτούν στο αρχείο \textquote{.env} που θα δημιουργηθεί στον
φάκελο που βρίσκεται το εκτελέσιμο του SecDep. Στην περίπτωση που ο χρήστης
μελλοντικά θέλει να αλλάξει τις τιμές των μεταβλητών ή να προσθέσει νέες,
μπορεί να το κάνει αλλάζοντας τα περιεχόμενα του αρχείου \textquote{.env}
χειροκίνητα με έναν επεξεργαστή κειμένου ή με την εκτέλεση της εντολής:

\begin{listing}[!ht]
\begin{bashcode}
python3 secdep.py --edit
\end{bashcode}
\caption{Επεξεργασία των μεταβλητών του SecDep}
\label{lst:secdep_edit}
\vspace*{-10pt}
\end{listing}

\noindent Η εντολή αυτή θα προτρέψει τον χρήστη να επιλέξει ποια μεταβλητή να
αλλάξει και θα αναγράφει την προηγούμενη τιμή της ώστε να γίνεται ευδιάκριτη η
αλλαγή.

\clearpage

\section{Επίδειξη του SecDep}

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

\begin{listing}[!ht]
\begin{bashcode}
python3 secdep.py --help
\end{bashcode}
\caption{Εκτέλεση της παραμέτρου help του SecDep}
\label{lst:secdep_help}
\vspace*{-10pt}
\end{listing}

Σχετικά με την δημιουργία εικονικών μηχανών, που είναι και μια από τις βασικές
λειτουργίες του SecDep, ο χρήστης μπορεί να εκτελέσει την παρακάτω εντολή για
να δημιουργήσει μια εικονική μηχανή με λειτουργικό σύστημα Debian 11 στην
περιοχή eu-north-1 με μέγεθος t3.micro (διαθέσιμο για χρήστες εντός της δωρεάν
δοκιμαστικής περιόδου ενός χρόνου):

\begin{listing}[!ht]
\begin{bashcode}
python3 secdep.py --provider aws --create --name test-node --size t3.micro --image ami-08869bacfa1188ec9
\end{bashcode}
\caption{Εκτέλεση της παραμέτρου create του SecDep}
\label{lst:secdep_create}
\vspace*{-10pt}
\end{listing}

Μετά την δημιουργία της εικονικής μηχανής, επιστρέφεται στον χρήση η διεύθυνση
IP της και η εντολή που μπορεί να εκτελέσει προκειμένου να συνδεθεί σε αυτήν
χρησιμοποιώντας το πρωτόκολλο SSH. Η εντολή αυτή σχηματίζεται δυναμικά από το
εργαλείο λαμβάνοντας υπόψιν την θύρα που θα χρησιμοποιηθεί (σε περίπτωση που η
εικονική μηχανή έχει σκληρύνει), το μονοπάτι μέχρι το κλειδί SSH που
δημιουργήθηκε μαζί με την μηχανή στον ίδιο φάκελο με το εργαλείο και την
διεύθυνσή της. Εάν ο χρήστης δεν διαθέτει πρόγραμμα ικανό να συνδεθεί μέσω SSH
σε έναν απομακρυσμένο διακομιστή, υποστηρίζεται και η παράμετρος
\textquote{--ssh}. Χωρίς την παράμετρο \textquote{--yes}, θα ζητηθεί από τον
χρήστη να επιβεβαιώσει την δημιουργία της εικονικής μηχανής παρέχοντας
πληροφορίες σχετικά με τις επιλογές του.

Με την προσθήκη της παραμέτρου \textquote{--deploy}, θα εκτελεστεί η ίδια
διαδικασία αλλά με την διαφορά πως θα πραγματοποιηθεί εκτέλεση και του αρχείου
harden στην εικονική μηχανή, το οποίο θα σκληρύνει το λειτουργικό της σύστημα
και θα εγκαταστήσει την μηχανή δοχείων Docker την οποία επίσης θα σκληρύνει.

\clearpage

\noindent Το αποτέλεσμα μετά την δημιουργία εικονικής μηχανής με την παράμετρο
για σκλήρυνση απεικονίζεται ως:

\begin{center}
    \begin{figure}[!ht]
        \centering
        \includegraphics[width = .8\textwidth]{Figures/AWS_hardened/aws-hardened.png}
        \captionof{figure}{Δημιουργία εικονικής μηχανής με παράμετρο για σκλήρυνση}
        \label{fig:aws_hardened}
    \end{figure}
\vspace*{-30pt}
\end{center}

Με μια ακόμα προσθήκη παραμέτρου, συγκεκριμένα της
\textquote{--docker\_compose}, θα εκτελεστεί στην εικονική μηχανή και ένα
αρχείο docker-compose.yml που θα πρέπει ο χρήστης να έχει μεταφέρει στον ίδιο
φάκελο με το εργαλείο. Για οποιαδήποτε παράμετρο που δεν έχει δοθεί ή έχει
δοθεί λανθασμένα, θα προτρέπεται ο χρήστης να την δώσει ξανά έως ότου
ολοκληρωθεί η διαδικασία ή ακυρωθεί από τον χρήστη.

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

\begin{listing}[!ht]
\begin{bashcode}
python3 secdep.py --provider aws --listimages --print
\end{bashcode}
\caption{Εκτέλεση της παραμέτρου listimages του SecDep}
\label{lst:secdep-listimages}
\vspace*{-10pt}
\end{listing}

Το αποτέλεσμα της εντολής \ref{lst:secdep-listimages} είναι να εμφανιστεί μια
λίστα με τις διαθέσιμες εικόνες που μπορεί να χρησιμοποιήσει ο χρήστης για την
δημιουργία εικονικών μηχανών. Έπειτα, με την επιλογή μιας από αυτές, θα
εμφανιστούν πληροφορίες σχετικά με την εικόνα που επιλέχθηκε οι οποίες θα είναι
της μορφής που απεικονίζεται παρακάτω.

\clearpage

\begin{listing}[!ht]
\begin{bashcode}
<NodeImage: id=ami-0eb2c4104acb437b2, name=debian-10-amd64-20221224-1239, driver=Amazon EC2  ...>
\end{bashcode}
\vspace*{-10pt}
\end{listing}

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

\begin{listing}[!ht]
\begin{bashcode}
python3 secdep.py --provider aws --listsizes --print
\end{bashcode}
\caption{Εκτέλεση της παραμέτρου listsizes του SecDep}
\label{lst:secdep_listsizes}
\vspace*{-10pt}
\end{listing}

\noindent Η διαδικασία επιλογής του μεγέθους είναι παρόμοια με την επιλογή της
εικόνας, ενώ το αποτέλεσμα είναι της μορφής:

\begin{listing}[!ht]
\begin{bashcode}
<NodeSize: id=t3.micro, name=t3.micro, ram=1024, disk=0, bandwidth=0, price=0.0204, driver=Amazon EC2  ...>
\end{bashcode}
\vspace*{-10pt}
\end{listing}

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

\begin{listing}[!ht]
\begin{bashcode}
python3 secdep.py --provider aws --awsregion us-east-2 --list
\end{bashcode}
\caption{Εκτέλεση της παραμέτρου list του SecDep}
\label{lst:secdep_list}
\vspace*{-10pt}
\end{listing}

\clearpage

\noindent Το αποτέλεσμα της παραπάνω εντολής μπορεί να απεικονίζεται ως εξής:

\begin{center}
    \begin{figure}[!ht]
        \centering
        \includegraphics[width = 1.0\textwidth]{Figures/AWS_listing/aws-instances.png}
        \captionof{figure}{Λίστα με τις εικονικές μηχανές που έχουν δημιουργηθεί}
        \label{fig:instance_list_output}
    \end{figure}
\vspace*{-30pt}
\end{center}

Η παράμετρος \textquote{--awsregion} είναι προαιρετική και χρησιμοποιείται
αποκλειστικά για την Amazon. Η παράλειψή της θα είχε ως αποτέλεσμα να γίνει
έρευνα σε όλες τις διαθέσιμες περιοχές. Γεγονός που ενδεχομένως να αποτελούσε
σπατάλη χρόνου.

Με την παρακάτω εντολή, ο χρήστης λαμβάνει μια λίστα με τις διαθέσιμες
εικονικές μηχανές του παρόχου Amazon που έχουν δημιουργηθεί στην περιοχή
eu-north-1 και επιλέγει μια από αυτές για διαγραφή. Μετά από επιτυχή διαγραφή,
λαμβάνει επιβεβαίωση στην οθόνη του.

\begin{listing}[!ht]
\begin{bashcode}
python3 secdep.py --provider aws --action delete --awsregion eu-north-1
\end{bashcode}
\caption{Εκτέλεση της παραμέτρου delete του SecDep}
\label{lst:secdep_delete}
\vspace*{-10pt}
\end{listing}

Εάν ήθελε να διαγράψει όλες τις εικονικές μηχανές της περιοχής, η επιλογή της
παραμέτρου \textquote{--action}, από \textquote{delete} θα έπρεπε να
αντικατασταθεί σε \textquote{deleteall}. Με παρόμοιο τρόπο υποστηρίζονται και
εντολές για εκκίνηση, επανεκκίνηση ή παύση εικονικών μηχανών.

\clearpage

Πιο λεπτομερείς οδηγίες χρήσης και εγκατάστασης περιέχονται και στην σελίδα του
αποθετηρίου του SecDep \footfullcite{secdep} μέσω του αρχείου
\textquote{README.md}. Στην αρχική του σελίδα, εμφανίζονται τα περιεχόμενα του
αρχείου οδηγιών. Εκεί, ο χρήστης μπορεί να βρει πληροφορίες σχετικά με την
παραμετροποίηση και των υπόλοιπων παρόχων νέφους, χρήσιμες ρυθμίσεις που
καθιστούν την εκτέλεση του SecDep πιο εύκολη, καθώς και περισσότερες οθόνες
εκτέλεσης.
