Arkose: Περιορίστε τις εφαρμογές σας!

dimitris | Τρί, 02/05/2013 - 13:27 | 13'

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

Το Arkose είναι μια εφαρμογή που μας επιτρέπει να δημιουργούμε «απομονωμένα δοχεία» για την εκτέλεση των εφαρμογών μας. Σκεφτείτε το σαν ένα διαφανές μπουκάλι όπου τρέχουμε μια οποιαδήποτε εφαρμογή με ασφάλεια για να παρατηρήσουμε τι κάνει χωρίς να διατρέξουμε κίνδυνο. Βασίζεται στην ιδέα του "sandbox", δηλαδή ενός κουτιού όπου ένα παιδί μπορεί να παίζει εύκολα με την άμμο του, χωρίς να λερώνει τον χώρο. Όσοι είστε γονείς, ξέρετε τι εννοώ!
Για ευνόητους λόγους, αυτή η λογική του sandbox έχει μεταφερθεί και στον κόσμο των υπολογιστών. Πολλές φορές χρειαζόμαστε ένα ασφαλή χώρο για να τρέξουμε εφαρμογές σε απομόνωση από το υπόλοιπο λειτουργικό σύστημα και φυσικά από το σύστημα με τα πολύτιμα αρχεία μας. Αυτή τη λογική του sandbox υλοποιεί με επιτυχία το Arkose [1], που αναπτύσσει ο Stéphane Graber, σε Python.

Το Arkose αποτελείται από τα εξής:
- arkose: Ένα εργαλείο της γραμμής εντολών
- arkose-gui: Η γραφική διεπαφή για ενσωμάτωση με το Gnome.
- arkose-nautilus: Ένα plugin του Ναυτίλου
- arkose-wrapper: Ένα κέλυφος για να τρέχουν οι εφαρμογές μας στο sandbox.

Με απλά λόγια, το Arkose μας επιτρέπει να τρέχουμε οποιοδήποτε εκτελέσιμο αρχείο (είτε το έχουμε εγκαταστήσει μέσω του Κέντρου Λογισμικού ή όχι) μέσα σε ένα ασφαλές δοχείο. Η εφαρμογή επιτρέπει να ρυθμίσουμε διάφορες παραμέτρους του «δοχείου» αυτού, όπως για παράδειγμα το μέγεθος του χώρου που θα καταλαμβάνει, το αν θα διαθέτει πρόσβαση στο διαδίκτυο αλλά και το αν θα του επιτρέψουμε να δει τα αρχεία μας στον προσωπικό φάκελο /home.

Τεχνικά, το Arkose βασίζεται στις ίδιες τεχνικές με το LXC (Linux Container) [1], δηλαδή στα namespaces του πυρήνα Linux [3], που επιτρέπουν τον απομόνωση των πόρων του συστήματος, αλλά και στο Cgroups [4]. Τα τελευταία επιτρέπουν τον περιορισμό των πόρων, και έτσι το Arkose μπορεί να κάνει τη δουλειά του σωστά.

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

Πως δουλεύει

