5.17 Linux - PAM (Pluggable Authentication Modules)
5.17.1 Ορισμός
- ΣκοπόςΤο
Linux-PAM είναι σύνολο κοινών βιβλιοθηκών που επιτρέπουν στον τοπικό διαχειριστή του συστήματος να επιλέγει το τρόπο που οι διάφορες εφαρμογές πιστοποιούν τη γνησιότητα της ταυτότητας των χρηστών. Με άλλα λόγια, χωρίς να είναι αναγκαίο να ξαναγραφτούν και να ξαναπεράσουν από τη διαδικασία του compilation οι συμβατές με το σύστημα PAM εφαρμογές, είναι δυνατόν να αλλάξει ο μηχανισμός με τον οποίο πραγματοποιούν την πιστοποίηση της ταυτότητας των χρηστών. Αυτό μπορεί να γίνει μέχρι του βαθμό της ολικής αναβάθμισης του συστήματος χωρίς να ενοχληθούν κατά οποιοδήποτε τρόπο οι διάφορες εφαρμογές.Ιστορικά
, μια εφαρμογή που απαιτούσε πιστοποίηση της ταυτότητας του χρήστη έπρεπε να περάσει από compilation για να μπορεί να χρησιμοποιήσει κάποιον συγκεκριμένο μηχανισμό πιστοποίησης της ταυτότητας του χρήστη. Για παράδειγμα στην περίπτωση των παραδοσιακών UNIX συστημάτων, η ταυτότητα του χρήστη πιστοποιείται με τη διαδικασία ελέγχου του κωδικού του χρήστη όταν αυτός θελήσει να μπει στο λογαριασμό του. Αυτός ο κωδικός αφού συμπληρωθεί στην αρχή του από "αλατάκι" δύο χαρακτήρων, κρυπτογραφείται με τη χρήση του crypt(3). Ο χρήστης πιστοποιείται έναντι του συστήματος εάν ο κρυπτογραφημένος κωδικός που εισήγαγε στο σύστημα είναι ίδιος με αυτόν που υπάρχει στο δεύτερο πεδίο της καταχώρησης του χρήστη στη βάση δεδομένων κωδικών του συστήματος - το αρχείο /etc/passwd. Σε τέτοιου είδους συστήματα οι περισσότερες, αν όχι όλες, μορφές προνομίων παρέχονται από το σύστημα βάση αυτού του μοναδικού μηχανισμού πιστοποίησης. Τα προνόμια δίδονται με τη μορφή προσωπικών αριθμών (user-id ή uid) που ο κάθε χρήστης έχει και με τον οποίο εκπροσωπείται πλήρως στο σύστημα ή με τη μορφή αντίστοιχων αριθμών που χαρακτηρίζουν ολόκληρα σύνολα χρηστών (group id ή gid) στα οποία μπορεί να ανήκει κάποιος χρήστης και να απολαμβάνει και αυτός τα δικαιώματα που απορρέουν από την ύπαρξή του σε αυτό το σύνολο. Αυτά τα στοιχεία βρίσκονται κατά παράδοση στο αρχείο /etc/group.Ατυχώς
, οι συνεχείς αυξήσεις της ταχύτητας των υπολογιστών και η πλατιά διάδοση των δικτυωμένων υπολογιστικών συστημάτων έχουν μετατρέψει τους άλλοτε ασφαλείς μηχανισμούς πιστοποίησης, σαν αυτόν,σε ευάλωτα σε επιθέσεις σχήματα. Οι διαπιστώσεις αυτές οδήγησαν στην ανάπτυξη νέων μηχανισμών πιστοποίησης της ταυτότητας του χρήστη.Ο σκοπός του
Linux-PAM είναι ο διαχωρισμός της ανάπτυξης του λογισμικού χορήγησης προνομίων από την ανάπτυξη καταλλήλων μηχανισμών ασφάλειας. Αυτό επιτυγχάνεται με τη παροχή μιας βιβλιοθήκης λειτουργιών που μπορούν να χρησιμοποιηθούν από μια εφαρμογή για την πιστοποίηση της ταυτότητας του χρήστη. Αυτή η βιβλιοθήκη PΑΜ ρυθμίζεται τοπικά με τη βοήθεια ενός αρχείου συστήματος (/etc/pam.conf) ή με μια σειρά αρχείων ρυθμίσεων που βρίσκονται στο κατάλογο /etc/pam.d/ για να πιστοποιεί τους χρήστες μέσο των τοπικά διαθέσιμων modules (προγράμματα - πακέτα). Τα modules βρίσκονται συνήθως στο κατάλογο /usr/lib/security και παίρνουν τη μορφή δυναμικά φορτώσιμων αρχείων αντικειμένων.5.17.2 Επισκόπηση Λειτουργίας
Ας εξετάσουμε το παρακάτω παράδειγμα
: Παίρνουμε μια εφαρμογή που χορηγεί κάποιου είδους υπηρεσία στους χρήστες. Το login είναι ένα τέτοιο πρόγραμμα. Το login κάνει δύο πράγματα: Πρώτον πιστοποιεί ότι ο χρήστης είναι αυτός που ισχυρίζεται και δεύτερον παρέχει την υπηρεσία που του ζητήθηκε και που στη περίπτωση του login είναι ένα command shell (κέλυφος εντολών) με τη ταυτότητα του χρήστη.Παραδοσιακά
,η παραπάνω διαδικασία επιτυγχάνεται ζητώντας από το χρήστη το password (κωδικό χρήστη) και πιστοποιώντας ότι αυτός είναι ο ίδιος με αυτόν που υπάρχει στο σύστημα. Με αυτό το τρόπο κάνει τη πιστοποίηση της ταυτότητας του χρήστη. Αυτή τη δουλειά ανατίθεται στο Linux-PAM.Από την οπτική γωνία του προγραμματιστή εφαρμογών
(στη περίπτωσή μας του ατόμου που έφτιαξε το login πρόγραμμα), το Linux-PAM αναλαμβάνει το έργο της πιστοποίησης της ταυτότητας του χρήστη.Η ευελιξία του συστήματος αυτού έγκειται στο γεγονός ότι ο διαχειριστής του έχει την ελευθερία να επιλέξει ακριβώς το τρόπο με τον οποίο η συγκεκριμένη εφαρμογή θα πιστοποιήσει το χρήστη
. Ο διαχειριστής έχει την ευχέρεια να επιλέξει και να κάνει όποιες ρυθμίσεις θεωρεί ότι πρέπει να γίνουν για κάποιες ή και για όλες τις συμβατές με το σύστημα PAM εφαρμογές του συστήματός του. Αυτό σημαίνει ότι μπορεί να πιστοποιήσει κάνοντας χρήση ενός μηχανισμού απλής εμπιστοσύνης (pam_permit) μέχρι κάτι τόσο "παρανοϊκό" όσο ο συνδυασμός ελέγχου του αμφιβληστροειδούς χιτώνα, δείγματος φωνής και κωδικού μιας χρήσης!Για να γίνει πιο σαφής η ευελιξία που προσφέρει αυτό το σύστημα ας θεωρήσουμε το παρακάτω παράδειγμα
:ο διαχειριστής του δικτύου (γονιός) θέλει να βελτιώσει την ικανότητα των χρηστών του συστήματος (παιδιά). Μπορεί λοιπόν να ρυθμίσει το αγαπημένο τους παιχνίδι,το οποίο είναι φυσικά συμβατή εφαρμογή με PAM, να τα πιστοποιεί κάνοντας έναν απλό έλεγχο της ορθότητας ενός πολλαπλασιασμού τον οποίο το σύστημα θα θέτει σαν απαίτηση για την είσοδο στο παιχνίδι. Είναι προφανές ότι αν το παιχνίδι αξίζει,τα παιδιά θα μάθουν την προπαίδειά τους. Όσο τα παιδιά μεγαλώνουν η πιστοποίηση μπορεί να αναβαθμίζεται σε κάτι άλλο – ίσως μια μεγάλη διαίρεση.Το σύστημα
Linux-PAM έρχεται σε επαφή με τέσσερις διαφορετικούς τύπους διαχειριστικής εργασίας. Αυτοί είναι: διαχείριση πιστοποίησης, διαχείριση λογαριασμών, διαχείριση σύνδεσης, διαχείριση κωδικών. Ο συσχετισμός του προτιμώμενου διαχειριστικού σχήματος με τη συμπεριφορά μιας εφαρμογής γίνεται με καταχωρήσεις στο σχετικό Linux-PAM αρχείο ρυθμίσεων. Οι λειτουργίες διαχείρισης εκτελούνται από τα modules που καθορίζονται στο αρχείο αυτό.Η λειτουργία του συστήματος βήμα προς βήμα είναι η ακόλουθη: Μία εφαρμογή Χ αλληλεπιδρά με τη βιβλιοθήκη του Linux-PAM χωρίς να γνωρίζει κανένα από τα χαρακτηριστικά της ρυθμισμένης διαδικασίας πιστοποίησης. Η βιβλιοθήκη του Linux-PAM με τη σειρά της συμβουλεύεται τα περιεχόμενα του PAM αρχείου ρυθμίσεων και φορτώνει τα απαιτούμενα για την εφαρμογή modules. Αυτά ανήκουν σε μία από τις τέσσερις διαχειριστικές ομάδες και είναι τοποθετημένα με τη σειρά που εμφανίζονται στο αρχείο ρυθμίσεων. Όταν αυτά τα modules κληθούν από το Linux-PAM εκτελούν τις διάφορες εργασίες πιστοποίησης. Η οποιαδήποτε πληροφορία κειμένου που χρειάζεται να κινηθεί από και προς τον χρήστη, μπορεί να το κάνει χρησιμοποιώντας της conversation function.
5.17.3 Το Αρχείο Ρυθμίσεων του
Linux-PAMTo Linux-PAM έχει σχεδιαστεί από την αρχή για παροχή μέγιστης δυνατής ευελιξίας στον διαχειριστή του συστήματος όσον αφορά την ικανότητα χορήγησης προνομίων. Οι ρυθμίσεις γίνονται σε ένα από τα δύο διαφορετικά σχήματα. Στο αρχείο ρυθμίσεων ή στο κατάλογο ρυθμίσεων.
Στο αρχείο ρυθμίσεων /etc/pam.conf υπάρχουν γραμμές ρυθμίσεων που έχουν τη παρακάτω μορφή:
service-name module-type control-flag module-path arguments
Ένα από τα τέσσερα
(προς το παρόν) τεκμήρια που καταδεικνύουν τη σοβαρότητα που σχετίζεται με το γεγονός της επιτυχίας ή αποτυχίας ενός module. Το Linux-PAM έχει προβλέψει για τη πυραμιδοποίηση των παρόμοιων modules, παρέχοντας μια μέθοδο κατά την οποία ο χρήστης έρχεται σε επαφή με παραπάνω από ένα μηχανισμό πιστοποίησης για κάθε υπηρεσία-εφαρμογή. Η εφαρμογή δεν ενημερώνεται για την επιτυχία ή την αποτυχία του κάθε module που υπάρχει στο αρχείο /etc/pam.conf. Αντί αυτού λαμβάνει μία περιληπτική απάντηση επιτυχίας ή αποτυχίας από τη βιβλιοθήκη του Linux-PAM. Η σειρά εκτελέσεως αυτών των εντολών είναι αυτή με την οποία με την οποία έχουν καταχωρηθεί στο αρχείο /etc/pam.conf.Η πολιτική καθορισμού αυτών των απαντήσεων βασίζεται στα παρακάτω τρία control-flags:
Το
path (μονοπάτι) του δυναμικού φορτιζόμενου αρχείου αντικειμένου,δηλαδή το ίδιο το module. Εάν ο πρώτος χαρακτήρας του path είναι "/", τότε θεωρείται πλήρες το path. Εάν δεν είναι αυτή η περίπτωση το χορηγηθέν path για το module θεωρείται ότι αναφέρεται στο παρακάτω path:/usr/lib/security.Τα
args είναι μια λίστα τεκμηρίων που ενσωματώνονται στο module την ώρα που αυτό ελέγχεται όπως και τα arguments μιας τυπικής Linux εντολής κελύφους. Γενικά τα args είναι προαιρετικά αλλά και συγκεκριμένα για κάθε module. Μη έγκυρα args αγνοούνται από τα modules αλλά καταγράφεται το λάθος υποχρεωτικά στο syslog.5.17.4 Ρύθμιση Βασισμένη σε Κατάλογο
Από την έκδοση
0.56 παρέχεται ένας πιο ευέλικτος τρόπος ρύθμισης του libpam. Αυτός ο τρόπος συνίσταται στη ρύθμιση των περιεχομένων του /etc/pam.d/ καταλόγου. Στη περίπτωση αυτή ο κατάλογος γεμίζει με αρχεία το καθένα από τα οποία έχει όνομα ίδιο με το όνομα μιας υπηρεσίας - είναι το προσωπικό αρχείο ρυθμίσεων της υπηρεσίας αυτής. Η ύπαρξη του κατάλογου /etc/pam.d/ σημαίνει ότι αγνοείται πλήρως το περιεχόμενο του αρχείου /etc/pam.conf . Το συντακτικό αυτού του αρχείου είναι παρόμοιο με αυτό του /etc/pam.conf αρχείου και οι καταχωρήσεις έχουν τη μορφή:module-type control-flag module-path arguments
Η μόνη διαφορά
, όπως παρατηρούμε, από το συντακτικό του αρχείου ρυθμίσεων είναι η έλλειψη του service-name, αυτό όμως συμπίπτει με το όνομα του αρχείου.Αυτή η μέθοδος ρυθμίσεων έχει πολλά πλεονεκτήματα σε σχέση με τη προηγούμενη. Μερικά από αυτά είναι:
5.17.5 Οδηγός Αναφοράς Διαθέσιμων Μodules
Παρακάτω παρατίθεται μια λίστα με τα διαθέσιμα από το
Linux-PAM modules:5.17.6 Περαιτέρω Πληροφορίες
Στο
site της εταιρίας RedHat μπορούν να βρεθούν λεπτομέρειες και επιπλέον πληροφορίες για το Linux – PAM: http://www.redhat.com. Επίσης στο οδηγό εγκατάστασης Installation guide Redhat 5.2 Linux υπάρχουν περαιτέρω πληροφορίες για την εγκατάσταση και ρύθμιση του PAM.