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

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-PAM

To Linux-PAM έχει σχεδιαστεί από την αρχή για παροχή μέγιστης δυνατής ευελιξίας στον διαχειριστή του συστήματος όσον αφορά την ικανότητα χορήγησης προνομίων. Οι ρυθμίσεις γίνονται σε ένα από τα δύο διαφορετικά σχήματα. Στο αρχείο ρυθμίσεων ή στο κατάλογο ρυθμίσεων.

Στο αρχείο ρυθμίσεων /etc/pam.conf υπάρχουν γραμμές ρυθμίσεων που έχουν τη παρακάτω μορφή:

service-name module-type control-flag module-path arguments

  1. Auth: Αυτός ο τύπος module παρέχει δύο δυνατότητες πιστοποίησης. Πρώτον,πιστοποιεί ότι ο χρήστης είναι αυτός που ισχυρίζεται δίνοντας οδηγίες στην εφαρμογή να ζητήσει από τη χρήστη το κωδικό του ή κάποιο άλλο μέσο πιστοποίησης της ταυτότητάς του. Δεύτερον,το module μπορεί να χορηγήσει ιδιότητα μέλους ενός group (ανεξάρτητα από το αρχείο /etc/groups) ή άλλα προνόμια μέσω δικών του αποκλειστικά διαδικασιών.
  2. Account: Αυτό το module πραγματοποιεί διαχείριση λογαριασμών βασιζόμενο σε στοιχεία ξένα προς την πιστοποίηση του χρήστη. Χρησιμοποιείται για να επιτρέπει ή να απαγορεύει την πρόσβαση σε μια υπηρεσία κρίνοντας από την ώρα της μέρας, τους πόρους του συστήματος τη συγκεκριμένη στιγμή (μέγιστο αριθμό χρηστών) ή ακόμα και τη τοποθεσία του χρήστη που κάνει την αίτηση σύνδεσης (π.χ. ο root μπορεί να μπει στο σύστημα μόνο από τη κονσόλα).
  3. Session: Πρωταρχικά,αυτό το module σχετίζεται με τις εργασίες που πρέπει να γίνουν πριν και μετά την παροχή συγκεκριμένης υπηρεσίας στους χρήστες. Τέτοιες για παράδειγμα εργασίες περιλαμβάνουν τη καταγραφή πληροφοριών που αφορούν το άνοιγμα και κλείσιμο κάποιων μετακινούμενων δεδομένων μεταξύ του χρήστη και του συστήματος, τη διαδικασία του mounting των καταλόγων και άλλες.
  4. Password: Ο τελευταίος τύπος module χρειάζεται στην ανανέωση της πληροφορίας πιστοποίησης που σχετίζεται με το χρήστη. Γενικά υπάρχει ένα module για κάθε βασισμένο στο δίδυμο"αίτησης/απάντησης" τύπο module πιστοποίησης. Με άλλα λόγια κάθε δίδυμο έχει το δικό του σχήμα—σχέδιο πιστοποίησης.

Ένα από τα τέσσερα (προς το παρόν) τεκμήρια που καταδεικνύουν τη σοβαρότητα που σχετίζεται με το γεγονός της επιτυχίας ή αποτυχίας ενός module. Το Linux-PAM έχει προβλέψει για τη πυραμιδοποίηση των παρόμοιων modules, παρέχοντας μια μέθοδο κατά την οποία ο χρήστης έρχεται σε επαφή με παραπάνω από ένα μηχανισμό πιστοποίησης για κάθε υπηρεσία-εφαρμογή. Η εφαρμογή δεν ενημερώνεται για την επιτυχία ή την αποτυχία του κάθε module που υπάρχει στο αρχείο /etc/pam.conf. Αντί αυτού λαμβάνει μία περιληπτική απάντηση επιτυχίας ή αποτυχίας από τη βιβλιοθήκη του Linux-PAM. Η σειρά εκτελέσεως αυτών των εντολών είναι αυτή με την οποία με την οποία έχουν καταχωρηθεί στο αρχείο /etc/pam.conf.

Η πολιτική καθορισμού αυτών των απαντήσεων βασίζεται στα παρακάτω τρία control-flags:

  1. Required (απαιτούμενο) - Αυτό δείχνει ότι είναι απαραίτητη η επιτυχία του module για την επιτυχία του τύπου του module (module-type). Πιθανή αποτυχία του module δεν θα εμφανιστεί με κανένα τρόπο στο χρήστη μέχρι να περατωθεί όλη η διαδικασία ελέγχου όλων των modules που απομένουν.
  2. Requisite (απαιτούμενο) - Αυτό είναι παρόμοιο με το προηγούμενο με τη μόνη διαφορά ότι εάν ένα τέτοιο module επιστρέψει σήμα αποτυχίας τότε ο έλεγχος περνάει αμέσως στην εφαρμογή. Το απαντητικό σήμα είναι αυτό που προκύπτει από τη πρώτη αποτυχία ενός required ή requiresite flag που θα αποτύχει. Αυτό το flag μπορεί να χρησιμοποιηθεί για την προστασία απέναντι στη πιθανότητα ένας χρήστης να στείλει το κωδικό του μέσα από ένα μη ασφαλές μέσο. Είναι πιθανό μια τέτοια συμπεριφορά να πληροφορήσει κάποιον επιτιθέμενο τους λογαριασμούς του συστήματος αλλά αυτή η πιθανότητα πρέπει να ζυγιστεί με την πιθανότητα της έκθεσης ευαίσθητων κωδικών σε ένα εχθρικό περιβάλλον.
  3. Sufficient (ικανό) - Η επιτυχία αυτού του module θεωρείται ικανή από τη βιβλιοθήκη Linux-PAM για την επιτυχία του module-type. Στη περίπτωση που κανένα προηγούμενο required module δεν έχει αποτύχει,σταματάνε να ελέγχονται όλα τα παρόμοια με αυτό που έχουν στοιβαχτεί από τη βιβλιοθήκη. (Παρατηρούμε ότι σε αυτή τη περίπτωση κανένα μεταγενέστερο required module δεν ελέγχεται). Πιθανή αποτυχία αυτού του module δεν θεωρείται μοιραία για την ικανοποίηση της εφαρμογής αυτού του module-type.
  4. Optional (προαιρετικό) - Όπως και το όνομά του υπονοεί αυτό το control flag χαρακτηρίζει το module σαν όχι κρίσιμο για την επιτυχία ή αποτυχία της αίτησης του χρήστη για παροχή συγκεκριμένης υπηρεσίας. Ωστόσο,στην απουσία οποιονδήποτε επιτυχιών προηγουμένων ή μεταγενέστερων στοιβαγμένων modules η φύση της απάντησης στην εφαρμογή θα καθοριστεί από αυτό το module.

Το 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.

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