Βασικές Έννοιες

6.1 Ασφάλεια στο UNIX

6.1.1 Ιστορία της Ασφάλειας του Unix

Όταν μιλάμε για την ασφάλεια του Unix θα πρέπει να έχουμε λάβει υπόψη μας ότι το Unix δεν είχε σχεδιαστεί από την αρχή να είναι ασφαλές. Σχεδιάστηκε έτσι ώστε να έχει τα απαραίτητα χαρακτηριστικά που να το κάνουν λειτουργικό.

Το Unix είναι ένα πολυ-χρηστικό (multi-user) και πολυ-διεργασιακό (multi-tasking) λειτουργικό σύστημα. Πολυ-χρηστικό σημαίνει ότι το λειτουργικό σύστημα επιτρέπει σε πολλούς διαφορετικούς χρήστες να χρησιμοποιούν το ίδιο υπολογιστικό σύστημα την ίδια στιγμή. Πολυ-διεργασιακό σημαίνει ότι ο κάθε ένας από αυτούς τους χρήστες μπορεί να τρέχει ταυτόχρονα πολλά διαφορετικά προγράμματα.

Μία από τις πιο κοινές διεργασίες τέτοιων λειτουργικών συστημάτων είναι η αποτροπή των παρεμβολών μεταξύ των διαφόρων χρηστών. Χωρίς μία τέτοιου είδους προστασία κάποιος χρήστης θα μπορούσε να επηρεάσει τον τρόπο λειτουργίας προγραμμάτων άλλων χρηστών με αποτέλεσμα το σβήσιμο αρχείων ή χειρότερα το "ρίξιμο" (crush-halt) της μηχανής. Για την αποφυγή τέτοιων καταστροφών το Unix είχε πάντα ενσωματωμένη κάποια μορφή ασφάλειας στη φιλοσοφία σχεδίασής του.

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

6.1.2 Χρήστες και Passwords

Κάθε άτομο που χρησιμοποιεί ένα Unix σύστημα πρέπει απαραίτητα να έχει λογαριασμό (account) σε αυτό το σύστημα. Οι λογαριασμοί αναγνωρίζονται από ένα μοναδικό όνομα-χρήστη (username). Παραδοσιακά κάθε λογαριασμός έχει επιπλέον ένα μυστικό κωδικό (password) που σχετίζεται άμεσα με αυτόν και αποτρέπει την παράνομη χρήση του. Ένας χρήστης πρέπει να γνωρίζει απαραίτητα τόσο το username όσο και το password του για να αποκτήσει πρόσβαση στο Unix σύστημα.

Το username είναι ένα στοιχείο με το οποίο το σύστημα παίρνει την ταυτότητά μας ενώ το password είναι το αποδεικτικό στοιχείο αυτής. Τα κανονικά usernames έχουν από έναν έως και οκτώ χαρακτήρες. Σε έναν υπολογιστή που έχει για λειτουργικό το Unix τα usernames διαφορετικών χρηστών πρέπει να είναι διαφορετικά ενώ τα passwords, τα οποία επίσης αποτελούνται από έναν έως οκτώ χαρακτήρες, αν και πρέπει να είναι διαφορετικά μπορεί και να είναι ίδια κάτι που σημαίνει ωστόσο ότι και οι δύο χρήστες που έχουν τον ίδιο κωδικό έχουν κάνει λάθος και μάλιστα το ίδιο, στην επιλογή του.

Όταν ένας χρήστης θελήσει να μπει σε ένα σύστημα, αυτό του ζητάει το username και το password του. Το Unix χρησιμοποιεί το αρχείο /etc/passwd όπου κρατάει στοιχεία για κάθε χρήστη που υπάρχει στο σύστημα. Το /etc/passwd περιέχει το username, το πραγματικό όνομα, πληροφορίες αναγνώρισης όπως επίσης και βασικές πληροφορίες για το λογαριασμό του κάθε χρήστη. Τα πεδία που υπάρχουν σε κάθε γραμμή του αρχείου αυτού είναι το username, το κρυπτογραφημένο password του χρήστη, ο προσωπικός αριθμός αναγνώρισής του (UID), το group στο οποίο ανήκει ο χρήστης (GID), το πραγματικό όνομα του χρήστη, το home directory του και το shell του. Για παράδειγμα:

poco:dfgjfdhg/?hhg:156:100:Pole Cosis:/home3/popos:/bin/csh

Τα passwords αναπαρίστανται συνήθως με ένα ειδικό κρυπτογραφημένο format και μπορεί ακόμα και να μην είναι αποθηκευμένα σε αυτό το αρχείο αλλά σε ένα άλλο που λέγεται shadow και είναι ορατό μόνο από τον υπερ-χρήστη (superuser ή root).

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

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

