Πώς να ρυθμίσετε και να χρησιμοποιήσετε το PAM στο Linux


Το Linux-PAM (συντομογραφία του Pluggable Authentication Modules που προέκυψε από την αρχιτεκτονική Unix-PAM) είναι μια ισχυρή σουίτα κοινόχρηστων βιβλιοθηκών που χρησιμοποιούνται για τον δυναμικό έλεγχο ταυτότητας ενός χρήστη σε εφαρμογές (ή υπηρεσίες). ) σε σύστημα Linux.

Ενσωματώνει πολλαπλές μονάδες ελέγχου ταυτότητας χαμηλού επιπέδου σε ένα API υψηλού επιπέδου που παρέχει υποστήριξη δυναμικού ελέγχου ταυτότητας για εφαρμογές. Αυτό επιτρέπει στους προγραμματιστές να γράφουν εφαρμογές που απαιτούν έλεγχο ταυτότητας, ανεξάρτητα από το υποκείμενο σύστημα ελέγχου ταυτότητας.

Πολλές σύγχρονες διανομές Linux υποστηρίζουν το Linux-PAM (εφεξής "PAM ") από προεπιλογή. Σε αυτό το άρθρο, θα εξηγήσουμε πώς να ρυθμίσετε το προηγμένο PAM σε συστήματα Ubuntu και CentOS.