Πριν δούμε το Arkose στην πράξη, ας αναλύσουμε λίγο πως δουλεύει. Στην ουσία, η εφαρμογή αξιοποιεί το aufs, ένα overlay σύστημα αρχείων που προέρχεται από το UnionFS. H αρχική δουλειά του aufs είναι να προσομοιώνει εγγραφές σε μη εγγράψιμα μέσα, όπως CD (γι' αυτό χρησιμοποιείται συχνά στα Linux Live CDs). Στην περίπτωση του Arkose, το aufs προσομειώνει την πρόσβαση στο τοπικό σύστημα αρχείων ώστε η εφαρμογή που τρέχουμε κάθε φορά να μην καταλαβαίνει ότι τρέχει μέσα σε ένα απομονωμένο δοχείο.

Για να γίνουν όλα αυτά όμως, το Arkose αξιοποιεί και ένα χαρακτηριστικό του πυρήνα Linux, το Cgroups που έχει ενσωματωθεί στον kernel από την έκδοση 2.6.24 και μετά. Το Cgroups επιτρέπει ουσιαστικά στον πυρήνα να ομαδοποιεί διεργασίες και να τις τρέχει μαζί. Έτσι ο scheduler τις αντιμετωπίζει ως μια μοναδική διεργασία με προφανή πλεονεκτήματα. Στην πράξη, αυτό το χαρακτηριστικό του πυρήνα Linux μας επιτρέπει να επιλέγουμε με κάποιον τρόπο δύο ή περισσότερες διεργασίες και να τις μετατρέπουμε σε μια κλειστή ομάδα στην οποία αναθέτουμε κάποιους πόρους.
Στη συνέχεια, το τμήμα του πυρήνα που ασχολείται με τη διαχείριση της μνήμης απομονώνει αυτήν την ομάδα από το υπόλοιπο σύστημα περιορίζοντας αποτελεσματικά εφαρμογές που δεν είναι και τόσο «οικονομικές» στον τομέα της κατανάλωσης μνήμης... Μάλιστα, αν τα Cgroups είναι ενεργοποιημένα στον πυρήνα, τότε το Linux θα τα χρησιμοποιεί για να διαχειρίζεται όλους τους πόρους, είτε αφορούν διεργασίες του χρήστη είτε διεργασίες του πυρήνα.

Εγκατάσταση

Ας αφήσουμε όμως την θεωρία για να περάσουμε στην πράξη. Η εγκατάσταση του Arkose σε Debian διανομές και ειδικά στο Ubuntu είναι πανεύκολη, μια και τα πακέτα υπάρχουν στο αποθετήριο Universe. Στην πράξη το μόνο που έχετε να κάνετε είναι να τρέξετε το Κέντρο Λογισμικού και να ψάξετε για το πακέτο arkose (εικόνα 1).


1 Η εγκατάσταση του Arkose είναι παιχνιδάκι στο Ubuntu.

Επιλέξτε το πακέτο "Arkose – Desktop Application Sandboxing" και πατήστε Install. Θα ζητηθεί ο προσωπικός κωδικός σας, όπότε πληκτρολογήστε τον και περιμένετε να τελειώσει η εγκατάσταση. Αντίστοιχα για εγκατάσταση από το τερματικό, θα έπρεπε να δώσετε την εντολή:

sudo apt-get install arkose arkose-gui

Η έκδοση που εγκαθίσταται με αυτόν τον τρόπο είναι η 1.5.1, που είναι η πιο πρόσφατη τη στιγμή που γράφονται αυτές οι γραμμές. Σημειώστε ότι χρειάζεται να έχετε πυρήνα 2.6.36 τουλάχιστον με ενσωματωμένο aufs. Στο Ubuntu 12.04 δεν θα έχετε κανένα πρόβλημα.

Λειτουργία

Αφού τελειώσαμε με την εγκατάσταση, είναι καιρός να δούμε τι ψάρια πιάνει το Arkose. Για να τρέξετε το γραφικό περιβάλλον του, πηγαίνετε στο μενού Εφαρμογές > Εργαλεία Συστήματος > Arkose Desktop Application Sandboxing. Στο Unity, απλώς πατάτε το πλήκτρο Super ή Alt και γράφετε Arkose (εικόνα 2).


2 Τρέχουμε το GUI του Arkose από το Unity.

Μόλις τρέξετε το Arkose, θα εμφανιστεί ένας διάλογος (εικόνα 3) που θυμίζει τον παλιό διάλογο εκκίνησης εφαρμογών του Gnome όταν πατούσαμε Alt+F2. Εκεί απλώς γράφουμε το μονοπάτι για την εφαρμογή που μας ενδιαφέρει και μετά από λίγο αυτή τρέχει. Έτσι απλά. Δοκιμάστε το.


3 Το ένα και μοναδικό παράθυρο για την εκτέλεση εφαρμογών στο sandbox του Arkose.

Βέβαια, ο διάλογος εκκίνησης του Arkose προσφέρει και μερικές χρήσιμες επιλογές, που είναι αρχικά κρυμμένες. Κάνουμε κλικ στο "Show sandbox options" και εμφανίζονται (εικόνα 4).

4 Οι επιλογές εκκίνησης του Arkose.

Ουσιαστικά υπάρχουν 5 επιλογές:

  • Network support: Επιτρέπει στην εκτελούμενη εφαρμογή να έχει πρόσβαση στο διαδίκτυο
  • Real /home directory. Κανονικά, η εφαρμογή δεν έχει πραγματική πρόσβαση στο φάκελο μας, αλλά copy-on-write μέσω του aufs.
  • Real /tmp directory. Παρόμοια αλλά για τον φάκελο με τα προσωρινά αρχεία του linux, τον /tmp
  • Storage type: Που θα αποθηκεύονται οι αλλαγές του προγράμματος. Έχουμε δύο επιλογές ext4 και tmpfs. Το πρώτο σημαίνει αποθήκευση στο φάκελο ~/.arkose, ενώ το δεύτερο στη μνήμη.
  • Container size: Εδώ απλώς ορίζουμε το μέγεθος σε MB του δοχείου στο οποίο θα τρέξει η εφαρμογή.

Στην πράξη, αρκεί να τρέξουμε μια εφαρμογή με 1.5 GΒ και δικτυακή υποστήριξη. Μόλις την κλείσουμε όλες οι αλλαγές της θα εξαφανιστούν. Αν θέλουμε να διατηρούμε αυτές τις αλλαγές, τότε ενεργοποιούμε τις επιλογές "Real /home directory" και "Real /tmp directory".

Και από τη γραμμή εντολών

Αν δεν βγάλετε άκρη με το γραφικό περιβάλλον του Arkose, μπορείτε να το τρέξετε από το Τερματικό και να ξεκινήσετε από εκεί γραφικές εφαρμογές. Τρέξτε το Terminal και δώστε την εντολή:

sudo arkose

Αμέσως το prompt θα αλλάξει σε κάτι της μορφής

dkalamaras@arkose-tmpetDodV:~$

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

cd ~

δεν θα εμφανιστεί τίποτα. Ότι κι αν κάνετε εκεί, όσα αρχεια κι αν φτιάξετε, ότι κι αν κατεβάσετε και εγκαταστήσετε, θα σβηστεί όταν γράψετε τη λέξη exit (εικόνα 5)!


5 Κατεβάστε αρχεία και προγράμματα, δουλέψτε όσο θέλετε, μετά exit και τέλος!

Δοκιμάστε π.χ. να κατεβάσετε το logo του περιοδικό:

wget https://www.linuxinsider.gr/themes/linux/logo.png

και να το δείτε με τον προβολέα εικόνων του Gnome:

eog logo.png

Μόλις γράψετε exit, ότι κατεβάσατε έχει εξαφανιστεί.

Τέλος, αν θέλετε να έχετε πρόσβαση και στο home σας, τότε προτιμήστε την εντολή:
sudo arkose -n direct -h

Σύνδεσμοι
[1] Arkose: https://launchpad.net/arkose
[2] LXC: https://lxc.sf.net
[3] Namespaces στο Linux: https://goo.gl/Hi8rs
[4] Τεκμηρίωση Cgroups: https://goo.gl/plL8i

Δώσε αστέρια!

MO: 5 (ψήφοι: 2)