QuickFix.

This commit is contained in:
2024-02-28 00:59:14 +02:00
parent e6fa5928c5
commit ef5cb33f23
25 changed files with 2143 additions and 1398 deletions

View File

@@ -27,8 +27,10 @@
\textbf{CVRF} & \textbf{C}ommon \textbf{V}ulnerability \textbf{R}eporting \textbf{F}ramework \\
\textbf{CWE} & \textbf{C}ommon \textbf{W}eakness \textbf{E}numeration \\
\textbf{DDoS} & \textbf{D}istributed \textbf{D}enial \textbf{o}f \textbf{S}ervice \\
\textbf{DevOps} & \textbf{Dev}elopment \textbf{Op}eration\textbf{s} \\
\textbf{DNS} & \textbf{D}omain \textbf{N}ame \textbf{S}ystem \\
\textbf{DoS} & \textbf{D}enial \textbf{o}f \textbf{S}ervice \\
\textbf{EBS} & \textbf{E}lastic \textbf{B}lock \textbf{S}tore \\
\textbf{EC2} & \textbf{E}lastic \textbf{C}ompute \textbf{C}loud \\
@@ -44,6 +46,7 @@
\textbf{IP} & \textbf{I}nternet \textbf{P}rotocol \\
\textbf{IPC} & \textbf{I}nter \textbf{P}rocess \textbf{C}ommunication \\
\textbf{IPv4} & \textbf{I}nternet \textbf{P}rotocol \textbf{v}ersion \textbf{4} \\
\textbf{IPv6} & \textbf{I}nternet \textbf{P}rotocol \textbf{v}ersion \textbf{6} \\
\textbf{KVM} & \textbf{K}ernel-based \textbf{V}irtual \textbf{M}achine \\
@@ -82,10 +85,12 @@
\textbf{VBS} & \textbf{V}irtualization-\textbf{B}ased \textbf{S}ecurity \\
\textbf{VM} & \textbf{V}irtual \textbf{M}achine \\
\textbf{VMBR} & \textbf{V}irtual \textbf{M}achine \textbf{B}ased \textbf{R}ootkits \\
\textbf{VMM} & \textbf{V}irtual \textbf{M}achine \textbf{M}onitor \\
\textbf{Vuls} & \textbf{VUL}nerability \textbf{S}canner \\
\textbf{XSS} & \textbf{C}ross \textbf{S}ite \textbf{S}cripting \\
\textbf{XML} & E\textbf{x}tensive \textbf{M}arkup \textbf{L}anguage \\
\textbf{XSS} & Cross (\textbf{X}) \textbf{S}ite \textbf{S}cripting \\
\textbf{ΛΣ} & \textbf{Λ}ειτουργικό \textbf{Σ}ύστημα \\
\textbf{ΤΠ} & \textbf{Τ}εχνολογίες \textbf{Π}ληροφοριών \\

View File

