500 lines
31 KiB
TeX
500 lines
31 KiB
TeX
\chapter{Ανάπτυξη Συστήματος} \label{projectDevelopment}
|
||
|
||
\noindent Στην παρούσα ενότητα θα αναλυθούν οι τεχνολογίες που χρησιμοποιήθηκαν
|
||
για την υλοποίηση του συστήματος, οι αποφάσεις που πάρθηκαν κατά την ανάπτυξη
|
||
του και οι σχεδιαστικές επιλογές που έγιναν. Επίσης, θα πραγματοποιηθεί
|
||
απεικόνιση των συσχετίσεων μεταξύ των συστατικών του συστήματος και θα αναλυθεί
|
||
περαιτέρω η λειτουργία τους.
|
||
|
||
\section{Αποφάσεις που πάρθηκαν κατά την ανάπτυξη} \label{developmentDecisions}
|
||
|
||
Κατά την ανάπτυξη του συστήματος, προκειμένου να επιτευχθούν οι στόχοι που
|
||
θέσαμε στην ενότητα \ref{overcomingDockerDisadvantages} και συγκεκριμένα για
|
||
την επικοινωνία με διάφορους παρόχους νέφους, επιλέχθηκε να γίνει χρήση της
|
||
βιβλιοθήκης libcloud \footfullcite{libcloud}. Μια από τις δύο επιλογές
|
||
βιβλιοθηκών της Apache \footfullcite{apache} για την επικοινωνία με παρόχους
|
||
νέφους. Συγκριτικά με την βιβλιοθήκη jclouds \footfullcite{jclouds}, η οποία
|
||
σχεδιάστηκε για την γλώσσα Java \footfullcite{java}, η libcloud είναι πιο απλή
|
||
στην χρήση, αφού είναι σχεδιασμένη για την γλώσσα Python \footfullcite{python}.
|
||
Επιπροσθέτως, η libcloud είναι πιο διαδεδομένη και η γλώσσα python αποτελεί μια
|
||
πιο ευέλικτη επιλογή για τις ανάγκες του εργαλείου.
|
||
|
||
Η ανάγκη για μια βιβλιοθήκη που θα λειτουργεί ως μεσάζοντας μεταξύ του
|
||
εργαλείου και των παρόχων νέφους, οφείλεται στο γεγονός ότι οι πάροχοι νέφους
|
||
δεν διαθέτουν ένα κοινό API για την διαχείριση των υποδομών τους. Απεναντίας, ο
|
||
καθένας από αυτούς διαθέτει το δικό του API, το οποίο χρησιμοποιείται έμμεσα
|
||
μέσω του πίνακα ελέγχου του παρόχου που βρίσκεται στην ιστοσελίδα του, ενός
|
||
δικού του εργαλείου γραμμής εντολών, ή άμεσα μέσω της βιβλιοθήκης που παρέχει ο
|
||
ίδιος. Η libcloud αποτελεί μια προσπάθεια δημιουργίας ενός ενιαίου API, το
|
||
οποίο χρησιμοποιώντας τις ίδιες συναρτήσεις, επιχειρεί να προσκομίσει ίδια
|
||
αποτελέσματα ανεξαρτήτως του παρόχου νέφους που στοχεύει.
|
||
|
||
\clearpage
|
||
|
||
Παρ όλη την προσπάθεια που καταβλήθηκε από την libcloud όμως, για την ενοποίηση
|
||
αυτή, οι διαφορές στους τρόπους λειτουργίας του κάθε παρόχου αρχίζουν να
|
||
εμφανίζονται σύντομα κατά την ανάπτυξη. Για το εργαλείο που προτείνει η παρούσα
|
||
διπλωματική εργασία, χρειάζεται να γίνει χρήση των λειτουργιών
|
||
\textquote{Compute} της βιβλιοθήκης. Στην αρχική σελίδα της, αναφέρεται
|
||
υποστήριξη για πάνω από 50 παρόχους. Κατά την σελίδα τεκμηρίωσης
|
||
\footfullcite{libcloudProviders} για τις λειτουργίες \textquote{Compute},
|
||
αναφέρονται 48 πάροχοι σε έναν πίνακα ο οποίος αναγράφει την υποστήριξη ή
|
||
απουσία αυτής, διάφορων συναρτήσεων εικονικών μηχανών. Στις συναρτήσεις αυτές
|
||
περιλαμβάνονται η δημιουργία εικονικών μηχανών, η εκκίνηση, η παύση, η διαγραφή
|
||
τους και εν γένει όσες λειτουργίες είναι απαραίτητες για την ολοκληρωμένη
|
||
λειτουργία του εργαλείου. Από αυτούς τους 48 παρόχους, οι 25 υποστηρίζουν και
|
||
τις 9 συναρτήσεις. Ωστόσο, από αυτούς τους 25 έπρεπε να αφαιρεθούν οι 20 για
|
||
λόγους όπως η μη ύπαρξη τεκμηρίωσης χρήσης από την libcloud, η μη συνέχιση
|
||
λειτουργίας τους, η έλλειψη πληροφοριών τιμής ή δοκιμαστικής περιόδου για τις
|
||
υπηρεσίες τους και η αδυναμία δημιουργίας λογαριασμού στην επίσημη σελίδα τους.
|
||
Επομένως, υπάρχουν εν τέλει 5 πάροχοι νέφους που δύναται να χρησιμοποιηθούν
|
||
υποστηρίζοντας όλες τις πιθανές λειτουργίες διαχείρισης εικονικών μηχανών.
|
||
Τέλος, από αυτούς τους 5, επιλέχθηκαν για επίσημη υποστήριξη από το εργαλείο
|
||
που προτείνεται στην παρούσα διπλωματική εργασία, τα τρία μεγαλύτερα ονόματα
|
||
του χώρου, οι Amazon, Google και Microsoft. Οι άλλοι δύο είτε δεν παρείχαν
|
||
δοκιμαστική περίοδο των υπηρεσιών τους, είτε δεν υπήρχε εμπιστοσύνη ως προς την
|
||
ποιότητα των υπηρεσιών αυτών.
|
||
|
||
Παρακάτω θα διαπιστώσουμε πως ακόμα και με την χρήση της βιβλιοθήκης libcloud
|
||
και την επίσημη υποστήριξη όλων των λειτουργιών για κάθε πάροχο, υπήρχε η
|
||
ανάγκη χρήσης της επίσημης βιβλιοθήκης της Azure για την δημιουργία Resource
|
||
Group \footfullcite{azure-mgmt-resource}, Virtual Network
|
||
\footfullcite{azure-mgmt-network} διότι αυτές οι λειτουργίες δεν υποστηρίζονται
|
||
μέσω της libcloud. Επιπροσθέτως, δίχως την υποστήριξη των λειτουργιών αυτών, ο
|
||
χρήστης θα ήταν υποχρεωμένος να δημιουργεί αυτούς τους πόρους χειροκίνητα ή να
|
||
είναι περιορισμένος μονάχα σε μια γεωγραφική τοποθεσία. Οι δύο τελευταίες
|
||
επιλογές πάνε ενάντια σε έναν από τους βασικότερους στόχους του εργαλείου. Την
|
||
ομοιόμορφη λειτουργία για κάθε πάροχο νέφους που υποστηρίζεται.
|
||
|
||
\clearpage
|
||
|
||
Πέρα από την απόφαση για την χρήση της libcloud και την γλώσσα προγραμματισμού
|
||
Python, πάρθηκε επίσης η απόφαση για την υποστήριξη των 6 δημοφιλέστερων
|
||
επιλογών για λειτουργικά συστήματα Linux σε περιβάλλοντα διακομιστών. Οι
|
||
διανομές αυτές υποστηρίζονται και για τους 3 παρόχους νέφους και κάθε μια από
|
||
αυτές περιλαμβάνει διαφορετικές εκδόσεις της κάθε διανομής. Αυτές είναι οι εξής
|
||
για κάθε πάροχο:
|
||
|
||
\begin{savenotes}
|
||
\selectfont
|
||
\begin{table}[!ht]
|
||
\caption{Υποστηριζόμενες εκδόσεις διανομών για κάθε πάροχο}
|
||
\renewcommand{\arraystretch}{1.5}
|
||
\centering
|
||
\textgreek{\begin{tabular}{lc|c|c|c|}
|
||
\cline{3-5}
|
||
& & \multicolumn{3}{c|}{Πάροχοι} \\ \cline{3-5}
|
||
& & AWS & Azure & GCE \\ \hline
|
||
\multicolumn{1}{|c|}{\multirow{6}{*}{\rotatebox{90}{Διανομές}}} & Ubuntu \footfullcite{ubuntu} & 22.04, 22.10 & 22.04, 22.10 & Όλες \\ \cline{2-5}
|
||
\multicolumn{1}{|c|}{} & Debian \footfullcite{debian} & 10, 11 & 10, 11 & Όλες \\ \cline{2-5}
|
||
\multicolumn{1}{|c|}{} & CentOS \footfullcite{centos} & 7, 8, 9 & 8.4, 8.5 & Όλες \\ \cline{2-5}
|
||
\multicolumn{1}{|c|}{} & Fedora \footfullcite{fedora} & 37 & 36, 37 & Όλες \\ \cline{2-5}
|
||
\multicolumn{1}{|c|}{} & Red Hat Enterprise Linux \footfullcite{redhat} & 7.9, 8.6, 9 & 8.6, 9.1 & Όλες \\ \cline{2-5}
|
||
\multicolumn{1}{|c|}{} & openSUSE Leap \footfullcite{opensuse} & 15.3, 15.4 & 15.3 15.4 & Όλες \\ \hline
|
||
\end{tabular}}
|
||
\label{table:supportedDistributions}
|
||
\renewcommand{\arraystretch}{1}
|
||
\end{table}
|
||
\end{savenotes}
|
||
|
||
Ο λόγος που οι εκδόσεις είναι συγκεκριμένες για τους παρόχους AWS και Azure,
|
||
είναι διότι ο αριθμός των διαθέσιμων διανομών και εκδόσεων τους είναι
|
||
υπερβολικά μεγάλος και κατά την εκτέλεση της λειτουργίας δημιουργίας λίστας
|
||
τους ή κατά τον έλεγχο της ορθότητας δεδομένων που εισάγει ο χρήστης, το
|
||
πρόγραμμα θα καθυστερούσε σε τεράστιο βαθμό να ολοκληρωθεί.
|
||
|
||
\section{Απαιτήσεις από το εργαλείο} \label{toolRequirements}
|
||
|
||
Κατά την ανάπτυξη του εργαλείου, έγινε μια προσπάθεια να καλυφθούν ορισμένες
|
||
βασικές απαιτήσεις που θα έπρεπε να ικανοποιεί. Όπως όλα τα εργαλεία, έτσι και
|
||
αυτό έχει έναν σκοπό να εκπληρώσει. Ο σκοπός αυτός είναι η διευκόλυνση του
|
||
χρήστη ή ενός οργανισμού, στην εγκατάσταση και διαμόρφωση με αυτοματοποιημένο
|
||
τρόπο ενός ασφαλούς, κατανεμημένου περιβάλλοντος για την εγκατάσταση και
|
||
λειτουργία μιας εφαρμογής μικρο-υπηρεσιών. Για να γίνει αυτό πραγματικότητα,
|
||
πρέπει το εργαλείο να ικανοποιεί τις παρακάτω απαιτήσεις.
|
||
|
||
\clearpage
|
||
|
||
\subsection{Λειτουργικές απαιτήσεις}
|
||
|
||
\begin{itemize}
|
||
|
||
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την χρήση των 3 μεγαλύτερων
|
||
ονομάτων στον κλάδο της νεφο-υπολογιστικής}
|
||
|
||
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την χρήση των 6
|
||
δημοφιλέστερων διανομών για περιβάλλον διακομιστή}
|
||
|
||
\item \textbf{Το εργαλείο πρέπει να λειτουργεί μέσω της γραμμής εντολών
|
||
ώστε να μπορεί να αυτοματοποιηθεί περαιτέρω η εκτέλεση των εντολών του}
|
||
|
||
\item \textbf{Το εργαλείο πρέπει για κάθε πάροχο να υποστηρίζει την
|
||
λειτουργία εμφάνισης λίστας των διαθέσιμων μεγεθών εικονικής μηχανής}
|
||
|
||
\item \textbf{Το εργαλείο πρέπει για κάθε πάροχο να υποστηρίζει την
|
||
λειτουργία εμφάνισης λίστας των διαθέσιμων τοποθεσιών}
|
||
|
||
\item \textbf{Το εργαλείο πρέπει για κάθε πάροχο να υποστηρίζει την
|
||
λειτουργία εμφάνισης λίστας των διαθέσιμων διανομών}
|
||
|
||
\item \textbf{Το εργαλείο πρέπει για κάθε εντολή που επιδέχεται
|
||
παραμέτρους, να ρωτάει τον χρήστη για κάθε παράμετρο που δεν δόθηκε}
|
||
|
||
\item \textbf{Το εργαλείο πρέπει να ελέγχει την εγκυρότητα κάθε παραμέτρου
|
||
που δίνεται από τον χρήστη}
|
||
|
||
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την λειτουργία δημιουργίας
|
||
εικονικής μηχανής}
|
||
|
||
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την λειτουργία παύσης
|
||
εικονικής μηχανής}
|
||
|
||
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την λειτουργία εκκίνησης
|
||
εικονικής μηχανής}
|
||
|
||
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την λειτουργία
|
||
επανεκκίνησης εικονικής μηχανής}
|
||
|
||
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την λειτουργία διαγραφής
|
||
εικονικής μηχανής}
|
||
|
||
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την σύνδεση με SSH ακόμα
|
||
και χωρίς να διαθέτει ο χρήστης πελάτη SSH}
|
||
|
||
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την λειτουργία εμφάνισης
|
||
όλων των εικονικών μηχανών που διαχειρίζεται}
|
||
|
||
\item \textbf{Το εργαλείο πρέπει να εμφανίζει μηνύματα λάθους σε περίπτωση
|
||
που κάτι πάει στραβά κατά την εκτέλεση}
|
||
|
||
\item \textbf{το εργαλείο πρέπει να υποστηρίζει την διαδραστική διαμόρφωση
|
||
του αρχείου ρυθμίσεων του}
|
||
|
||
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την εκτέλεση εξωτερικού
|
||
εκτελέσιμου αρχείου στις εικονικές μηχανές με σκοπό την σκλήρυνσή τους}
|
||
|
||
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την εγκατάσταση δοχείων
|
||
στις εικονικές μηχανές που δημιουργεί, κατά την διάρκεια της
|
||
σκλήρυνσής τους, μέσω ενός αρχείου docker-compose.yml που θα
|
||
βρίσκεται στον ίδιο φάκελο με το εκτελέσιμο αρχείο}
|
||
|
||
\item \textbf{Το εργαλείο πρέπει να διαθέτει λειτουργία εμφάνισης όλων των
|
||
διαθέσιμων εντολών του}
|
||
|
||
\item \textbf{Το εργαλείο πρέπει να διαθέτει λειτουργία εμφάνισης
|
||
συμπλήρωσης εντολών και για τα 3 πιο δημοφιλή κελύφη εντολών}
|
||
|
||
\item \textbf{Το εργαλείο πρέπει να διαθέτει λειτουργία εμφάνισης της
|
||
έκδοσης του}
|
||
|
||
\item \textbf{Το εργαλείο πρέπει να διαθέτει παράμετρο για την προσπέραση
|
||
του βήματος επιβεβαίωσης κατά την δημιουργία εικονικών μηχανών}
|
||
|
||
\item \textbf{Το εργαλείο πρέπει να διαθέτει μηχανισμό συγκεκριμενοποίησης
|
||
περιοχής για τον πάροχο AWS}
|
||
|
||
\item \textbf{Το εργαλείο πρέπει να διαθέτει μηχανισμό επιλογής θύρας για
|
||
την λειτουργία σύνδεσης μέσω SSH}
|
||
|
||
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την αρχικοποίηση μονάχα
|
||
ενός παρόχου δίχως την συμπλήρωση κενών πεδίων για τους υπόλοιπους από
|
||
τον χρήστη}
|
||
|
||
\end{itemize}
|
||
|
||
\clearpage
|
||
|
||
\subsection{Μη λειτουργικές απαιτήσεις}
|
||
|
||
\begin{itemize}
|
||
|
||
\item \textbf{Το εργαλείο πρέπει να είναι εύκολο στην χρήση για έναν χρήστη
|
||
που έχει χρησιμοποιήσει προγράμματα γραμμής εντολών στο παρελθόν}
|
||
|
||
\item \textbf{Το εργαλείο πρέπει να δημιουργεί ξεχωριστό αρχείο για τις
|
||
ρυθμίσεις του στον ίδιο φάκελο που βρίσκεται και το εκτελέσιμο αρχείο}
|
||
|
||
\item \textbf{Το εργαλείο πρέπει να κρατάει αρχείο των διευθύνσεων
|
||
IP των εικονικών μηχανών που δημιουργεί ώστε να μπορούν να
|
||
διαμορφωθούν περαιτέρω εάν ο χρήστης επιθυμεί να
|
||
χρησιμοποιήσει άλλα προγράμματα όπως το Ansible}
|
||
|
||
\item \textbf{Το εργαλείο πρέπει να διαθέτει ένα μοτίβο εντολών που να
|
||
μπορεί ο χρήστης να καταλαβαίνει και να διαμορφώνει ανάλογα με τις
|
||
ανάγκες του}
|
||
|
||
\item \textbf{Το εργαλείο πρέπει να δημιουργεί κλειδιά SSH σε
|
||
περίπτωση που δεν υπάρχουν, στον ίδιο φάκελο με το εκτελέσιμο
|
||
αρχείο του}
|
||
|
||
\item \textbf{Το δεύτερο εκτελέσιμο αρχείο του εργαλείου πρέπει να
|
||
εγκαθιστά και να σκληραίνει και το Docker πέρα από το
|
||
λειτουργικό σύστημα}
|
||
|
||
\item \textbf{Το δεύτερο εκτελέσιμο αρχείο του εργαλείου πρέπει να
|
||
δημιουργεί στην εικονική μηχανή δύο επιπλέον εκτελέσιμα
|
||
αρχεία για περιοδική ενημέρωση των πακέτων και κλείσιμο
|
||
αχρησιμοποίητων θυρών}
|
||
|
||
\item \textbf{Το δεύτερο εκτελέσιμο αρχείο του εργαλείου πρέπει να
|
||
εγκαθιστά προγράμματα για την περαιτέρω σκλήρυνση του Docker και την
|
||
διευκόλυνση του χρήστη κατά την εγκατάσταση δοχείων}
|
||
|
||
\end{itemize}
|
||
|
||
\clearpage
|
||
|
||
\begin{landscape}
|
||
\thispagestyle{empty}
|
||
|
||
\section{Διαγραμματική Μοντελοποίηση} \label{designModels}
|
||
|
||
Οι παραπάνω απαιτήσεις και ο τρόπος λειτουργίας του εργαλείου, μεταφράζονται
|
||
καλύτερα στον χρήστη μέσω ενός σχεδιαγράμματος περίπτωσης χρήσης. Το σχήμα
|
||
\ref{fig:useCaseDiagram} δημιουργήθηκε με την βοήθεια του εργαλείου
|
||
\textquote{yuml} \footfullcite{yuml}. Επιπλέον, με το εργαλείο
|
||
\textquote{mermaid} \footfullcite{mermaid}, δημιουργήθηκε ένα διάγραμμα ροής
|
||
για το SecDep που απεικονίζεται στο σχήμα \ref{fig:flowchartDiagram}. Το
|
||
διάγραμμα ροής, απεικονίζει την ροή των εντολών που μπορεί να επιλεγούν από τον
|
||
χρήστη κατά την εκτέλεση του προγράμματος.
|
||
|
||
\begin{center}
|
||
\begin{figure}[!ht]
|
||
\centering
|
||
\includegraphics[width = 1.0\textwidth]{Figures/Diagrams/secdep-use-case-diagram.jpg}
|
||
\captionof{figure}{Διάγραμμα περιπτώσεων χρήσης}
|
||
\label{fig:useCaseDiagram}
|
||
\end{figure}
|
||
\vspace*{-30pt}
|
||
\end{center}
|
||
|
||
\end{landscape}
|
||
|
||
\clearpage
|
||
|
||
\begin{landscape}
|
||
\thispagestyle{empty}
|
||
|
||
\begin{center}
|
||
\begin{figure}[!ht]
|
||
\centering
|
||
\includegraphics[width = 1.0\textwidth]{Figures/Diagrams/secdep-flowchart-diagram.png}
|
||
\captionof{figure}{Διάγραμμα ροής}
|
||
\label{fig:flowchartDiagram}
|
||
\end{figure}
|
||
\vspace*{-30pt}
|
||
\end{center}
|
||
|
||
\end{landscape}
|
||
|
||
Ουσιαστικά, κατά την πραγματική χρήση του SecDep υπάρχουν πάντοτε δύο οντότητες
|
||
που αλληλεπιδρούν μεταξύ τους. Ο χρήστης και ο πάροχος νέφους. Ο χρήστης μπορεί
|
||
να ζητήσει πληροφορίες για διαθέσιμους πόρους όπως οι εικονικές του μηχανές ή
|
||
τα συστατικά που έχει στην διάθεση του για την δημιουργία τους όπως οι
|
||
διανομές, τα μεγέθη και οι τοποθεσίες τους. Αυτή η αλληλεπίδραση μεταξύ του
|
||
χρήστη και του παρόχου νέφους, απεικονίζεται στο σχήμα
|
||
\ref{fig:sequenceDiagram}, το οποίο δημιουργήθηκε με το εργαλείο mermaid.
|
||
|
||
\begin{center}
|
||
\begin{figure}[!ht]
|
||
\centering
|
||
\includegraphics[width = .9\textwidth]{Figures/Diagrams/secdep-sequence-diagram.png}
|
||
\captionof{figure}{Διάγραμμα αλληλεπίδρασης χρήστη - παρόχου νέφους}
|
||
\label{fig:sequenceDiagram}
|
||
\end{figure}
|
||
\vspace*{-30pt}
|
||
\end{center}
|
||
|
||
\begin{landscape}
|
||
\thispagestyle{empty}
|
||
|
||
Mε το \textquote{code2flow} \footfullcite{code2flow} δημιουργήθηκε ένα
|
||
διάγραμμα που απεικονίζει τις κλήσεις συναρτήσεων που γίνονται κατά την
|
||
εκτέλεση του αρχείου secdep.py. Παράλληλα, το ίδιο αποτέλεσμα επιτεύχθηκε για
|
||
το αρχείο harden με την βοήθεια του \textquote{callGraph}
|
||
\footfullcite{callGraph}. Τα παραπάνω απεικονίζονται στα σχήματα
|
||
\ref{fig:secdepFunctionCallDiagram} και \ref{fig:hardenFunctionCallDiagram}
|
||
αντίστοιχα.
|
||
|
||
\begin{center}
|
||
\begin{figure}[!ht]
|
||
\centering
|
||
\includegraphics[width = 1.1\textwidth]{Figures/Diagrams/secdep-function-relationships.png}
|
||
\captionof{figure}{Διάγραμμα κλήσεων συναρτήσεων του secdep.py}
|
||
\label{fig:secdepFunctionCallDiagram}
|
||
\end{figure}
|
||
\vspace*{-30pt}
|
||
\end{center}
|
||
|
||
\end{landscape}
|
||
|
||
\begin{landscape}
|
||
\thispagestyle{empty}
|
||
|
||
\begin{center}
|
||
\begin{figure}[!ht]
|
||
\centering
|
||
\includegraphics[width = 1.1\textwidth]{Figures/Diagrams/harden-function-relationships.png}
|
||
\captionof{figure}{Διάγραμμα κλήσεων συναρτήσεων του harden}
|
||
\label{fig:hardenFunctionCallDiagram}
|
||
\end{figure}
|
||
\vspace*{-30pt}
|
||
\end{center}
|
||
|
||
\end{landscape}
|
||
|
||
Επιπλέον, ένας χάρτης των σημαντικών εξαρτήσεων του secdep.py δημιουργήθηκε με
|
||
την βοήθεια του \textquote{pydeps} \footfullcite{pydeps}. Αυτό έγινε με την
|
||
εκτέλεση της παρακάτω εντολής:
|
||
|
||
\begin{listing}[!ht]
|
||
\begin{bashcode}
|
||
pydeps -T png --cluster --include-missing --max-bacon=1 --noshow --reverse --rankdir RL -o secdep-module-dependencies-organized.png secdep.py
|
||
\end{bashcode}
|
||
\caption{Εντολή δημιουργίας χάρτη εξαρτήσεων του secdep.py}
|
||
\label{lst:secdepModuleDependencies}
|
||
\vspace*{-10pt}
|
||
\end{listing}
|
||
|
||
\begin{center}
|
||
\begin{figure}[!ht]
|
||
\centering
|
||
\includegraphics[width = .9\textwidth]{Figures/Diagrams/secdep-module-dependencies-organized.png}
|
||
\captionof{figure}{Διάγραμμα σημαντικών εξαρτήσεων του secdep.py}
|
||
\label{fig:secdepModules}
|
||
\end{figure}
|
||
\vspace*{-30pt}
|
||
\end{center}
|
||
|
||
\clearpage
|
||
|
||
\section{Αρχιτεκτονική} \label{architecture}
|
||
|
||
Οι διαθέσιμες συναρτήσεις και μεταβλητές του secdep.py, απεικονίζονται στα
|
||
σχήματα \ref{fig:secdepFunctions} και \ref{fig:secdepVariables} αντίστοιχα. Η
|
||
δημιουργία τους πραγματοποιήθηκε με το εργαλείο \textquote{doxygen}
|
||
\footfullcite{doxygen}.
|
||
|
||
\begin{center}
|
||
\begin{figure}[!ht]
|
||
\centering
|
||
\includegraphics[width = .9\textwidth]{Figures/doxygen/secdepFunctions.png}
|
||
\captionof{figure}{Συναρτήσεις του secdep.py}
|
||
\label{fig:secdepFunctions}
|
||
\end{figure}
|
||
\vspace*{-30pt}
|
||
\end{center}
|
||
|
||
\begin{center}
|
||
\begin{figure}[!ht]
|
||
\centering
|
||
\includegraphics[width = .9\textwidth]{Figures/doxygen/secdepVariables.png}
|
||
\captionof{figure}{Μεταβλητές του secdep.py}
|
||
\label{fig:secdepVariables}
|
||
\end{figure}
|
||
\vspace*{-30pt}
|
||
\end{center}
|
||
|
||
\clearpage
|
||
|
||
Το SecDep αποτελείται από δύο εκτελέσιμα αρχεία. Το πρώτο αρχείο, το
|
||
\textquote{secdep.py}, είναι το κύριο αρχείο του προγράμματος. Αυτό το αρχείο
|
||
είναι υπεύθυνο για την επικοινωνία με τους παρόχους νέφους και την διαχείριση
|
||
των εικονικών μηχανών. Το δεύτερο αρχείο, το \textquote{harden}, είναι υπεύθυνο
|
||
για την σκλήρυνση των εικονικών μηχανών και την εγκατάσταση/σκλήρυνση του
|
||
Docker. Το harden, εκτελείται μόνο στις εικονικές μηχανές κατά την δημιουργία
|
||
τους και μόνο εάν ο χρήστης το επιθυμεί.
|
||
|
||
Οι βασικότερες συναρτήσεις του secdep.py είναι οι εξής:
|
||
|
||
\begin{itemize}
|
||
|
||
\item \textbf{create\_node}:
|
||
|
||
Η συνάρτηση \textquote{create\_node}, είναι αυτή που δημιουργεί τις
|
||
εικονικές μηχανές λαμβάνοντας ή ζητώντας από τον χρήστη τις κατάλληλες
|
||
παραμέτρους. Οι βασικές παράμετροι που μπορεί να λάβει είναι:
|
||
|
||
\begin{itemize}
|
||
|
||
\item \textbf{provider}
|
||
\item \textbf{name}
|
||
\item \textbf{location}
|
||
\item \textbf{size}
|
||
\item \textbf{image}
|
||
|
||
\item \textbf{confirm}: Για επιβεβαίωση της δημιουργίας της
|
||
εικονικής μηχανής χωρίς να χρειαστεί επιπλέον επιβεβαίωση από
|
||
τον χρήστη.
|
||
|
||
\item \textbf{deploy}: Για την εκτέλεση του harden.
|
||
|
||
\end{itemize}
|
||
|
||
\item \textbf{node\_action}:
|
||
|
||
Η συνάρτηση \textquote{node\_action}, είναι αυτή που εκτελεί τις
|
||
ενέργειες πάνω στις εικονικές μηχανές. Στις ενέργειες αυτές περιλαμβάνονται:
|
||
|
||
\begin{itemize}
|
||
|
||
\item \textbf{start}
|
||
\item \textbf{stop}
|
||
\item \textbf{reboot}
|
||
\item \textbf{delete}
|
||
|
||
\end{itemize}
|
||
|
||
\clearpage
|
||
|
||
\item \textbf{list\_all\_nodes}: Η συνάρτηση \textquote{list\_all\_nodes},
|
||
είναι αυτή που εμφανίζει τις εικονικές μηχανές που διαχειρίζεται το
|
||
SecDep. Χωρίς παραμέτρους θα εμφάνιζε όλες τις εικονικές μηχανές από
|
||
όλους τους παρόχους. Επειδή όμως δεν είναι πάντοτε απαραίτητο να
|
||
εμφανίζονται όλες οι εικονικές μηχανές, ο χρήστης μπορεί να δώσει τις
|
||
παρακάτω παραμέτρους:
|
||
|
||
\begin{itemize}
|
||
|
||
\item \textbf{provider}
|
||
|
||
\item \textbf{filterIn}: Χρησιμοποιείται για το φιλτράρισμα της
|
||
λίστας κατά την χρήση της συνάρτησης \textquote{node\_action}.
|
||
|
||
\item \textbf{awsRegion}: Μόνο για τον πάροχο AWS. Χρησιμοποιείται
|
||
για την επιλογή της περιοχής. Δίχως την παράμετρο αυτή, θα
|
||
γινόταν έρευνα για εικονικές μηχανές σε όλες τις περιοχές. Κάτι
|
||
που θα έκανε την εκτέλεση της εντολής πολύ αργή, ειδικά εάν ο
|
||
χρήστης γνωρίζει πως χρησιμοποιεί μονάχα μια περιοχή.
|
||
|
||
\end{itemize}
|
||
|
||
\end{itemize}
|
||
|
||
Το αρχείο harden, αποτελείται από πολλές συναρτήσεις που εκτελούνται με την
|
||
σειρά προκειμένου να ασφαλιστεί το σύστημα στο οποίο εκτελείται. Οι πιο
|
||
αξιοσημείωτες αυτών είναι:
|
||
|
||
\begin{itemize}
|
||
|
||
\item \textbf{hardenSSH}:
|
||
|
||
Η συνάρτηση υπεύθυνη για την σκλήρυνση του SSH.
|
||
|
||
\item \textbf{dockerInit}:
|
||
|
||
Η συνάρτηση υπεύθυνη για την εγκατάσταση/σκλήρυνση του Docker.
|
||
|
||
\item \textbf{kernelSecurityModuleInit}:
|
||
|
||
Η συνάρτηση υπεύθυνη για την εγκατάσταση/ρύθμιση του κατάλληλου για την
|
||
διανομή kernel security module.
|
||
|
||
\item \textbf{configureFail2ban}:
|
||
|
||
Αφότου έχει προηγηθεί η εγκατάσταση του κατάλληλου για την διανομή
|
||
προγράμματος αναχώματος ασφαλείας, η συνάρτηση αυτή ρυθμίζει το
|
||
fail2ban για την προστασία από επιθέσεις brute force.
|
||
|
||
\end{itemize}
|