6.1.3 "Καλοί" και "Κακοί" Κωδικοί

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

Καλά passwords είναι αυτά που είναι δύσκολο να μαντέψει κανείς. Η συνταγή για την επιλογή ενός καλού κωδικού είναι :

Κακά passwords είναι εκείνα που αποτελούνται από:

6.1.4 Το Σύστημα Αρχείων του Unix (UNIX Filesystem)

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

Αρχεία

Κάθε τι στο Unix αναπαρίσταται και εκπροσωπείται από κάποιο αρχείο είτε είναι κάποιο απλό αρχείο κειμένου είτε είναι κάποια συσκευή, διαδικασία ή δικτυακή σύνδεση.

Κατάλογοι

Οι κατάλογοι είναι ειδικά αρχεία του συστήματος αρχείων. Ο κατάλογος δεν είναι τίποτα περισσότερο από μια απλή λίστα ονομάτων και inode αριθμών (inode:για κάθε αντικείμενο του συστήματος αρχείων το Unix αποθηκεύει διαχειριστική πληροφορία στη δομή αυτή που υπάρχει στον δίσκο και δεν έχει όνομα αλλά μόνο αριθμό). Κάθε φυσιολογικός κατάλογος έχει πάντα δύο αρχεία. Το πρώτο είναι το ". " το οποίο σχετίζεται με το inode του ίδιου του καταλόγου και το ". . " το οποίο σχετίζεται με τον αμέσως πιο πάνω κατάλογο στη δομή των καταλόγων.

Ασφάλεια - Άδειες Χρήσης Αρχείων, Καταλόγων (File & Directory Permissions)

H ασφάλεια αρχείων μας δίνει τη δυνατότητα να καθορίσουμε τι ακριβώς επιτρέπεται να κάνει κάποιος με τα αρχεία μας, δηλαδή αν μπορεί να τα διαβάσει, να τα αντιγράψει, να τα σβήσει ακόμα και να τα εκτελέσει. Αναλυτικά έχουμε τις τρεις παρακάτω επιλογές : read (r), write (w), execute (x).

Χαρακτήρας

Άδεια

Εξήγηση

r

Read—Διάβασμα

Μπορούμε να ανοίξουμε ένα αρχείο και να δούμε τα περιεχόμενά του

w

Write—Γράψιμο

Μπορούμε να αντιγράψουμε, να σβήσουμε ή να αλλάξουμε τα περιεχόμενα του αρχείου

x

Execute—Εκτέλεση

Εάν το αρχείο είναι εκτελέσιμο τότε μπορούμε να το εκτελέσουμε πληκτρολογώντας το όνομά του

O αντίστοιχος πίνακας για τους καταλόγους είναι:

Περιεχόμενα

Άδεια

Εξήγηση

r

Read—Διάβασμα

Μπορούμε να δούμε ποια αρχεία βρίσκονται στον κατάλογο

w

Write—Γράψιμο

Μπορούμε να προσθέσουμε, να αφαιρέσουμε και να αλλάξουμε όνομα σε αρχεία του καταλόγου

x

Execute—Εκτέλεση

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

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

6.1.5 Λίστες Ελέγχου Πρόσβασης (Access Control Lists - ACLs)

Μερικές εκδόσεις του Unix υποστηρίζουν τις λίστες ελέγχου πρόσβασης ή ACLs. Αυτές παρέχονται συνήθως ως επέκταση των κανονικών αδειών χρήσης αρχείων που υπάρχουν στο Unix. Με τις ACLs μπορούμε να καθορίσουμε επιπλέον χαρακτηριστικά και δικαιώματα πρόσβασης για κάθε αρχείο και κατάλογο για πολλούς ξεχωριστούς χρήστες και επίσης να προσδώσουμε διαφορετικές άδειες σε μέλη διαφορετικών group. Αποτελούν ένα πολύ δυνατό χαρακτηριστικό του συστήματος και παρέχονται από τις εκδόσεις AIX και HP-UX του Unix ενώ υπάρχει πρόβλεψη να συμπεριληφθούν και σε μελλοντικές εκδόσεις των Solaris και Linux.

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

6.1.5 Περαιτέρω Πληροφορίες

Στο βιβλίο "Practical Unix & Internet Security" του Garfinkel & Spafford (O' REILLYTM) υπάρχουν επίπροσθετες λετπομέρειες για την ασφάλεια στο UNIX και γενικότερα.

Βασικές Έννοιες