@@ -578,7 +578,7 @@
@article{yasrab2018mitigating,
title = {Mitigating docker security issues},
author = {Yasrab, Robail},
year = {2018},
year = {2023},
journal = {arXiv preprint arXiv:1804.05039},
urldate = {2023-07-29},
}
@@ -741,6 +741,109 @@
urldate = {2023-08-07},
}
@article{litchfield2016virtualization,
title={Virtualization technology: Cross-vm cache side channel attacks make it vulnerable},
author={Litchfield, Alan and Shahzad, Abid},
journal={arXiv preprint arXiv:1606.01356},
year={2016},
urldate = {2024-02-04},
}
@inproceedings{zhang2012crossvmkeys,
author = {Zhang, Yinqian and Juels, Ari and Reiter, Michael K. and Ristenpart, Thomas},
title = {Cross-VM side channels and their use to extract private keys},
year = {2012},
isbn = {9781450316514},
publisher = {Association for Computing Machinery},
address = {New York, NY, USA},
url = {https://doi.org/10.1145/2382196.2382230},
doi = {10.1145/2382196.2382230},
booktitle = {Proceedings of the 2012 ACM Conference on Computer and Communications Security},
pages = {305316},
numpages = {12},
keywords = {cache-based side channel, cross-vm side channel, side-channel attack},
location = {Raleigh, North Carolina, USA},
series = {CCS '12},
urldate = {2024-02-04},
}
@inproceedings{vmrollbackattack,
author = {Xia, Yubin and Liu, Yutao and Chen, Haibo and Zang, Binyu},
year = {2012},
month = {06},
pages = {1-5},
title = {Defending against VM rollback attack},
isbn = {978-1-4673-2264-5},
doi = {10.1109/DSNW.2012.6264690},
urldate = {2024-02-04},
}
@online{technopediaVmHopping,
title = {Virtual Machine Hyper Jumping},
author = {Margaret Rouse},
year = {2015},
url = {https://www.techopedia.com/definition/30921/virtual-machine-hyper-jumping-vm-jumping},
urldate = {2024-02-04},
}
@article{abusaimeh2020virtual,
title = {Virtual machine escape in cloud computing services},
author = {Abusaimeh, Hesham},
journal = {International Journal of Advanced Computer Science and Applications},
volume = {11},
number = {7},
year = {2020},
publisher = {Science and Information (SAI) Organization Limited},
urldate = {2024-02-04},
}
@online{containersVsVMs,
title = {A Complete Overview of Docker Architecture},
author = {Winnie Ondara},
year = {2022},
url = {https://www.cherryservers.com/blog/a-complete-overview-of-docker-architecture},
urldate = {2024-02-08},
}
@online{containerRuntime,
title = {What are container runtimes?},
author = {Nived Velayudhan},
year = {2021},
url = {https://opensource.com/article/21/9/container-runtimes},
urldate = {2024-02-11},
}
@online{kernexpcgroup,
title = {New Linux Kernel cgroups Vulnerability Could Let Attackers Escape Container},
author = {Ravie Lakshmanan},
year = {2022},
url = {https://thehackernews.com/2022/03/new-linux-kernel-cgroups-vulnerability.html},
urldate = {2024-02-11},
}
@online{dirtyPipe,
title = {Escaping containers using the Dirty Pipe vulnerability},
author = {Eric Mountain and Tommy McCormick and Christophe Tafani-Dereeper and Frederic Baguelin},
year = {2022},
url = {https://securitylabs.datadoghq.com/articles/dirty-pipe-container-escape-poc/},
urldate = {2024-02-11},
}
@online{dockermitm,
title = {Top Docker Security Vulnerabilities, Best Practices, \& Insights},
author = {Fortra's Alert Logic},
year = {2020},
url = {https://www.alertlogic.com/blog/top-docker-security-vulnerabilities-best-practices-insights/},
urldate = {2024-02-11},
}
@online{arpdocker,
title = {ARP Spoofing},
author = {Imperva},
url = {https://www.imperva.com/learn/application-security/arp-spoofing/},
urldate = {2024-02-12},
}
@online{lynis,
title = {Lynis},
author = {CISOfy},
@@ -748,6 +851,24 @@
}
urldate = {2023-12-06},
@online{docker-rootless-setup,
title = {Docker-Rootless Full Setup},
author = {zerint},
url = {https://github.com/zerint/docker-rootless-setup},
}
@online{docksec,
title = {docksec},
author = {Ted LeRoy},
url = {https://github.com/TedLeRoy/docksec},
}
@online{docker-bench-security,
title = {Docker Bench for Security},
author = {Docker},
url = {https://github.com/docker/docker-bench-security},
}
@online{lunar,
title = {Lunar},
author = {Lateral Blast},
@@ -783,6 +904,12 @@
}
urldate = {2023-11-10},
@online{portainer,
title = {Portainer},
author = {Portainer},
url = {https://www.portainer.io/},
}
@online{secdep,
title = {SecDep},
author = {konsthol},
@@ -1052,6 +1179,48 @@
url = {https://github.com/rkt/rkt},
}
@online{snyk,
title = {Snyk},
author = {Snyk},
url = {https://snyk.io/},
}
@online{trivy,
title = {Trivy},
author = {Aqua Security},
url = {https://aquasecurity.github.io/trivy/v0.49/},
}
@online{dotenv,
title = {python-dotenv},
author = {Saurabh Kumar},
url = {https://github.com/theskumar/python-dotenv},
}
@online{rich,
title = {rich},
author = {Textualize},
url = {https://github.com/Textualize/rich},
}
@online{shtab,
title = {shtab},
author = {Iterative},
url = {https://github.com/iterative/shtab},
}
@online{paramiko,
title = {paramiko},
author = {paramiko},
url = {https://github.com/paramiko/paramiko},
}
@online{dockerCompose,
title = {Docker Compose},
author = {Docker},
url = {https://github.com/docker/compose},
}
inproceedings{manu2016study,
author = {Manu, A.R. and Patel, Jitendra Kumar and Akhtar, Shakil and Agrawal, V.K. and Subramanya Murthy, K.N. Bala},
booktitle = {2016 International Conference on Circuit, Power and Computing Technologies (ICCPCT)},

File diff suppressed because it is too large Load Diff

View File

@@ -3,25 +3,31 @@
\noindent Με την πάροδο των χρόνων και τη ραγδαία αύξηση ενδιαφέροντος προς τον
κλάδο της υπολογιστικής νέφους, άρχισε να γίνεται όλο και πιο επιτακτική η
ανάγκη για αυτοματοποιημένο στήσιμο και προστασία των υποδομών των
επιχειρήσεων. Η χρήση τεχνολογιών εικονικοποίησης και η άνοδος υπηρεσιών IaaS,
έχει ελαφρύνει τον φόρτο εργασίας όσον αφορά το στήσιμο των υποδομών αυτών,
αφού πλέον υπάρχουν πολλά εργαλεία στα οποία γίνεται καθορισμός τους. Η
αυτοματοποίηση της ασφάλισής τους όμως είναι ακόμα σε πρώιμο στάδιο. Οι
περισσότερες υπηρεσίες που διατίθενται στους χρήστες κάνουν χρήση τεχνολογιών
εικονικοποίησης έμμεσα από τον πάροχο νέφους που χρησιμοποιούν και τεχνολογίες
δοχείων άμεσα από επιλογή τους λόγω της υπεροχής που παρέχουν στη διαχείρισή
τους. Όλες οι υπηρεσίες όμως είναι εν δυνάμει ευάλωτες σε επιθέσεις εάν δε
επιχειρήσεων. Η χρήση τεχνολογιών εικονικοποίησης και η άνοδος των υπηρεσιών
IaaS, έχει ελαφρύνει τον φόρτο εργασίας όσον αφορά το στήσιμο των υποδομών
αυτών, αφού πλέον υπάρχουν πολλά εργαλεία στα οποία γίνεται καθορισμός τους.
Πέραν από εργαλεία στα οποία δηλώνονται οι προδιαγραφές μιας εικονικής μηχανής
σε πραγματικό χρόνο με την χρήση παραμέτρων, υπάρχουν και άλλα που ανήκουν στην
οικογένεια εργαλείων IaC (Infrastructure as Code - Υποδομή ως κώδικας). Σε
αυτού του είδους τα εργαλεία, όλα τα χαρακτηριστικά μιας εικονικής μηχανής
δηλώνονται σε ένα αρχείο κειμένου και με βάση αυτό, ξεκινάει η διαδικασία
δημιουργίας τους. Η αυτοματοποίηση της ασφάλισης αυτών των εικονικών μηχανών
όμως, είναι ακόμα σε πρώιμο στάδιο. Οι περισσότερες υπηρεσίες που διατίθενται
στους χρήστες κάνουν χρήση τεχνολογιών εικονικοποίησης έμμεσα από τον πάροχο
νέφους που χρησιμοποιούν και τεχνολογίες δοχείων άμεσα από επιλογή τους λόγω
της υπεροχής που προσφέρουν στη διαχείριση και τη διασφάλιση των εφαρμογών
τους. Όλες οι υπηρεσίες όμως, είναι εν δυνάμει ευάλωτες σε επιθέσεις εάν δε
ληφθούν τα απαραίτητα μέτρα προστασίας και αφήσουν ανοιχτά σημεία εισόδου στα
συστήματά τους.
Η παρούσα εργασία έχει ως στόχο την ανάπτυξη ενός εργαλείου που επιτυγχάνει την
αυτοματοποίηση τριών τομέων. Την επικοινωνία με τον πάροχο νέφους για την
αίτηση διάθεσης υπολογιστικών πόρων, την ασφάλιση των πόρων αυτών και τέλος την
αυτοματοποίηση τριών τομέων. Την επικοινωνία με παρόχους νέφους για την αίτηση
διάθεσης υπολογιστικών πόρων, την ασφάλιση των πόρων αυτών και τέλος, την
εγκατάσταση, ασφάλιση και χρήση του Docker για τη διάθεση εφαρμογών που
βρίσκονται στο Docker Hub. Το επίσημο αποθετήριο του Docker. Στην ενότητα αυτή
θα γίνει αναφορά σε εργαλεία που έχουν αναπτυχθεί για έναν ή παραπάνω από
αυτούς τους τρεις τομείς και θα πραγματοποιηθεί σύγκρισή τους ανάλογα με τον
τρόπο λειτουργίας τους και τις δυνατότητες που παρέχουν.
βρίσκονται στο Docker Hub, δηλ. το επίσημο αποθετήριο εικόνων δοχείων του
Docker. Στην ενότητα αυτή θα γίνει αναφορά σε εργαλεία που έχουν αναπτυχθεί για
έναν ή παραπάνω από αυτούς τους τρεις τομείς και θα πραγματοποιηθεί σύγκρισή
τους ανάλογα με τον τρόπο λειτουργίας τους και τις δυνατότητες που παρέχουν.
\section{Αυτοματοποίηση δημιουργίας εικονικών μηχανών}
@@ -37,21 +43,20 @@
όταν αυτός χρειάζεται να πραγματοποιήσει ορισμένες παραμετροποιήσεις
κατά την χρήση του.
\clearpage
\item \textbf{Ευκολία κατά την χρήση}:
Το εργαλείο πρέπει να μπορεί να χρησιμοποιηθεί εύκολα από έναν χρήστη
που έχει χρησιμοποιήσει στο παρελθόν εργαλεία γραμμής εντολών. Οι
παράμετροί του πρέπει να ακολουθούν ένα μοτίβο που θα διευκολύνει την
κατανόηση της λειτουργίας τους και τον συνδυασμό τους για ένα επιθυμητό
αποτέλεσμα.
κατανόηση της σημασιολογίας τους και θα επιτρέπει τον συνδυασμό τους
για ένα επιθυμητό αποτέλεσμα.
\item \textbf{Υποστήριξη μεγάλων ονομάτων στον κλάδο}:
Το εργαλείο πρέπει να υποστηρίζει την επικοινωνία με τα νέφη μεγάλων
εταιρειών στον κλάδο της νεφο-υπολογιστικής, ώστε να είναι εύκολο για
να έναν χρήστη να παραμείνει στον πάροχο της επιλογής του.
εταιρειών στον κλάδο της νεφο-υπολογιστικής, τα οποία κατέχουν μεγάλο
μερίδιο της σχετικής αγοράς, ώστε να είναι εύκολο για να έναν χρήστη να
παραμείνει στον πάροχο της επιλογής του.
\item \textbf{Ευκολία στην επέκταση}:
@@ -62,7 +67,8 @@
\subsection{Εργαλεία δημιουργίας εικονικών μηχανών}
Τα εργαλεία με τα οποία θα γίνει σύγκριση περιγράφονται στην συνέχεια ως εξής:
Τα εργαλεία με τα οποία θα γίνει σύγκριση στον τομέα δημιουργίας εικονικών
μηχανών, περιγράφονται στην συνέχεια ως εξής:
\begin{itemize}
@@ -70,28 +76,29 @@
Το Terraform είναι ένα δημοφιλές εργαλείο ανοιχτού κώδικα που
αναπτύχθηκε από την εταιρεία HashiCorp. Αποτελεί ένα εργαλείο, κατά την
χρήση του οποίου ο χρήστης καθορίζει τα χαρακτηριστικά της υποδομής που
θέλει να δημιουργήσει σε ένα αρχείο που ακολουθεί συγκεκριμένη σύνταξη.
Αυτό το εντάσσει στην κατηγορία \textquote{υποδομή ως κώδικας
(Infrastructure as Code - IaC)} και χρησιμοποιείται για τον καθορισμό
των υποδομών που θα χρησιμοποιηθούν για την στέγαση εφαρμογών. Το
Terraform υποστηρίζει πολλούς παρόχους νέφους και επιτρέπει την
αυτοματοποίηση της διαδικασίας δημιουργίας υποδομών σε αυτούς. Ο τρόπος
λειτουργίας του είναι αρκετά απλός. Αφού ο χρήστης έχει δημιουργήσει το
αρχείο που περιγράφει την υποδομή, το εκτελεί για να γίνουν οι
απαραίτητες ενέργειες. Έπειτα ο χρήστης μπορεί να αποδεσμεύσει τους
πόρους που δημιουργήθηκαν όταν δεν τους χρειάζεται πλέον.
\clearpage
χρήση, του οποίου ο χρήστης καθορίζει τα χαρακτηριστικά της υποδομής
που θέλει να δημιουργήσει σε ένα αρχείο που ακολουθεί συγκεκριμένη
σύνταξη. Αυτό το χαρακτηριστικό, εντάσσει το Terraform στην κατηγορία
εργαλείων \textquote{υποδομή ως κώδικας (Infrastructure as Code - IaC)}
και χρησιμοποιείται για τον καθορισμό των υποδομών που θα
χρησιμοποιηθούν για την στέγαση εφαρμογών. Το Terraform υποστηρίζει
πολλούς παρόχους νέφους και επιτρέπει την αυτοματοποίηση της
διαδικασίας δημιουργίας υποδομών σε αυτούς. Ο τρόπος λειτουργίας του
είναι αρκετά απλός. Αφού ο χρήστης έχει δημιουργήσει το αρχείο που
περιγράφει την υποδομή, το εκτελεί για να γίνουν οι απαραίτητες
ενέργειες. Έπειτα, δημιουργούνται οι εικονικές μηχανές που
περιγράφονται στο αρχείο. Ο χρήστης μπορεί να αποδεσμεύσει τους πόρους
που δημιουργήθηκαν όταν δεν τους χρειάζεται πλέον και η διαδικασία της
αποδέσμευσης, είναι όσο απλή όσο και η δημιουργία τους.
\item \textbf{Libcloud CLI} \footfullcite{libcloud-cli}:
Αποτελεί την δεύτερη τροποποιημένη έκδοση από ένα τρίτο πρόσωπο, ενός
προγράμματος που επιχειρούσε να επιτύχει την δημιουργία ενός εργαλείου
γραμμής εντολών που χρησιμοποιεί την βιβλιοθήκη libcloud για την
δημιουργία εικονικών μηχανών κατά μήκος διαφόρων παρόχων νέφους. Είναι
ένα εργαλείο γραμμής εντολών που απαιτεί αρχείο ρυθμίσεων μονάχα για
την αυθεντικοποίηση με τους παρόχους νέφους.
Το Libcloud CLI, αποτελεί την δεύτερη τροποποιημένη έκδοση από ένα
τρίτο πρόσωπο, ενός προγράμματος που επιχειρούσε να επιτύχει την
ανάπτυξη ενός εργαλείου γραμμής εντολών που χρησιμοποιεί την βιβλιοθήκη
libcloud για την δημιουργία εικονικών μηχανών κατά μήκος διαφόρων
παρόχων νέφους. Είναι ένα εργαλείο γραμμής εντολών που απαιτεί αρχείο
ρυθμίσεων μονάχα για την αυθεντικοποίηση με τους παρόχους νέφους.
\end{itemize}
@@ -105,7 +112,7 @@
\item \textbf{Σύγκριση με Terraform}:
Χρειάζεται την δημιουργία ενός αρχείου πριν την χρήση του και κάθε
Χρειάζεται την δημιουργία ενός αρχείου πριν την χρήση του, ενώ κάθε
αλλαγή απαιτεί την τροποποίηση του αρχείου αυτού. Αυτό το καθιστά
λιγότερο ευέλικτο σε σχέση με άλλα εργαλεία. Είναι σχετικά εύκολο στην
χρήση όπως τα υπόλοιπα και δύναται να χρησιμοποιήσει τα νέφη όλων των
@@ -114,23 +121,81 @@
\item \textbf{Σύγκριση με Libcloud CLI}:
Το δεύτερο πιο πρόσφατο εργαλείο που κάνει χρήση της βιβλιοθήκης
libcloud μετά από αυτό που προτείνει η διπλωματική εργασία. Είναι
αρκετά ευέλικτο και εύκολο στην χρήση, παρ' όλα αυτά πλέον υποστηρίζει
μονάχα έναν πάροχο νέφους, ο οποίος δεν αποτελεί δημοφιλή επιλογή
γενικότερα. Θα μπορούσε να επεκταθεί η λειτουργικότητά του αλλά έχει να
ανανεωθεί από το 2018.
Είναι αρκετά ευέλικτο και εύκολο στην χρήση, παρ' όλα αυτά πλέον
υποστηρίζει μονάχα έναν πάροχο νέφους, ο οποίος δεν αποτελεί δημοφιλή
επιλογή γενικότερα. Θα μπορούσε να επεκταθεί η λειτουργικότητά του,
αλλά έχει να ανανεωθεί από το 2018.
\end{itemize}
Ο χρήστης δύναται κατά την χρήση του SecDep να επιλέξει τις ενέργειες και τα
χαρακτηριστικά που επιθυμεί για την εικονική μηχανή του. Όλες οι παράμετροι
είναι εύκολα κατανοητές και συνδυάζονται μεταξύ τους για να επιτευχθεί το
επιθυμητό αποτέλεσμα. Υποστηρίζει όλους τους δημοφιλείς παρόχους νέφους και
όλες τις καλές πρακτικές ενός εργαλείου γραμμής εντολών όπως ο έλεγχος
σφαλμάτων κατά την εισαγωγή παραμέτρων. Επιπλέον, μπορεί εύκολα να επεκταθεί η
χρήση του, είτε εισάγοντας έτοιμες εντολές σε αρχεία bash είτε προσθέτοντας
νέες ενέργειες στον κώδικά του αφού πρόκειται για ένα αρχείο python.
Ο χρήστης δύναται κατά την χρήση του SecDep (μέσω της εκτέλεσης του secdep.py)
να επιλέξει τις ενέργειες και τα χαρακτηριστικά που επιθυμεί για την εικονική
μηχανή του. Όλες οι παράμετροι είναι εύκολα κατανοητές και συνδυάζονται μεταξύ
τους για να επιτευχθεί το επιθυμητό αποτέλεσμα. Υποστηρίζει όλους τους
δημοφιλείς παρόχους νέφους και όλες τις καλές πρακτικές ενός εργαλείου γραμμής
εντολών, όπως ο έλεγχος σφαλμάτων κατά την εισαγωγή παραμέτρων. Επιπλέον,
μπορεί εύκολα να επεκταθεί η χρήση του, είτε εισάγοντας έτοιμες εντολές σε
αρχεία bash είτε προσθέτοντας νέες ενέργειες στον κώδικά του, αφού πρόκειται
για ένα αρχείο python.
\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{3.5cm}}
\textgreek{\begin{tabular}{||C|C|C|C||}
\hline
Κριτήρια & Terraform & Libcloud CLI & SecDep \\ [0.5ex]
\hline\hline
Ευελιξία κατά την χρήση &
Όλες οι προδιαγραφές δηλώνονται σε αρχείο κειμένου. &
Οι παράμετροι επιλέγονται κατά την δημιουργία της εντολής. &
Οι παράμετροι επιλέγονται κατά την δημιουργία της εντολής. \\
\hline
Ευκολία χρήσης &
Κάθε αλλαγή απαιτεί τροποποίηση του αρχείου προδιαγραφών. &
Οι παράμετροι είναι εύκολες στην κατανόηση και την χρήση. &
Οι παράμετροι είναι εύκολες στην κατανόηση και την χρήση. \\
\hline
Εύρος υποστήριξης παρόχων &
Όλοι οι μεγάλοι και μικροί πάροχοι υποστηρίζονται. &
Μονάχα ένας πάροχος υποστηρίζεται. &
Υποστηρίζονται όλοι οι μεγάλοι πάροχοι. \\
\hline
Επεκτασιμότητα &
Λόγω της αρχιτεκτονικής του είναι δυσκολότερη η επέκτασή του. &
Επεκτείνεται εύκολα με τροποποίηση του εκτελέσιμου αρχείου. &
Επεκτείνεται εύκολα με τροποποίηση του εκτελέσιμου αρχείου. \\
\hline
\end{tabular}}
\label{table:vmCreationTools}
\renewcommand{\arraystretch}{1}
\end{table}
\end{savenotes}
\section{Αυτοματοποίηση σκλήρυνσης εικονικών μηχανών}
@@ -148,21 +213,28 @@
\item \textbf{Ευκολία κατά την χρήση}:
Το εργαλείο πρέπει να μπορεί να χρησιμοποιηθεί εύκολα από έναν χρήστη.
Ιδανικά να αρκεί η εκτέλεσή του σε μια εικονική μηχανή χωρίς την ανάγκη
εγκατάστασης εξαρτήσεων.
Ιδανικά, να αρκεί η εκτέλεσή του σε μια εικονική μηχανή χωρίς την
ανάγκη εγκατάστασης εξαρτήσεων.
\item \textbf{Εύρος σκλήρυνσης}:
Το εργαλείο πρέπει να μπορεί να σκληρύνει την εικονική μηχανή σε
ικανοποιητικό βαθμό και να μην περιορίζεται σε λίγες μονάχα επιλογές.
ικανοποιητικό βαθμό και να μην περιορίζεται σε λίγες μονάχα
δυνατότητες.
\item \textbf{Υποστήριξη διαρκούς σκλήρυνσης}:
Το εργαλείο πρέπει να παρέχει την δυνατότητα διαρκούς σκλήρυνσης,
προσφέροντας μηχανισμούς που θα εκτελούνται περιοδικά με σκοπό την
διατήρησή της.
\end{itemize}
\subsection{Εργαλεία σκλήρυνσης εικονικών μηχανών}
Τα παρακάτω εργαλεία θα συγκριθούν με το harden. Το δεύτερο εκτελέσιμο αρχείο
του εργαλείου SecDep, το οποίο μετά από επιλογή του χρήστη εκτελείται σε μια
εικονική μηχανή αφότου αυτή δημιουργηθεί.
Τα παρακάτω εργαλεία θα συγκριθούν με το harden. Με άλλα λόγια, το δεύτερο
εκτελέσιμο αρχείο του εργαλείου SecDep, το οποίο μετά από επιλογή του χρήστη
εκτελείται σε μια εικονική μηχανή αφότου αυτή δημιουργηθεί.
\begin{itemize}
@@ -174,21 +246,20 @@
τρόπος λειτουργίας του είναι η εκτέλεσή του ως χρήστης με διαχειριστικά
δικαιώματα στο σύστημα.
\clearpage
\item \textbf{nixarmor} \footfullcite{nixarmor}:
Ένα εργαλείο ανοιχτού κώδικα που στεγάζεται στο GitHub και αναπτύχθηκε
από τον Emir Ozer. Περιέχει διαφορετικά εκτελέσιμα αρχεία για την
σκλήρυνση διάφορων διανομών Linux, τα οποία μπορούν να εκτελεστούν ως
αυτόνομα προγράμματα από τον χρήστη.
Το nixarmor, αποτελεί και αυτό ένα εργαλείο ανοιχτού κώδικα, το οποίο
στεγάζεται στο GitHub και αναπτύχθηκε από τον Emir Ozer. Περιέχει
διαφορετικά εκτελέσιμα αρχεία για την σκλήρυνση διάφορων διανομών
Linux, τα οποία μπορούν να εκτελεστούν ως αυτόνομα προγράμματα από τον
χρήστη.
\end{itemize}
\subsection{Σύγκριση με το harden}
\subsection{Σύγκριση με τον τομέα σκλήρυνσης VM του harden}
Σχετικά με τα δηλωθέντα κριτήρια, το SecDep ικανοποιεί όλους τους παραπάνω
στόχους.
Σχετικά με τα δηλωθέντα κριτήρια, το SecDep (μέσω του harden) ικανοποιεί όλους
τους παραπάνω στόχους.
\begin{itemize}
@@ -198,65 +269,320 @@
και η ευκολία στην χρήση του το καθιστά ένα εργαλείο που μπορεί να
χρησιμοποιηθεί από έναν χρήστη με μικρή εμπειρία στον κλάδο. Παρ' όλα
αυτά, δεν υποστηρίζει πολλές διανομές και οι εκδόσεις των διανομών που
υποστηρίζονται μέσω αυτού είναι αρκετό καιρό ξεπερασμένες. Θα μπορούσε
υποστηρίζονται μέσω αυτού, είναι αρκετό καιρό ξεπερασμένες. Θα μπορούσε
να βελτιωθεί με μια ανανέωση του πηγαίου του κώδικα αλλά η ανάπτυξή του
φαίνεται να έχει σταματήσει το 2019.
\item \textbf{Σύγκριση με το nixarmor}:
Σε αντίθεση με το JShielder, το nixarmor για να χρησιμοποιηθεί με τον
ίδιο τρόπο που χρησιμοποιούνται τα υπόλοιπα εργαλεία θα πρέπει να
Σε αντίθεση με το JShielder, το nixarmor, για να χρησιμοποιηθεί με τον
ίδιο τρόπο που χρησιμοποιούνται τα υπόλοιπα εργαλεία, θα πρέπει να
επεκταθεί με την προσθήκη κώδικα που να του επιτρέπει να ξεχωρίζει ποιο
είναι το κατάλληλο εκτελέσιμο για την κάθε διανομή. Στην αντίθετη
περίπτωση, πάλι η χρήση του είναι εύκολη διότι ο χρήστης μπορεί να
επιλέξει και να εκτελέσει χειροκίνητα ένα από τα εκτελέσιμα αρχεία που
περιέχει. Η σκλήρυνση που παρέχει καλύπτει πολλούς τομείς μιας διανομής
και μπορεί εύκολα να προστεθούν επιπλέον συναρτήσεις στον κώδικά του.
Παρ' όλα αυτά, η ανάπτυξή του έχει παύσει από το 2015 και οι
υποστηριζόμενες διανομές του έχουν περιοριστεί σε μονάχα 4.
είναι το κατάλληλο εκτελέσιμο για την κάθε διανομή. Αν αγνοήσουμε το
μειονέκτημα αυτό, μπορούμε να χαρακτηρίσουμε τη χρήση του εύκολη για
χρήστες που έχουν την εμπειρία να διακρίνουν με κάποιο τρόπο τη
τρέχουσα διανομή και άρα είναι σε θέση να επιλέξουν και να εκτελέσουν
χειροκίνητα ένα από τα εκτελέσιμα αρχεία που το nixarmor περιέχει. Η
σκλήρυνση που παρέχει καλύπτει πολλούς τομείς μιας διανομής και μπορούν
εύκολα να προστεθούν επιπλέον συναρτήσεις στον κώδικά του. Παρ' όλα
αυτά, η ανάπτυξή του έχει παύσει από το 2015 και οι υποστηριζόμενες
διανομές του έχουν περιοριστεί σε μονάχα 4.
\end{itemize}
Συγκριτικά με τα παραπάνω εργαλεία, το harden υποστηρίζει την ικανότητα
αναγνώρισης της διανομής στην οποία εκτελείται και μπορεί δυναμικά να αλλοιώσει
την συμπεριφορά του αναλόγως. Οι υποστηριζόμενες διανομές είναι 6 και οι
λειτουργίες του αν και σύμφωνα με τα αποτελέσματα του Κεφαλαίου
αναγνώρισης της διανομής στην οποία εκτελείται και μπορεί δυναμικά να
διαμορφώσει την συμπεριφορά του αναλόγως. Οι υποστηριζόμενες διανομές είναι 6
και οι λειτουργίες του, αν και σύμφωνα με τα αποτελέσματα του Κεφαλαίου
\ref{experimentationANDresults} είναι ικανοποιητικές, θα μπορούσαν εύκολα να
επεκταθούν με την προσθήκη νέων συναρτήσεων. Επιπλέον, αυτό το ένα εκτελέσιμο,
παράγει κατά την εκτέλεσή του δύο ακόμα, τα οποία θα εκτελούνται περιοδικά με
σκοπό την αυτόματη ενημέρωση του συστήματος και το κλείσιμο αχρησιμοποίητων
θυρών.
επεκταθούν με την προσθήκη νέων συναρτήσεων. Επιπλέον, αν και το harden
αποτελεί ένα εκτελέσιμο, παράγει κατά την εκτέλεσή του δύο ακόμα εκτελέσιμα, τα
οποία μπορούν να εκτελούνται περιοδικά με σκοπό την αυτόματη ενημέρωση του
συστήματος και το κλείσιμο αχρησιμοποίητων θυρών. Αυτό σημαίνει πως η σκλήρυνση
μπορεί να είναι διαρκής και όχι στατική, εκτελούμενη μόνο μια φορά.
\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{3.5cm}}
\textgreek{\begin{tabular}{||C|C|C|C||}
\hline
Κριτήρια & JShielder & nixarmor & SecDep \\ [0.5ex]
\hline\hline
Εύρος υποστήριξης διανομών &
Υποστηρίζεται μια διανομή με δύο εκδόσεις. &
Υποστηρίζονται 4 διανομές. &
Υποστηρίζονται 6 διανομές με πολλαπλές εκδόσεις τους. \\
\hline
Ευκολία χρήσης &
Αρκεί η εκτέλεσή του με διαχειριστικά δικαιώματα. &
Αρκεί η εκτέλεση ενός εκτελέσιμου αρχείου του με διαχειριστικά δικαιώματα. &
Αρκεί η εκτέλεσή του με διαχειριστικά δικαιώματα. \\
\hline
Εύρος σκλήρυνσης &
Παρέχεται ικανοποιητικό εύρος σκλήρυνσης, καλύπτοντας πολλούς τομείς. &
Το εύρος σκλήρυνσης του συστήματος είναι μικρότερο από τα άλλα εργαλεία. &
Η σκλήρυνση του συστήματος επιτυγχάνεται σε ικανοποιητικό βαθμό. \\
\hline
Υποστήριξη διαρκούς σκλήρυνσης &
Υποστηρίζεται η διαρκής ενημέρωση πακέτων. &
Υποστηρίζονται οι διαρκείς ενημερώσεις ασφαλείας σε μια διανομή. &
Υποστηρίζεται η δημιουργία δύο περιοδικά εκτελέσιμων αρχείων για την ενημέρωση
των πακέτων κάθε υποστηριζόμενης διανομής και το κλείσιμο των αχρησιμοποίητων
θυρών. \\
\hline
\end{tabular}}
\label{table:vmHardeningTools}
\renewcommand{\arraystretch}{1}
\end{table}
\end{savenotes}
\clearpage
\section{Αυτοματοποίηση εγκατάστασης/σκλήρυνσης του Docker}
Για τα εργαλεία αυτοματοποίησης της διαδικασίας εγκατάστασης/σκλήρυνσης του
Docker, τα κριτήρια που θα πρέπει να ικανοποιούνται είναι τα παρακάτω:
\begin{itemize}
\item \textbf{Ευκολία κατά την χρήση}:
Ιδανικά, θα πρέπει να αρκεί η εκτέλεση του εργαλείου με διαχειριστικά
δικαιώματα, δίχως την ανάγκη περαιτέρω ενεργειών από τον χρήστη.
\item \textbf{Εύρος σκλήρυνσης}:
Αναμένεται η σκλήρυνση του Docker να επιτευχθεί σε ικανοποιητικό βαθμό,
πραγματοποιώντας τις απαραίτητες ρυθμίσεις στον δαίμονά του.
\item \textbf{Υποστήριξη διαρκούς σκλήρυνσης}:
Το εργαλείο πρέπει να πραγματοποιεί βήματα που θα διασφαλίσουν την
διαρκή σκλήρυνση του Docker ή/και των δοχείων του.
\item \textbf{Επεκτασιμότητα}:
Θα πρέπει να μπορεί ένας έμπειρος χρήστης να προσθέσει νέες λειτουργίες
με σκοπό την επέκταση των δυνατοτήτων του.
\end{itemize}
\subsection{Εργαλεία εγκατάστασης/σκλήρυνσης του Docker}
Μια από τις λειτουργίες του εκτελέσιμου harden πέρα από την σκλήρυνση του
συστήματος, είναι και η αυτόματη εγκατάσταση και σκλήρυνση του Docker. Αυτό
επιτυγχάνεται με την εγκατάσταση μιας τροποποιημένης έκδοσής του, η οποία
δύναται να εκτελεστεί από οποιονδήποτε χρήστη του συστήματος, δίχως την ανάγκη
διαχειριστικών δικαιωμάτων. Έπειτα πραγματοποιείται αντικατάσταση του αρχικού
container runtime (runC) με το runsc, από το gVisor. Αυτό, αναπτύχθηκε από την
Google και αποτελεί μια ασφαλέστερη επιλογή από το αρχικό, διότι περιορίζει τις
κλήσεις του συστήματος (system calls) στις άκρως απαραίτητες για την λειτουργία
του Docker. Ο συνδυασμός αυτών των δύο βημάτων έχει ήδη περιορίσει την
επιφάνεια επίθεσης σε περίπτωση απόδρασης από ένα δοχείο και έχει μειώσει την
πιθανότητα κάτι τέτοιο να συμβεί.
συστήματος, είναι και η αυτόματη εγκατάσταση και σκλήρυνση του Docker. Τα
εργαλεία που αποσκοπούν στην αυτοματοποίηση της διαδικασίας αυτής, τα οποία θα
συγκριθούν με το harden σε αυτόν τον τομέα, είναι τα παρακάτω:
Επιπροσθέτως, ρυθμίζεται ο δαίμονας του Docker ώστε να εκτελείται με μεγαλύτερη
ασφάλεια. Αυτό επιτυγχάνεται χρησιμοποιώντας παραμέτρους όπως
\textquote{no-new-privileges} για να μην μπορεί ένα δοχείο να λάβει περισσότερα
δικαιώματα στην συνέχεια της εκτέλεσής του, καθώς και ενεργοποιώντας τις
δυνατότητες του SELinux εάν αυτό υποστηρίζεται από την εκάστοτε υποκείμενη
διανομή του συστήματος. Τέλος, πραγματοποιείται εγκατάσταση της υπηρεσίας σε
μορφή δοχείου ονόματι \textquote{watchtower}, η οποία έχει ως στόχο την
αυτόματη ενημέρωση των δοχείων που εκτελούνται στο σύστημα.
\begin{itemize}
\subsection{Καινοτομία του SecDep}
\item \textbf{docker-rootless-setup} \footfullcite{docker-rootless-setup}:
Δεδομένου ότι πολλές από τις παραπάνω τεχνολογίες είναι σχετικά νέες, δεν
υπάρχουν στην αγορά εργαλεία που να έχουν ως κύριο στόχο την αυτόματη εφαρμογή
τους. Τα περισσότερα επικεντρώνονται στην σκλήρυνση των δοχείων και όχι του
δαίμονα, ενώ όσα επιχειρούν να σκληρύνουν τον δαίμονα έχουν να ανανεωθούν πολύ
προτού έρθουν στο προσκήνιο οι τεχνολογίες που χρησιμοποιεί το harden.
Επομένως, δεν θα υπήρχε δίκαιη σύγκριση με αυτά. Στον συγκεκριμένο τομέα, το
SecDep προσφέρει μια ολοκληρωμένη λύση, η οποία εκτελεί όλα τα παραπάνω βήματα
δίχως την ανάγκη αλληλεπίδρασης ή περαιτέρω ρυθμίσεων από τον χρήστη.
Το docker-rootless-setup είναι ένα εργαλείο ανοιχτού κώδικα, το οποίο
στεγάζεται στο GitHub. Θεωρείται πως ανήκει στην κατηγορία εργαλείων
σκλήρυνσης του Docker διότι αποσκοπεί στην αυτοματοποίηση της
εγκατάστασης του Rootless Docker. Το αποτέλεσμα μετά την εγκατάστασή
αυτού, είναι να μπορεί πλέον το Docker να λειτουργεί χωρίς την ανάγκη
διαχειριστικών δικαιωμάτων, αυξάνοντας έτσι την ασφάλεια του
συστήματος. Για την χρήση του αρκεί μονάχα η εκτέλεσή του στο σύστημα
που θέλουμε να εγκαταστήσουμε το Rootless Docker. Η επέκτασή του είναι
εύκολα εφικτή, μιας και πρόκειται για ένα εκτελέσιμο αρχείο bash.
\item \textbf{docksec} \footfullcite{docksec}:
Το docksec είναι ένα ακόμα εργαλείο ανοιχτού κώδικα, το οποίο επιχειρεί
να ασφαλίσει τον δαίμονα του Docker. Ο τρόπος με τον οποίο γίνεται
αυτό, είναι με την διασφάλιση ορισμένων ενεργειών που συστήνει το
docker-bench-security \footfullcite{docker-bench-security}. Το
docker-bench-security είναι ένα εργαλείο που στεγάζεται στο GitHub υπό
τον επίσημο λογαριασμό της ομάδας ανάπτυξης του Docker. Χρησιμοποιείται
για τον έλεγχο των ρυθμίσεων ασφαλείας μιας εγκατάστασης του Docker και
παρέχει οδηγίες για την βελτίωσή τους. Το docksec πραγματοποιεί
παρόμοιους ελέγχους για την ύπαρξη ορισμένων ρυθμίσεων που προτείνει το
docker-bench-security και προσφέρει την δυνατότητα αυτόματης εφαρμογής
τους. Αρκεί να εκτελεστεί στο σύστημα που είναι εγκατεστημένο το
Docker, ενώ η επέκταση των δυνατοτήτων του πραγματοποιείται το ίδιο
εύκολα με τα υπόλοιπα εργαλεία.
\end{itemize}
\subsection{Σύγκριση με τον τομέα σκλήρυνσης του Docker μέσω του harden}
Σε σχέση με τα κριτήρια που πρέπει να ικανοποιούνται, το harden μπορεί και πάλι
να τα καλύψει όλα.
\begin{itemize}
\item \textbf{Σύγκριση με docker-rootless-setup}:
Όπως το docker-rootless-setup, έτσι και το harden εκτελείται στο
σύστημα για το οποίο θέλει να πραγματοποιήσει την εγκατάσταση/σκλήρυνση
του Docker. Αυτό που συμβαίνει και στις δύο περιπτώσεις είναι η
εγκατάσταση μιας τροποποιημένης έκδοσης του Docker, η οποία δύναται να
εκτελεστεί από οποιονδήποτε χρήστη του συστήματος, δίχως την ανάγκη
διαχειριστικών δικαιωμάτων. Ωστόσο, το harden υποστηρίζει περισσότερες
διανομές από το docker-rootless-setup (που περιορίζεται μόνο σε
διανομές βασισμένες στο Debian) και παρέχει περισσότερες δυνατότητες
σκλήρυνσης. Πέρα από την εγκατάσταση του Rootless Docker, με το harden
πραγματοποιείται αντικατάσταση του αρχικού container runtime (runC) με
το runsc, από το gVisor. Αυτό, αναπτύχθηκε από την Google και αποτελεί
μια ασφαλέστερη επιλογή από το αρχικό (runC), διότι περιορίζει τις
κλήσεις του συστήματος (system calls) στις άκρως απαραίτητες για την
λειτουργία του Docker. Ο συνδυασμός αυτών των δύο βημάτων, όχι μόνο
περιορίζει την επιφάνεια επίθεσης σε περίπτωση απόδρασης από ένα
δοχείο, αλλά μειώνει και την πιθανότητα κάτι τέτοιο να συμβεί.
\item \textbf{Σύγκριση με docksec}:
Το docksec, ενώ επιτυγχάνει την σκλήρυνση του δαίμονα του Docker,
βασιζόμενο σε οδηγίες του docker-bench-security, περιορίζεται μονάχα σε
αυτό. Δεν πραγματοποιεί ούτε την εγκατάσταση του Rootless Docker, ούτε
την αντικατάσταση του runC με το runsc. Επιπλέον, δεν υποστηρίζει την
αυτόματη ενημέρωση των δοχείων που εκτελούνται στο σύστημα, όπως κάνει
το harden. Με την εκτέλεση του harden, πέρα από τα παραπάνω βήματα,
ρυθμίζεται ο δαίμονας του Docker ώστε να εκτελείται με μεγαλύτερη
ασφάλεια. Αυτό επιτυγχάνεται χρησιμοποιώντας παραμέτρους όπως
\textquote{no-new-privileges} για να μην μπορεί ένα δοχείο να λάβει
περισσότερα δικαιώματα στην συνέχεια της εκτέλεσής του, καθώς και
ενεργοποιώντας τις δυνατότητες του SELinux εάν αυτό υποστηρίζεται από
την εκάστοτε υποκείμενη διανομή του συστήματος. Τέλος, πραγματοποιείται
εγκατάσταση της υπηρεσίας σε μορφή δοχείου ονόματι
\textquote{watchtower}, η οποία έχει ως στόχο την αυτόματη ενημέρωση
των δοχείων που εκτελούνται στο σύστημα.
\end{itemize}
Επομένως, το harden παρέχει μια ολοκληρωμένη λύση για την εγκατάσταση και
σκλήρυνση του Docker, η οποία εκτελεί όλα τα παραπάνω βήματα δίχως την ανάγκη
αλληλεπίδρασης ή περαιτέρω ρυθμίσεων από τον χρήστη. Υποστηρίζει πολλές
διανομές για τις οποίες μπορεί να κατεβάσει τα απαραίτητα πακέτα για την
λειτουργία του Rootless Docker και πέρα από την εγκατάσταση αυτού, επιτυγχάνει
να σκληρύνει τον δαίμονα του Docker με κατάλληλες ρυθμίσεις και αντικατάσταση
του προκαθορισμένου container runtime.
\clearpage
\begin{savenotes} % by the package footnote because footfullcite did not work inside a tabular
\selectfont
\begin{table}[!ht]
\caption{Σύγκριση εργαλείων σκλήρυνσης του Docker}
\renewcommand{\arraystretch}{1.5}
\centering
\newcolumntype{C}{>{\centering\arraybackslash}m{3.5cm}}
\textgreek{\begin{tabular}{||C|C|C|C||}
\hline
Κριτήρια & docker-rootless-setup & docksec & SecDep \\ [0.5ex]
\hline\hline
Ευκολία χρήσης &
Αρκεί η εκτέλεσή του με διαχειριστικά δικαιώματα. &
Αρκεί να εκτελεστεί με διαχειριστικά δικαιώματα. &
Αρκεί η εκτέλεσή του με διαχειριστικά δικαιώματα. \\
\hline
Εύρος σκλήρυνσης &
Περιορίζεται στην εγκατάσταση του Rootless Docker. &
Περιορίζεται στη σκλήρυνση του Docker μέσω καλύτερων ρυθμίσεων. &
Καταφέρνει να ρυθμίσει καλύτερα τον δαίμονα, να εγκαταστήσει το Rootless Docker
και να αντικαταστήσει το προκαθορισμένο container runtime με ένα ασφαλέστερο.
\\
\hline
Υποστήριξη διαρκούς σκλήρυνσης &
Δεν λαμβάνονται βήματα για την διασφάλιση διαρκούς σκλήρυνσης. &
Μετά την εκτέλεσή του δεν πραγματοποιεί παραπάνω βήματα. &
Πέρα από την σκλήρυνση του Docker, εγκαθιστά και το watchtower για να
διασφαλίσει πως τα δοχεία του συστήματος θα ενημερώνονται διαρκώς. \\
\hline
Επεκτασιμότητα &
Αρκεί η προσθήκη νέων λειτουργιών στο εκτελέσιμο αρχείο του. &
Αρκεί η προσθήκη νέων λειτουργιών στο εκτελέσιμο αρχείο του. &
Αρκεί η προσθήκη νέων λειτουργιών στο εκτελέσιμο αρχείο του. \\
\hline
\end{tabular}}
\label{table:dockerHardeningTools}
\renewcommand{\arraystretch}{1}
\end{table}
\end{savenotes}
\section{Συμπεράσματα συγκρίσεων}
Μετά από τις συγκρίσεις του SecDep με τα προαναφερθέντα εργαλεία, ακολουθώντας
τα κριτήρια που έχουν οριστεί για τον κύριο σκοπό του καθενός, μπορούμε να
συμπεράνουμε πως το SecDep όχι μόνο υπερτερεί σε σχέση με τα υπόλοιπα, αλλά
προσφέρει μια ολοκληρωμένη λύση με τις δυνατότητες όλων των παραπάνω. Παρέχει
δηλαδή, λειτουργίες αυτοματοποίησης για την δημιουργία και σκλήρυνση ενός
συστήματος νέφους, ειδικά ρυθμισμένο για την ασφαλή εκτέλεση εφαρμογών που
προσφέρονται σε μορφή δοχείων.
Στον τομέα της αυτοματοποίησης δημιουργίας εικονικών μηχανών, με την χρήση της
βιβλιοθήκης libcloud, προσφέρεται μια πληθώρα επιλογών για την χρήση νεφών όλων
των μεγάλων παρόχων νέφους. Υποστηρίζονται πολλές διανομές, διάφορα μεγέθη
εικονικών μηχανών και αρκετές τοποθεσίες. Επιπροσθέτως, ακολουθούνται όλες οι
ορθές πρακτικές εργαλείων γραμμής εντολών, όπως ο έλεγχος εγκυρότητας των
παραμέτρων και η ευκολία στην κατανόηση της σημασιολογίας και της χρήσης τους.
Τέλος, επιτρέπει και την αποδοτική διαχείριση όλων των εικονικών μηχανών που
δημιουργήθηκαν μέσω αυτού, κατά μήκος όλων των παρόχων νέφους που υποστηρίζει.
Σχετικά με την σκλήρυνση των εικονικών μηχανών, το SecDep υποστηρίζει πολλές
διανομές, σκληραίνει τα συστήματα σε ικανοποιητικό βαθμό και επιπρόσθετα,
προσφέρει μηχανισμούς για την υποστήριξη διαρκούς σκλήρυνσης.
Για την σκλήρυνση του Docker, δεδομένου ότι πολλές από τις τεχνολογίες που
χρησιμοποιεί είναι σχετικά νέες, δεν υπάρχουν στην αγορά εργαλεία που να έχουν
ως κύριο στόχο την αυτόματη εφαρμογή τους. Τα περισσότερα επικεντρώνονται στην
σκλήρυνση των δοχείων και όχι του δαίμονα, ενώ όσα επιχειρούν να σκληρύνουν τον
δαίμονα έχουν να ανανεωθούν πολύ προτού έρθουν στο προσκήνιο οι τεχνολογίες που
χρησιμοποιεί το harden.
Το SecDep παρέχει ένα σύνολο δυνατοτήτων που δεν προσφέρονται από κανένα άλλο
αυτοτελές εργαλείο και επιτυγχάνει τον σκοπό του με ευκολία και
αποτελεσματικότητα. Για την απόκτηση ίδιου επιπέδου λειτουργιών και
αποτελεσμάτων, θα απαιτούνταν η εκτέλεση και η τροποποίηση πολλών ξεχωριστών
εργαλείων. Επομένως, μπορεί να θεωρηθεί πως είναι ένα πιο ολοκληρωμένο εργαλείο
που όμοιό του δεν υπάρχει ακόμα διαθέσιμο.

View File

@@ -2,114 +2,26 @@
\noindent Στην παρούσα ενότητα θα αναλυθούν οι τεχνολογίες που χρησιμοποιήθηκαν
για την υλοποίηση του συστήματος, οι αποφάσεις που πάρθηκαν κατά την ανάπτυξή
του και οι σχεδιαστικές επιλογές που έγιναν. Επίσης, θα πραγματοποιηθεί
απεικόνιση των συσχετίσεων μεταξύ των συστατικών του συστήματος και θα αναλυθεί
περαιτέρω η λειτουργία τους.
του και οι σχεδιαστικές επιλογές που πραγματοποιήθηκαν. Επίσης, θα αναλυθεί η
αρχιτεκτονική του συστήματος και θα επεξηγηθούν οι λειτουργίες των συστατικών
του.
\section{Αποφάσεις που πάρθηκαν κατά την ανάπτυξη} \label{developmentDecisions}
\section{Μοντέλο ανάπτυξης}
Κατά την ανάπτυξη του συστήματος, προκειμένου να επιτευχθούν οι στόχοι που
θέσαμε στην Ενότητα \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 παρόχους. Κατά την σελίδα τεκμηρίωσης
\cite{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,
είναι διότι ο αριθμός των διαθέσιμων διανομών και εκδόσεών τους είναι
υπερβολικά μεγάλος και κατά την εκτέλεση της λειτουργίας δημιουργίας λίστας
τους ή κατά τον έλεγχο της ορθότητας δεδομένων που εισάγει ο χρήστης, το
πρόγραμμα θα καθυστερούσε σε τεράστιο βαθμό να ολοκληρωθεί.
\clearpage
Για την ανάπτυξη του SecDep, ακολουθήθηκε το μοντέλο καταρράκτη. Στο μοντέλο
αυτό, κάθε στάδιο της δραστηριότητας ανάπτυξης εκτελείται σειριακά. Δηλαδή, για
την μετάβαση σε κάθε επόμενο στάδιο, απαιτείται η επιτυχής ολοκλήρωση του
προηγούμενου. Έτσι και εδώ, ξεκινάμε με την ανάλυση απαιτήσεων, έπειτα
προχωράμε στη σχεδίαση του συστήματος και τέλος φτάνουμε στην υλοποίησή του. Η
επίδειξη της τελικής μορφής του εργαλείου καλύπτεται στο Κεφάλαιο
\ref{installationANDShowcase}, ενώ η αποτίμηση των αποτελεσμάτων εκτέλεσής του,
στο Κεφάλαιο \ref{experimentationANDresults}.
\section{Απαιτήσεις από το εργαλείο} \label{toolRequirements}
Κατά την ανάπτυξη του εργαλείου, έγινε μια προσπάθεια να καλυφθούν ορισμένες
βασικές απαιτήσεις που θα έπρεπε να ικανοποιεί. Όπως όλα τα εργαλεία, έτσι και
αυτό έχει έναν σκοπό να εκπληρώσει. Ο σκοπός αυτός είναι η διευκόλυνση του
βασικές απαιτήσεις που θα έπρεπε αυτό να ικανοποιεί. Όπως όλα τα εργαλεία, έτσι
και αυτό έχει έναν σκοπό να εκπληρώσει. Ο σκοπός αυτός είναι η διευκόλυνση του
χρήστη ή ενός οργανισμού, στην εγκατάσταση και διαμόρφωση με αυτοματοποιημένο
τρόπο ενός ασφαλούς, κατανεμημένου περιβάλλοντος για την εγκατάσταση και
λειτουργία μιας εφαρμογής μικρο-υπηρεσιών. Για να γίνει αυτό πραγματικότητα,
@@ -119,86 +31,87 @@ Python, πάρθηκε επίσης η απόφαση για την υποστή
\begin{itemize}
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την χρήση των 3 μεγαλύτερων
ονομάτων στον κλάδο της νεφο-υπολογιστικής}
\item Το εργαλείο πρέπει για κάθε πάροχο να υποστηρίζει την λειτουργία
εμφάνισης λίστας των διαθέσιμων μεγεθών εικονικής μηχανής
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την χρήση των 6
δημοφιλέστερων διανομών για περιβάλλον διακομιστή}
\item Το εργαλείο πρέπει για κάθε πάροχο να υποστηρίζει την λειτουργία
εμφάνισης λίστας των διαθέσιμων τοποθεσιών
\item \textbf{Το εργαλείο πρέπει να λειτουργεί μέσω της γραμμής εντολών
ώστε να μπορεί να αυτοματοποιηθεί περαιτέρω η εκτέλεση των εντολών του}
\item Το εργαλείο πρέπει για κάθε πάροχο να υποστηρίζει την λειτουργία
εμφάνισης λίστας των διαθέσιμων διανομών
\item \textbf{Το εργαλείο πρέπει για κάθε πάροχο να υποστηρίζει την
λειτουργία εμφάνισης λίστας των διαθέσιμων μεγεθών εικονικής μηχανής}
\item Το εργαλείο πρέπει για κάθε εντολή που επιδέχεται παραμέτρους, να
ρωτάει τον χρήστη για κάθε παράμετρο που δεν δόθηκε
\item \textbf{Το εργαλείο πρέπει για κάθε πάροχο να υποστηρίζει την
λειτουργία εμφάνισης λίστας των διαθέσιμων τοποθεσιών}
\item Το εργαλείο πρέπει να ελέγχει την εγκυρότητα κάθε παραμέτρου που
δίνεται από τον χρήστη
\item \textbf{Το εργαλείο πρέπει για κάθε πάροχο να υποστηρίζει την
λειτουργία εμφάνισης λίστας των διαθέσιμων διανομών}
\item Το εργαλείο πρέπει να υποστηρίζει την λειτουργία δημιουργίας
εικονικής μηχανής
\item \textbf{Το εργαλείο πρέπει για κάθε εντολή που επιδέχεται
παραμέτρους, να ρωτάει τον χρήστη για κάθε παράμετρο που δεν δόθηκε}
\item Το εργαλείο πρέπει να υποστηρίζει την λειτουργία παύσης εικονικής
μηχανής
\item \textbf{Το εργαλείο πρέπει να ελέγχει την εγκυρότητα κάθε παραμέτρου
που δίνεται από τον χρήστη}
\item Το εργαλείο πρέπει να υποστηρίζει την λειτουργία εκκίνησης εικονικής
μηχανής
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την λειτουργία δημιουργίας
εικονικής μηχανής}
\item Το εργαλείο πρέπει να υποστηρίζει την λειτουργία επανεκκίνησης
εικονικής μηχανής
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την λειτουργία παύσης
εικονικής μηχανής}
\item Το εργαλείο πρέπει να υποστηρίζει την λειτουργία διαγραφής εικονικής
μηχανής
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την λειτουργία εκκίνησης
εικονικής μηχανής}
\item Το εργαλείο πρέπει να υποστηρίζει την σύνδεση με SSH ακόμα και χωρίς
να διαθέτει ο χρήστης πελάτη SSH
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την λειτουργία
επανεκκίνησης εικονικής μηχανής}
\item Το εργαλείο πρέπει να υποστηρίζει την λειτουργία εμφάνισης όλων των
εικονικών μηχανών που διαχειρίζεται
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την λειτουργία διαγραφής
εικονικής μηχανής}
\item Το εργαλείο πρέπει να εμφανίζει μηνύματα λάθους σε περίπτωση που κάτι
πάει στραβά κατά την εκτέλεση
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την σύνδεση με SSH ακόμα
και χωρίς να διαθέτει ο χρήστης πελάτη SSH}
\item Το εργαλείο πρέπει να υποστηρίζει την διαδραστική διαμόρφωση του
αρχείου ρυθμίσεών του
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την λειτουργία εμφάνισης
όλων των εικονικών μηχανών που διαχειρίζεται}
\item Το εργαλείο πρέπει να υποστηρίζει την εκτέλεση εξωτερικού εκτελέσιμου
αρχείου στις εικονικές μηχανές με σκοπό την σκλήρυνσή τους
\item \textbf{Το εργαλείο πρέπει να εμφανίζει μηνύματα λάθους σε περίπτωση
που κάτι πάει στραβά κατά την εκτέλεση}
\item Το εργαλείο πρέπει να εγκαθιστά και να σκληραίνει και το Docker πέρα
από το λειτουργικό σύστημα
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την διαδραστική διαμόρφωση
του αρχείου ρυθμίσεων του}
\item Το εργαλείο θα ενημερώνει περιοδικά τα πακέτα της εικονικής μηχανής
και θα κλείνει αχρησιμοποίητες θύρες
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την εκτέλεση εξωτερικού
εκτελέσιμου αρχείου στις εικονικές μηχανές με σκοπό την σκλήρυνσή τους}
\item Το εργαλείο πρέπει να υποστηρίζει την εγκατάσταση δοχείων στις
εικονικές μηχανές που δημιουργεί, κατά την διάρκεια της σκλήρυνσής
τους, μέσω ενός αρχείου docker-compose.yml που θα βρίσκεται στον ίδιο
φάκελο με το εκτελέσιμο αρχείο του
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την εγκατάσταση δοχείων
στις εικονικές μηχανές που δημιουργεί, κατά την διάρκεια της
σκλήρυνσής τους, μέσω ενός αρχείου docker-compose.yml που θα
βρίσκεται στον ίδιο φάκελο με το εκτελέσιμο αρχείο του}
\item Το εργαλείο πρέπει να μπορεί να εγκαθιστά δοχεία στις εικονικές
μηχανές, κατά την διάρκεια σκλήρυνσής τους, μέσω παραμέτρων που έχει
εισάγει ο χρήστης
\item \textbf{Το εργαλείο πρέπει να διαθέτει λειτουργία εμφάνισης όλων των
διαθέσιμων εντολών του}
\item Το εργαλείο πρέπει να διαθέτει λειτουργία εμφάνισης όλων των
διαθέσιμων εντολών του
\item \textbf{Το εργαλείο πρέπει να διαθέτει λειτουργία εμφάνισης
συμπλήρωσης εντολών και για τα 3 πιο δημοφιλή κελύφη εντολών}
\item Το εργαλείο πρέπει να διαθέτει λειτουργία εμφάνισης συμπλήρωσης
εντολών και για τα 3 πιο δημοφιλή κελύφη εντολών (Bash, Zsh, tcsh)
\item \textbf{Το εργαλείο πρέπει να διαθέτει λειτουργία εμφάνισης της
έκδοσης του}
\item Το εργαλείο πρέπει να διαθέτει λειτουργία εμφάνισης της έκδοσής του
\item \textbf{Το εργαλείο πρέπει να διαθέτει παράμετρο για την προσπέραση
του βήματος επιβεβαίωσης κατά την δημιουργία εικονικών μηχανών}
\item Το εργαλείο πρέπει να διαθέτει παράμετρο για την προσπέραση
(bypassing) του βήματος επιβεβαίωσης κατά την δημιουργία εικονικών
μηχανών
\item \textbf{Το εργαλείο πρέπει να διαθέτει μηχανισμό συγκεκριμενοποίησης
περιοχής για τον πάροχο AWS}
\item Το εργαλείο πρέπει να διαθέτει μηχανισμό συγκεκριμενοποίησης περιοχής
για τον πάροχο AWS
\item \textbf{Το εργαλείο πρέπει να διαθέτει μηχανισμό επιλογής θύρας για
την λειτουργία σύνδεσης μέσω SSH}
\item Το εργαλείο πρέπει να διαθέτει μηχανισμό επιλογής θύρας για την
λειτουργία σύνδεσης μέσω SSH
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την αρχικοποίηση μονάχα
ενός παρόχου δίχως την συμπλήρωση κενών πεδίων για τους υπόλοιπους
από τον χρήστη}
\item Το εργαλείο πρέπει να υποστηρίζει την αρχικοποίηση μονάχα ενός
παρόχου δίχως την συμπλήρωση κενών πεδίων για τους υπόλοιπους από τον
χρήστη
\end{itemize}
@@ -206,36 +119,39 @@ Python, πάρθηκε επίσης η απόφαση για την υποστή
\begin{itemize}
\item \textbf{Το εργαλείο πρέπει να είναι εύκολο στην χρήση για έναν χρήστη
που έχει χρησιμοποιήσει προγράμματα γραμμής εντολών στο παρελθόν}
\item Το εργαλείο πρέπει να υποστηρίζει την χρήση των 3 μεγαλύτερων
ονομάτων στον κλάδο της νεφο-υπολογιστικής (Amazon, Google, Microsoft)
\item \textbf{Το εργαλείο πρέπει να δημιουργεί ξεχωριστό αρχείο για τις
ρυθμίσεις του στον ίδιο φάκελο που βρίσκεται και το εκτελέσιμο αρχείο
του}
\item Το εργαλείο πρέπει να υποστηρίζει την χρήση των 6 δημοφιλέστερων
διανομών για περιβάλλον διακομιστή (Debian, Ubuntu, Red Hat Enterprise
Linux, Fedora, CentOS, openSUSE Leap)
\item \textbf{Το εργαλείο πρέπει να κρατάει αρχείο των διευθύνσεων IP των
εικονικών μηχανών που δημιουργεί ώστε να μπορούν να διαμορφωθούν
περαιτέρω εάν ο χρήστης επιθυμεί να χρησιμοποιήσει άλλα προγράμματα
όπως το Ansible}
\item Το εργαλείο πρέπει να λειτουργεί μέσω της γραμμής εντολών ώστε να
μπορεί να αυτοματοποιηθεί περαιτέρω η εκτέλεση των εντολών του
\item \textbf{Το εργαλείο πρέπει να διαθέτει ένα μοτίβο εντολών που να
μπορεί ο χρήστης να καταλαβαίνει και να διαμορφώνει ανάλογα με τις
ανάγκες του}
\item Το εργαλείο πρέπει να είναι εύκολο στην χρήση για έναν χρήστη που
έχει χρησιμοποιήσει προγράμματα γραμμής εντολών στο παρελθόν
\item \textbf{Το εργαλείο πρέπει να δημιουργεί κλειδιά SSH σε περίπτωση που
δεν υπάρχουν, στον ίδιο φάκελο με το εκτελέσιμο αρχείο του}
\item Το εργαλείο θα πρέπει να είναι αξιόπιστο, δηλαδή κάθε εκτέλεση να
επιφέρει τα αναμενόμενα αποτελέσματα
\item \textbf{Το δεύτερο εκτελέσιμο αρχείο του εργαλείου πρέπει να
εγκαθιστά και να σκληραίνει και το Docker πέρα από το λειτουργικό
σύστημα}
\item Το εργαλείο πρέπει να δημιουργεί ξεχωριστό αρχείο για τις ρυθμίσεις
του στον ίδιο φάκελο που βρίσκεται και το εκτελέσιμο αρχείο του
\item \textbf{Το δεύτερο εκτελέσιμο αρχείο του εργαλείου πρέπει να
δημιουργεί στην εικονική μηχανή δύο επιπλέον εκτελέσιμα αρχεία για
περιοδική ενημέρωση των πακέτων και κλείσιμο αχρησιμοποίητων θυρών}
\item Το εργαλείο πρέπει να κρατάει αρχείο των διευθύνσεων IP των εικονικών
μηχανών που δημιουργεί ώστε να μπορούν να διαμορφωθούν περαιτέρω εάν ο
χρήστης επιθυμεί να χρησιμοποιήσει άλλα προγράμματα, όπως το Ansible
\item \textbf{Το δεύτερο εκτελέσιμο αρχείο του εργαλείου πρέπει να
εγκαθιστά προγράμματα για την περαιτέρω σκλήρυνση του Docker και την
διευκόλυνση του χρήστη κατά την εγκατάσταση δοχείων}
\item Το εργαλείο πρέπει να διαθέτει ένα μοτίβο εντολών που να μπορεί ο
χρήστης να καταλαβαίνει και να διαμορφώνει ανάλογα με τις ανάγκες του
\item Το εργαλείο πρέπει να δημιουργεί κλειδιά SSH σε περίπτωση που δεν
υπάρχουν, στον ίδιο φάκελο με το εκτελέσιμο αρχείο του
\item Το εργαλείο θα πρέπει να εγκαθιστά τις υπηρεσίες watchtower και
portainer \footfullcite{portainer} για την περαιτέρω σκλήρυνση του
Docker και την διευκόλυνση του χρήστη κατά την εγκατάσταση δοχείων
αντίστοιχα
\end{itemize}
@@ -251,14 +167,15 @@ Python, πάρθηκε επίσης η απόφαση για την υποστή
\ref{fig:useCaseDiagram} δημιουργήθηκε με την βοήθεια του εργαλείου
\textquote{yuml} \footfullcite{yuml}. Επιπλέον, με το εργαλείο
\textquote{mermaid} \footfullcite{mermaid}, δημιουργήθηκε ένα διάγραμμα ροής
για το SecDep που απεικονίζεται στο Σχήμα \ref{fig:flowchartDiagram}. Το
διάγραμμα ροής, απεικονίζει την ροή των εντολών που μπορεί να επιλεγούν από τον
χρήστη κατά την εκτέλεση του προγράμματος.
(flowchart) για το SecDep που απεικονίζεται στο Σχήμα
\ref{fig:flowchartDiagram}. Το διάγραμμα ροής αυτό, απεικονίζει την ροή των
εντολών που μπορεί να επιλεγούν από τον χρήστη κατά την εκτέλεση του
προγράμματος.
\begin{center}
\begin{figure}[!ht]
\centering
\includegraphics[width = 0.9\textwidth]{Figures/Diagrams/secdep-use-case-diagram.jpg}
\includegraphics[width = 0.8\textwidth]{Figures/Diagrams/secdep-use-case-diagram.jpg}
\captionof{figure}{Διάγραμμα περιπτώσεων χρήσης}
\label{fig:useCaseDiagram}
\end{figure}
@@ -275,8 +192,8 @@ Python, πάρθηκε επίσης η απόφαση για την υποστή
\begin{center}
\begin{figure}[!ht]
\centering
\includegraphics[width = 1.0\textwidth]{Figures/Diagrams/secdep-flowchart-diagram.png}
\captionof{figure}{Διάγραμμα ροής}
\includegraphics[width = 1.4\textwidth]{Figures/Diagrams/flowchart/1secdep-flowchart-diagram.png}
\captionof{figure}{Διάγραμμα ροής - Γενικό}
\label{fig:flowchartDiagram}
\end{figure}
\vspace*{-30pt}
@@ -284,20 +201,140 @@ Python, πάρθηκε επίσης η απόφαση για την υποστή
\end{landscape}
\begin{landscape}
\thispagestyle{empty}
\noindent Λόγω της πολυπλοκότητας του Σχήματος \ref{fig:flowchartDiagram}, αυτό
διασπάστηκε σε 6 ξεχωριστά διαγράμματα ροής, για τις εξής λειτουργίες του
SecDep:
\begin{itemize}
\item Εκτέλεση απλών μεθόδων
\begin{center}
\begin{figure}[!ht]
\centering
\includegraphics[width = 1.3\textwidth]{Figures/Diagrams/flowchart/2secdep-flowchart-diagramSimpleFunctions.png}
\captionof{figure}{Διάγραμμα ροής - Απλές λειτουργίες}
\label{fig:flowchartDiagram1}
\end{figure}
\vspace*{-30pt}
\end{center}
\end{itemize}
\end{landscape}
\clearpage
\begin{itemize}
\item Απόκτηση λίστας εικονικών μηχανών
\begin{center}
\begin{figure}[!ht]
\centering
\includegraphics[width = 0.5\textwidth]{Figures/Diagrams/flowchart/3secdep-flowchart-ListVMs.png}
\captionof{figure}{Διάγραμμα ροής - Λίστα εικονικών μηχανών}
\label{fig:flowchartDiagram2}
\end{figure}
\vspace*{-30pt}
\end{center}
\end{itemize}
\clearpage
\begin{itemize}
\item Εκτέλεση ενέργειας σε εικονική μηχανή
\begin{center}
\begin{figure}[!ht]
\centering
\includegraphics[width = 0.55\textwidth]{Figures/Diagrams/flowchart/4secdep-flowchart-ActionOnVM.png}
\captionof{figure}{Διάγραμμα ροής - Ενέργεια σε εικονική μηχανή}
\label{fig:flowchartDiagram3}
\end{figure}
\vspace*{-30pt}
\end{center}
\end{itemize}
\clearpage
\begin{itemize}
\item Σύνδεση SSH σε εικονική μηχανή
\begin{center}
\begin{figure}[!ht]
\centering
\includegraphics[width = 0.6\textwidth]{Figures/Diagrams/flowchart/5secdep-flowchart-SSHToVM.png}
\captionof{figure}{Διάγραμμα ροής - Σύνδεση SSH σε εικονική μηχανή}
\label{fig:flowchartDiagram4}
\end{figure}
\vspace*{-30pt}
\end{center}
\end{itemize}
\clearpage
\begin{itemize}
\item Απόκτηση πληροφοριών πόρων παρόχου
\begin{center}
\begin{figure}[!ht]
\centering
\includegraphics[width = 0.35\textwidth]{Figures/Diagrams/flowchart/6secdep-flowchart-ResourceInfo.png}
\captionof{figure}{Διάγραμμα ροής - Απόκτηση πληροφοριών πόρων παρόχου}
\label{fig:flowchartDiagram5}
\end{figure}
\vspace*{-30pt}
\end{center}
\end{itemize}
\clearpage
\begin{landscape}
\thispagestyle{empty}
\begin{itemize}
\item Δημιουργία εικονικής μηχανής
\begin{center}
\begin{figure}[!ht]
\centering
\includegraphics[width = 0.7\textwidth]{Figures/Diagrams/flowchart/7secdep-flowchart-CreateVM.png}
\captionof{figure}{Διάγραμμα ροής - Δημιουργία εικονικής μηχανής}
\label{fig:flowchartDiagram6}
\end{figure}
\vspace*{-30pt}
\end{center}
\end{itemize}
\end{landscape}
\clearpage
Ουσιαστικά, κατά την πραγματική χρήση του SecDep υπάρχουν πάντοτε δύο οντότητες
που αλληλεπιδρούν μεταξύ τους. Ο χρήστης και ο πάροχος νέφους. Ο χρήστης μπορεί
να ζητήσει πληροφορίες για διαθέσιμους πόρους όπως οι εικονικές του μηχανές ή
τα συστατικά που έχει στην διάθεσή του για την δημιουργία τους όπως οι
να ζητήσει πληροφορίες για διαθέσιμους πόρους, όπως οι εικονικές του μηχανές, ή
τα συστατικά που έχει στην διάθεσή του για την δημιουργία τους, όπως οι
διανομές, τα μεγέθη και οι τοποθεσίες τους. Αυτή η αλληλεπίδραση μεταξύ του
χρήστη και του παρόχου νέφους, απεικονίζεται στο Σχήμα
χρήστη και του παρόχου νέφους, απεικονίζεται καλύτερα στο Σχήμα
\ref{fig:sequenceDiagram}, το οποίο δημιουργήθηκε με το εργαλείο
\textquote{mermaid}.
\textquote{mermaid}. Πρόκειται για ένα διάγραμμα ακολουθίας (sequence diagram),
στο οποίο απεικονίζεται η αλληλεπίδραση του χρήστη με τον πάροχο νέφους μέσω
του SecDep, κατά την δημιουργία μιας εικονικής μηχανής.
\begin{center}
\begin{figure}[!ht]
\centering
\includegraphics[width = .9\textwidth]{Figures/Diagrams/secdep-sequence-diagram.png}
\captionof{figure}{Διάγραμμα αλληλεπίδρασης χρήστη - παρόχου νέφους}
\includegraphics[width = 1\textwidth]{Figures/Diagrams/secdep-sequence-diagram.png}
\captionof{figure}{Διάγραμμα ακολουθίας για την δημιουργία εικονικής μηχανής}
\label{fig:sequenceDiagram}
\end{figure}
\vspace*{-30pt}
@@ -366,8 +403,169 @@ pydeps -T png --cluster --include-missing --max-bacon=1 --noshow --reverse --ran
\vspace*{-30pt}
\end{center}
\noindent Οι παραπάνω βιβλιοθήκες, αποτελούν τους πυλώνες του SecDep. Κάθε μια
από αυτές, εξειδικεύεται σε διαφορετικούς τομείς και χρησιμοποιείται για την
κάλυψη διαφόρων λειτουργιών του SecDep. Με την σειρά που απεικονίζονται, έχουν
τις εξής αρμοδιότητες:
\begin{itemize}
\item \textbf{azure}:
Η βιβλιοθήκη της azure, χρησιμοποιείται για την επικοινωνία και
αυθεντικοποίηση με τον πάροχο νέφους Azure. Ο λόγος που χρειάζεται να
χρησιμοποιηθεί συνδυαστικά με την libcloud, είναι για επιτύχουμε την
ομοιόμορφη συμπεριφορά του εργαλείου κατά μήκος όλων των παρόχων που
αυτό υποστηρίζει. Συγκεκριμένα, την χρειαζόμαστε για την επίτευξη των
λειτουργιών δημιουργίας Resource Group και Virtual Network, καθώς αυτές
λειτουργίες δεν υποστηρίζονται από την libcloud την παρούσα στιγμή.
\item \textbf{dotenv}:
Η βιβλιοθήκη dotenv \footfullcite{dotenv} χρησιμοποιείται για την
ανάγνωση αρχείων \textquote{.env}. Το SecDep κάνει χρήση ενός αρχείου
\textquote{.env}, στο οποίο δηλώνονται οι τιμές που χρειάζεται για την
αυθεντικοποίηση με τους παρόχους νέφους.
\item \textbf{libcloud}:
Η βιβλιοθήκη libcloud είναι υπεύθυνη για την αυθεντικοποίηση με τους
παρόχους νέφους, με σκοπό την εκτέλεση διαφόρων λειτουργιών σχετικά με
τις εικονικές μηχανές του καθενός. Μας επιτρέπει να δημιουργούμε και να
διαχειριζόμαστε εικονικές μηχανές, καθώς και να λαμβάνουμε πληροφορίες
για πόρους του κάθε παρόχου νέφους.
\item \textbf{rich}:
Η βιβλιοθήκη rich \footfullcite{rich} εμπλουτίζει την εμφάνιση του
SecDep. Βοηθάει στην καλύτερη διαμόρφωση της εμφάνισης των
αποτελεσμάτων των εντολών του, με σκοπό την θετική αύξηση της εμπειρίας
χρήσης του εργαλείου.
\item \textbf{shtab}:
Η βιβλιοθήκη shtab \footfullcite{shtab} χρησιμοποιείται για την
δημιουργία συμπληρώσεων κελύφους. Αυτό αποτελεί βασικό χαρακτηριστικό
για την ευχρηστία του εργαλείου, καθώς διευκολύνει τον χρήστη στην
εύρεση των διαθέσιμων παραμέτρων και στην ταχύτερη σύνταξη εντολών.
\item \textbf{paramiko}:
Η βιβλιοθήκη paramiko \footfullcite{paramiko} αποτελεί εξάρτηση της
libcloud για την επικοινωνία με τις εικονικές μηχανές, κάνοντας χρήση
του πρωτοκόλλου SSH. Το SecDep, χρησιμοποιεί την βιβλιοθήκη αυτή για
την διαδραστική σύνδεση σε εικονικές μηχανές μέσω SSH σε περίπτωση
απουσίας πελάτη που να προσφέρει αυτή τη δυνατότητα. Επιπλέον,
χρησιμοποιείται για την δημιουργία κλειδιών SSH.
\end{itemize}
\clearpage
\section{Αποφάσεις που πάρθηκαν κατά την ανάπτυξη} \label{developmentDecisions}
Κατά την ανάπτυξη του συστήματος, προκειμένου να επιτευχθούν οι στόχοι που
θέσαμε στην Ενότητα \ref{overcomingDockerDisadvantages} και συγκεκριμένα για
την επικοινωνία και διασύνδεση με διάφορους παρόχους νέφους, επιλέχθηκε να
γίνει χρήση της βιβλιοθήκης libcloud \footfullcite{libcloud}. Μια από τις δύο
επιλογές βιβλιοθηκών της Apache \footfullcite{apache} για την επικοινωνία με
παρόχους νέφους στα πλαίσια της υλοποίησης multi-cloud εφαρμογών, πλατφορμών
και εργαλείων. Συγκριτικά με την βιβλιοθήκη jclouds \footfullcite{jclouds}, η
οποία σχεδιάστηκε για την γλώσσα Java \footfullcite{java}, η libcloud είναι πιο
απλή στην χρήση, αφού είναι σχεδιασμένη για την γλώσσα Python
\footfullcite{python}. Επιπροσθέτως, η libcloud είναι πιο διαδεδομένη, ενώ η
γλώσσα python αποτελεί μια πιο ευέλικτη επιλογή για τις ανάγκες της ανάπτυξης
του εργαλείου μας. Αυτό συμβαίνει διότι σε σχέση με την Java, η python είναι
απλούστερη στην σύνταξή της, προεγκατεστημένη σε πολλά λειτουργικά συστήματα
και διαθέτει πολλές επιβοηθητικές βιβλιοθήκες, επίσημες ή από τρίτους, οι
οποίες δύναται να εμπλουτίσουν τα προγράμματα σε python, με παραπάνω
λειτουργίες.
Η ανάγκη για μια βιβλιοθήκη που θα λειτουργεί ως μεσάζοντας μεταξύ του
εργαλείου και των παρόχων νέφους, οφείλεται στο γεγονός ότι οι πάροχοι νέφους
δεν διαθέτουν ένα κοινό API για την διαχείριση των υποδομών τους. Απεναντίας, ο
καθένας από αυτούς διαθέτει το δικό του API, το οποίο χρησιμοποιείται έμμεσα
μέσω του πίνακα ελέγχου του, που βρίσκεται στην ιστοσελίδα του, ενός δικού του
εργαλείου γραμμής εντολών, ή άμεσα μέσω της βιβλιοθήκης που παρέχει ο ίδιος. Η
libcloud αποτελεί μια προσπάθεια δημιουργίας ενός ενιαίου API, το οποίο
χρησιμοποιώντας τις ίδιες μεθόδους, επιχειρεί να προσκομίσει πανομοιότυπα
αποτελέσματα (πχ. δημιουργία εικονικής μηχανής με συγκεκριμένα χαρακτηριστικά)
ανεξαρτήτως του παρόχου νέφους που στοχεύει.
Παρ' όλη την προσπάθεια που καταβλήθηκε από την libcloud όμως, για την
ενοποίηση αυτή, οι διαφορές στους τρόπους λειτουργίας του κάθε παρόχου αρχίζουν
να εμφανίζονται σύντομα κατά την ανάπτυξη. Για το εργαλείο SecDep που προτείνει
η παρούσα διπλωματική εργασία, χρειάζεται να γίνει χρήση των λειτουργιών
\textquote{Compute} της βιβλιοθήκης libcloud. Στην αρχική σελίδα της
βιβλιοθήκης, αναφέρεται υποστήριξη για πάνω από 50 παρόχους. Κατά την σελίδα
τεκμηρίωσης \cite{libcloudProviders} για τις λειτουργίες \textquote{Compute},
αναφέρονται 48 πάροχοι σε έναν πίνακα, ο οποίος αναγράφει την υποστήριξη ή
απουσία αυτής, για διάφορες λειτουργίες/μεθόδους (διαχείρισης) εικονικών
μηχανών. Στις λειτουργίες αυτές περιλαμβάνονται η δημιουργία εικονικών μηχανών,
η εκκίνηση, η παύση, η διαγραφή τους και εν γένει όσες λειτουργίες είναι
απαραίτητες για την ολοκληρωμένη λειτουργία του προτεινούμενού μας εργαλείου.
Από αυτούς τους 48 παρόχους, οι 25 υποστηρίζουν και τις 9 λειτουργίες
διαχείρισης. Ωστόσο, από αυτούς τους 25 έπρεπε να αφαιρεθούν οι 20 για λόγους,
όπως η μη ύπαρξη τεκμηρίωσης χρήσης από την libcloud, η μη συνέχιση της
λειτουργίας τους, η έλλειψη πληροφοριών τιμής ή δοκιμαστικής περιόδου για τις
υπηρεσίες τους και η αδυναμία δημιουργίας λογαριασμού στην επίσημη σελίδα τους.
Επομένως, υπάρχουν εν τέλει 5 πάροχοι νέφους που δύναται να χρησιμοποιηθούν,
υποστηρίζοντας όλες τις πιθανές λειτουργίες διαχείρισης εικονικών μηχανών.
Τέλος, από αυτούς τους 5, επιλέχθηκαν για επίσημη υποστήριξη από το εργαλείο
που προτείνεται στην παρούσα διπλωματική εργασία, τα τρία μεγαλύτερα ονόματα
του χώρου, οι Amazon, Google και Microsoft. Οι άλλοι δύο είτε δεν παρείχαν
δοκιμαστική περίοδο των υπηρεσιών τους, είτε δεν υπήρχε εμπιστοσύνη ως προς την
ποιότητα των υπηρεσιών αυτών.
Παρακάτω θα διαπιστώσουμε πως ακόμα και με την χρήση της βιβλιοθήκης libcloud
και την επίσημη υποστήριξη όλων των λειτουργιών για κάθε πάροχο, υπήρχε η
ανάγκη χρήσης της επίσημης βιβλιοθήκης της Azure (Microsoft Azure SDK) για την
δημιουργία Resource Group \footfullcite{azure-mgmt-resource} και Virtual
Network \footfullcite{azure-mgmt-network} διότι αυτές οι λειτουργίες δεν
υποστηρίζονται μέσω της libcloud. Επιπροσθέτως, δίχως την υποστήριξη των
λειτουργιών αυτών, ο χρήστης θα ήταν υποχρεωμένος να δημιουργεί αυτούς τους
πόρους χειροκίνητα ή να είναι περιορισμένος μονάχα σε μια γεωγραφική τοποθεσία.
Οι δύο τελευταίες επιλογές πάνε ενάντια σε έναν από τους βασικότερους στόχους
του εργαλείου. Την ομοιόμορφη λειτουργία για κάθε πάροχο νέφους που
υποστηρίζεται.
Πέρα από την απόφαση για την χρήση της 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{architecture}
Οι διαθέσιμες συναρτήσεις και μεταβλητές του secdep.py, απεικονίζονται στα

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 195 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 154 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 200 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 219 KiB

View File

Before

Width:  |  Height:  |  Size: 219 KiB

After

Width:  |  Height:  |  Size: 219 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 543 KiB

After

Width:  |  Height:  |  Size: 429 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 399 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 543 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

View File

@@ -167,7 +167,7 @@ Dennis Ritchie (1941 - 2011)
%% ----------------------------------------------------------------
% Now begin the Appendices, including them as separate files
\addtocontents{toc}{\vspace{2em}} % Add a gap in the Contents, for aesthetics
% \addtocontents{toc}{\vspace{2em}} % Add a gap in the Contents, for aesthetics
\appendix % Cue to tell LaTeX that the following 'chapters' are Appendices
@@ -175,10 +175,12 @@ Dennis Ritchie (1941 - 2011)
% Εδώ μπαίνουν τα παραρτήματα
\addtocontents{toc}{\vspace{2em}} % Add a gap in the Contents, for aesthetics
% \addtocontents{toc}{\vspace{2em}} % Add a gap in the Contents, for aesthetics
%% ----------------------------------------------------------------
\label{Bibliography}
\addtocontents{toc}{}
\addtotoc{Βιβλιογραφία}
\lhead{\textgreek{Βιβλιογραφία}} % Change the left side page header to "Bibliography"
\renewcommand*{\bibfont}{\textbf\small} % Have the correct font