Πριν προχωρήσουμε περαιτέρω, σημειώστε ότι:

  • Ως διαχειριστής συστήματος, το πιο σημαντικό πράγμα είναι να καταλάβετε πώς τα αρχεία διαμόρφωσης PAM ορίζουν τη σύνδεση μεταξύ εφαρμογών (υπηρεσιών) και συνδεόμενων μονάδων ελέγχου ταυτότητας (PAM) που εκτελούν τις πραγματικές εργασίες ελέγχου ταυτότητας. Δεν χρειάζεται απαραίτητα να κατανοήσετε την εσωτερική λειτουργία του PAM.
  • Το PAM έχει τη δυνατότητα να αλλάξει σοβαρά την ασφάλεια του συστήματος Linux σας. Η εσφαλμένη διαμόρφωση μπορεί να απενεργοποιήσει την πρόσβαση στο σύστημά σας μερικώς ή πλήρως. Για παράδειγμα, μια τυχαία διαγραφή ενός αρχείου(ων) διαμόρφωσης στο /etc/pam.d/* και/ή /etc/pam.conf μπορεί να σας κλειδώσει από το δικό του σύστημα!

Πώς να ελέγξετε ότι ένα πρόγραμμα είναι ενήμερο για το PAM

Για να χρησιμοποιήσετε το PAM, μια εφαρμογή/πρόγραμμα πρέπει να είναι "ενημερωμένη για το PAM". Πρέπει να έχει γραφτεί και μεταγλωττιστεί ειδικά για να χρησιμοποιεί το PAM. Για να μάθετε εάν ένα πρόγραμμα είναι "ενημερωμένο για PAM " ή όχι, ελέγξτε εάν έχει μεταγλωττιστεί με τη βιβλιοθήκη PAM χρησιμοποιώντας την εντολή ldd.

Για παράδειγμα sshd:

sudo ldd /usr/sbin/sshd | grep libpam.so

	libpam.so.0 => /lib/x86_64-linux-gnu/libpam.so.0 (0x00007effddbe2000)

Πώς να ρυθμίσετε το PAM στο Linux

Το κύριο αρχείο διαμόρφωσης για το PAM είναι το /etc/pam.conf και ο κατάλογος /etc/pam.d/ περιέχει τα αρχεία διαμόρφωσης PAM για κάθε εφαρμογή/υπηρεσία με γνώση PAM. Το PAM θα αγνοήσει το αρχείο εάν υπάρχει ο κατάλογος.

Η σύνταξη για το κύριο αρχείο ρυθμίσεων είναι η εξής. Το αρχείο αποτελείται από μια λίστα κανόνων γραμμένων σε μία μόνο γραμμή (μπορείτε να επεκτείνετε τους κανόνες χρησιμοποιώντας τον χαρακτήρα διαφυγής “\ ”) και πριν από τα σχόλια “# ” σημειώνει και επεκτείνεται στο επόμενο άκρο της γραμμής.

Η μορφή κάθε κανόνα είναι μια συλλογή διακριτικών διαχωρισμένων κενών (οι τρεις πρώτοι δεν έχουν διάκριση πεζών-κεφαλαίων). Θα εξηγήσουμε αυτά τα διακριτικά σε επόμενες ενότητες.

service type control-flag module module-arguments 

που :

  • υπηρεσία: πραγματικό όνομα εφαρμογής.
  • τύπος: τύπος/πλαίσιο/διεπαφή ενότητας.
  • control-flag: υποδεικνύει τη συμπεριφορά του PAM-API σε περίπτωση που η λειτουργική μονάδα δεν επιτύχει στην εργασία ελέγχου ταυτότητας.
  • module: το απόλυτο όνομα αρχείου ή το σχετικό όνομα διαδρομής του PAM.
  • ορίσματα μονάδων: λίστα διακριτικών διαχωρισμένη από χώρο για τον έλεγχο της συμπεριφοράς της μονάδας.

Η σύνταξη κάθε αρχείου στο /etc/pam.d/ είναι παρόμοια με αυτή του κύριου αρχείου και αποτελείται από γραμμές της ακόλουθης μορφής:

type control-flag module module-arguments

Αυτό είναι ένα παράδειγμα ορισμού κανόνα (χωρίς όρισμα-ορίσματα) που βρίσκεται στο αρχείο /etc/pam.d/sshd, το οποίο δεν επιτρέπει συνδέσεις χωρίς root όταν /etc/nologin υπάρχει:

account required pam_nologin.so

Κατανόηση των ομάδων διαχείρισης PAM και των σημαιών ελέγχου

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

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

  • λογαριασμός: παροχή υπηρεσιών για επαλήθευση λογαριασμού: έχει λήξει ο κωδικός πρόσβασης του χρήστη; επιτρέπεται σε αυτόν τον χρήστη πρόσβαση στην υπηρεσία που ζητήθηκε;.
  • έλεγχος ταυτότητας: έλεγχος ταυτότητας χρήστη και ρύθμιση διαπιστευτηρίων χρήστη.
  • κωδικός πρόσβασης: είναι υπεύθυνοι για την ενημέρωση των κωδικών πρόσβασης χρηστών και συνεργάζονται με μονάδες ελέγχου ταυτότητας.
  • συνεδρία: διαχείριση ενεργειών που εκτελούνται στην αρχή και στο τέλος μιας περιόδου σύνδεσης.

Τα αρχεία αντικειμένων με δυνατότητα φόρτωσης PAM (οι λειτουργικές μονάδες) πρέπει να βρίσκονται στον ακόλουθο κατάλογο: /lib/security/ ή /lib64/security ανάλογα με η αρχιτεκτονική.

Οι υποστηριζόμενες σημαίες ελέγχου είναι:

  • απαιτούμενο: η αποτυχία επιστρέφει αμέσως τον έλεγχο στην εφαρμογή υποδεικνύοντας τη φύση της πρώτης αποτυχίας λειτουργικής μονάδας.
  • απαιτείται: όλες αυτές οι λειτουργικές μονάδες απαιτούνται για επιτυχία, ώστε το libpam να επιστρέψει την επιτυχία στην εφαρμογή.
  • επαρκές: δεδομένου ότι όλες οι προηγούμενες ενότητες έχουν πετύχει, η επιτυχία αυτής της ενότητας οδηγεί σε άμεση και επιτυχή επιστροφή στην εφαρμογή (η αποτυχία αυτής της ενότητας αγνοείται).
  • προαιρετικό: η επιτυχία ή η αποτυχία αυτής της ενότητας γενικά δεν καταγράφεται.

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

  • συμπερίληψη και υποστοίβα: περιλαμβάνει όλες τις γραμμές δεδομένου τύπου από το αρχείο διαμόρφωσης που έχει καθοριστεί ως όρισμα σε αυτό το στοιχείο ελέγχου.

Πώς να περιορίσετε την πρόσβαση root στην υπηρεσία SSH μέσω PAM

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

Μπορούμε να χρησιμοποιήσουμε τη λειτουργική μονάδα /lib/security/pam_listfile.so η οποία προσφέρει μεγάλη ευελιξία στον περιορισμό των προνομίων συγκεκριμένων λογαριασμών. Ανοίξτε και επεξεργαστείτε το αρχείο για την υπηρεσία προορισμού στον κατάλογο /etc/pam.d/ όπως φαίνεται.

sudo vim /etc/pam.d/sshd
OR
sudo vim /etc/pam.d/login

Προσθέστε αυτόν τον κανόνα και στα δύο αρχεία.

auth    required       pam_listfile.so \
        onerr=succeed  item=user  sense=deny  file=/etc/ssh/deniedusers

Εξηγώντας τα διακριτικά στον παραπάνω κανόνα:

  • auth: είναι ο τύπος της ενότητας (ή το πλαίσιο).
  • απαιτείται: είναι μια σημαία ελέγχου που σημαίνει ότι εάν χρησιμοποιηθεί η λειτουργική μονάδα, πρέπει να περάσει διαφορετικά το συνολικό αποτέλεσμα θα αποτύχει, ανεξάρτητα από την κατάσταση άλλων λειτουργικών μονάδων.
  • pam_listfile.so: είναι μια λειτουργική μονάδα που παρέχει έναν τρόπο άρνησης ή επιτρεπόμενων υπηρεσιών που βασίζονται σε ένα αυθαίρετο αρχείο.
  • onerr=succeed: όρισμα λειτουργικής μονάδας.
  • item=user: όρισμα λειτουργικής μονάδας που καθορίζει τι αναφέρεται στο αρχείο και πρέπει να ελεγχθεί.
  • sense=deny: όρισμα λειτουργικής μονάδας που καθορίζει την ενέργεια που πρέπει να γίνει εάν βρεθεί στο αρχείο, εάν το στοιχείο ΔΕΝ βρεθεί στο αρχείο, τότε ζητείται η αντίθετη ενέργεια.
  • file=/etc/ssh/denieusers: όρισμα λειτουργικής μονάδας που καθορίζει το αρχείο που περιέχει ένα στοιχείο ανά γραμμή.

Στη συνέχεια, πρέπει να δημιουργήσουμε το αρχείο /etc/ssh/denieduers και να προσθέσουμε το όνομα root σε αυτό:

sudo vim /etc/ssh/deniedusers

Αποθηκεύστε τις αλλαγές και κλείστε το αρχείο και, στη συνέχεια, ορίστε τα απαιτούμενα δικαιώματα σε αυτό:

sudo chmod 600 /etc/ssh/deniedusers

Από εδώ και στο εξής, ο παραπάνω κανόνας θα λέει στο PAM να συμβουλευτεί το αρχείο /etc/ssh/deniedusers και να αρνηθεί την πρόσβαση στο SSH και τις υπηρεσίες σύνδεσης για οποιονδήποτε χρήστη που αναφέρεται στη λίστα.

Πώς να ρυθμίσετε το Advanced PAM στο Linux

Για να γράψετε πιο σύνθετους κανόνες PAM, μπορείτε να χρησιμοποιήσετε έγκυρες σημαίες ελέγχου στην ακόλουθη μορφή:

type [value1=action1 value2=action2 …] module module-arguments

Όπου το valueN αντιστοιχεί στον κωδικό επιστροφής από τη συνάρτηση που καλείται στη λειτουργική μονάδα για την οποία έχει οριστεί η γραμμή. Μπορείτε να βρείτε υποστηριζόμενες τιμές από τον on-line Οδηγό διαχειριστή PAM. Μια ειδική τιμή είναι προεπιλεγμένη, η οποία σημαίνει ότι όλες οι τιμές N δεν αναφέρονται ρητά.

Η actionN μπορεί να λάβει μία από τις ακόλουθες μορφές:

  • αγνοήστε: εάν αυτή η ενέργεια χρησιμοποιείται με μια στοίβα λειτουργικών μονάδων, η κατάσταση επιστροφής της λειτουργικής μονάδας δεν θα συμβάλει στον κωδικό επιστροφής που λαμβάνει η εφαρμογή.
  • κακό: υποδηλώνει ότι ο κωδικός επιστροφής πρέπει να θεωρείται ως ενδεικτικός της αποτυχίας της λειτουργικής μονάδας. Εάν αυτή η μονάδα είναι η πρώτη στη στοίβα που αποτυγχάνει, η τιμή κατάστασής της θα χρησιμοποιηθεί για αυτήν ολόκληρης της στοίβας.
  • die: ισοδυναμεί με κακό, αλλά μπορεί να τερματίσει τη στοίβα λειτουργιών και το PAM να επιστρέψει αμέσως στην εφαρμογή.
  • ok: αυτό καθοδηγεί το PAM ότι ο διαχειριστής του συστήματος πιστεύει ότι αυτός ο κωδικός επιστροφής θα πρέπει να συνεισφέρει απευθείας στον κωδικό επιστροφής της πλήρους στοίβας των λειτουργικών μονάδων.
  • ολοκληρώθηκε: ισοδυναμεί με ok, αλλά μπορεί να τερματίσει τη στοίβα λειτουργιών και το PAM να επιστρέψει αμέσως στην εφαρμογή.
  • N (ανυπόγραφος ακέραιος αριθμός): ισοδυναμεί με ok αλλά μπορεί να μεταπηδήσει πάνω από τις επόμενες N λειτουργικές μονάδες στη στοίβα.
  • Επαναφορά: αυτή η ενέργεια διαγράφει όλη τη μνήμη από την κατάσταση της στοίβας λειτουργιών και επανεκκινεί με την επόμενη στοιβαγμένη λειτουργική μονάδα.

Καθεμία από τις τέσσερις λέξεις-κλειδιά: απαιτείται; απαιτούμενο; επαρκής; και προαιρετικά, έχουν μια ισοδύναμη έκφραση όσον αφορά τη σύνταξη [...], η οποία σας επιτρέπει να γράψετε πιο περίπλοκους κανόνες και είναι:

  • απαιτείται: [success=ok new_authtok_reqd=ok ignore=ignore default=bad]
  • απαιτούμενο: [success=ok new_authtok_reqd=ok ignore=ignore default=die]
  • επαρκές: [success=done new_authtok_reqd=done default=ignore]
  • προαιρετικό: [success=ok new_authtok_reqd=ok default=ignore]

Το παρακάτω είναι ένα παράδειγμα από ένα σύγχρονο σύστημα CentOS 7. Ας εξετάσουμε αυτούς τους κανόνες από το αρχείο PAM /etc/pam.d/postlogin:

#%PAM-1.0
This file is auto-generated.
User changes will be destroyed the next time authconfig is run.
session     [success=1 default=ignore] pam_succeed_if.so service !~ gdm* service !~ su* quiet
session     [default=1]   pam_lastlog.so nowtmp showfailed
session     optional      pam_lastlog.so silent noupdate showfailed

Ακολουθεί ένα άλλο παράδειγμα διαμόρφωσης από το αρχείο PAM /etc/pam.d/smartcard-auth:

#%PAM-1.0
This file is auto-generated.
User changes will be destroyed the next time authconfig is run.
auth        required      pam_env.so
auth        [success=done ignore=ignore default=die] pam_pkcs11.so nodebug wait_for_card
auth        required      pam_deny.so

account     required      pam_unix.so
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 1000 quiet
account     required      pam_permit.so

password    required      pam_pkcs11.so

session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
-session     optional      pam_systemd.so
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so

Για περισσότερες πληροφορίες, ανατρέξτε στη σελίδα χρήστη pam.d:

man pam.d 

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

Περίληψη

Το PAM είναι ένα ισχυρό API υψηλού επιπέδου που επιτρέπει προγράμματα που βασίζονται στον έλεγχο ταυτότητας σε αυθεντικούς χρήστες σε εφαρμογές σε σύστημα Linux. Είναι ισχυρό αλλά πολύ δύσκολο στην κατανόηση και χρήση.

Σε αυτό το άρθρο, εξηγήσαμε πώς να ρυθμίσετε τις προηγμένες δυνατότητες του PAM στο Ubuntu και το CentOS. Εάν έχετε ερωτήσεις ή σχόλια να μοιραστείτε, χρησιμοποιήστε την παρακάτω φόρμα σχολίων.