Σειρά RHCSA: Ρύθμιση ελέγχου ταυτότητας βάσει LDAP στο RHEL 7 - Μέρος 14


Θα ξεκινήσουμε αυτό το άρθρο περιγράφοντας ορισμένα βασικά στοιχεία του LDAP (τι είναι, πού χρησιμοποιείται και γιατί) και θα δείξουμε πώς να ρυθμίσετε έναν διακομιστή LDAP και να ρυθμίσετε έναν πελάτη για έλεγχο ταυτότητας με χρήση του Συστήματα Red Hat Enterprise Linux 7.

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

Για τον ίδιο λόγο, θα σημειώσετε ότι αποφάσισα να παραλείψω για λόγους συντομίας αρκετές αναφορές σε σελίδες man των εργαλείων LDAP, αλλά οι αντίστοιχες εξηγήσεις βρίσκονται σε απόσταση αναπνοής (man ldapadd, για παράδειγμα).

Τούτου λεχθέντος, ας ξεκινήσουμε.

Το περιβάλλον δοκιμών μας

Το περιβάλλον δοκιμής μας αποτελείται από δύο κουτιά RHEL 7:


Server: 192.168.0.18. FQDN: rhel7.mydomain.com
Client: 192.168.0.20. FQDN: ldapclient.mydomain.com

Εάν θέλετε, μπορείτε να χρησιμοποιήσετε το μηχάνημα που είναι εγκατεστημένο στο Μέρος 12: Αυτοματοποιήστε τις εγκαταστάσεις RHEL 7 χρησιμοποιώντας το Kickstart ως πελάτη.

Τι είναι το LDAP;

Το LDAP σημαίνει Lightweight Directory Access Protocol και αποτελείται από ένα σύνολο πρωτοκόλλων που επιτρέπει σε έναν πελάτη να έχει πρόσβαση, μέσω δικτύου, σε κεντρικά αποθηκευμένες πληροφορίες (όπως ένας κατάλογος κελύφους σύνδεσης , απόλυτες διαδρομές προς οικιακούς καταλόγους και άλλες τυπικές πληροφορίες χρήστη του συστήματος, για παράδειγμα) που θα πρέπει να είναι προσβάσιμες από διαφορετικά μέρη ή διαθέσιμες σε μεγάλο αριθμό τελικών χρηστών (άλλο παράδειγμα θα ήταν ένας κατάλογος διευθύνσεων σπιτιού και αριθμών τηλεφώνου όλων των υπαλλήλων στο μια εταιρία).

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

Το παρακάτω διάγραμμα προσφέρει ένα απλοποιημένο διάγραμμα LDAP και περιγράφεται παρακάτω με περισσότερες λεπτομέρειες:

Αναλυτική επεξήγηση του παραπάνω διαγράμματος.

  1. Μια καταχώρηση σε έναν κατάλογο LDAP αντιπροσωπεύει μια ενιαία μονάδα ή πληροφορίες και προσδιορίζεται μοναδικά από αυτό που ονομάζεται Διακεκριμένο Όνομα.
  2. Ένα χαρακτηριστικό είναι ένα τμήμα πληροφοριών που σχετίζεται με μια καταχώριση (για παράδειγμα, διευθύνσεις, διαθέσιμοι αριθμοί τηλεφώνου επικοινωνίας και διευθύνσεις ηλεκτρονικού ταχυδρομείου).
  3. Σε κάθε χαρακτηριστικό εκχωρείται μία ή περισσότερες τιμές που αποτελούνται από μια λίστα διαχωρισμένη με διάστημα. Μια τιμή που είναι μοναδική ανά καταχώρηση ονομάζεται Σχετικό Διακεκριμένο Όνομα.

Τούτου λεχθέντος, ας προχωρήσουμε με τις εγκαταστάσεις διακομιστή και πελάτη.

Εγκατάσταση και διαμόρφωση διακομιστή και πελάτη LDAP

Στο RHEL 7, το LDAP υλοποιείται από το OpenLDAP. Για να εγκαταστήσετε τον διακομιστή και τον πελάτη, χρησιμοποιήστε τις ακόλουθες εντολές, αντίστοιχα:


yum update && yum install openldap openldap-clients openldap-servers
yum update && yum install openldap openldap-clients nss-pam-ldapd

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

1. Βεβαιωθείτε ότι το SELinux δεν παρεμποδίζει, ενεργοποιώντας τα ακόλουθα booleans επίμονα, τόσο στον διακομιστή όσο και στον πελάτη:


setsebool -P allow_ypbind=0 authlogin_nsswitch_use_ldap=0

Όπου απαιτείται allow_ypbind για έλεγχο ταυτότητας που βασίζεται σε LDAP και το authlogin_nsswitch_use_ldap ενδέχεται να απαιτείται από ορισμένες εφαρμογές.

2. Ενεργοποιήστε και ξεκινήστε την υπηρεσία:


systemctl enable slapd.service
systemctl start slapd.service

Λάβετε υπόψη ότι μπορείτε επίσης να απενεργοποιήσετε, να επανεκκινήσετε ή να σταματήσετε την υπηρεσία με το systemctl επίσης:


systemctl disable slapd.service
systemctl restart slapd.service
systemctl stop slapd.service

3. Δεδομένου ότι η υπηρεσία slapd εκτελείται ως χρήστης ldap (την οποία μπορείτε να επαληθεύσετε με ps -e -o pid,uname,comm | grep slapd ), αυτός ο χρήστης θα πρέπει να είναι κάτοχος του καταλόγου /var/lib/ldap, προκειμένου ο διακομιστής να μπορεί να τροποποιεί καταχωρήσεις που δημιουργούνται από εργαλεία διαχείρισης που μπορούν να εκτελεστούν μόνο ως root (περισσότερα σε ένα λεπτό).

Πριν αλλάξετε την ιδιοκτησία αυτού του καταλόγου αναδρομικά, αντιγράψτε το δείγμα αρχείου διαμόρφωσης βάσης δεδομένων για slapd σε αυτό:


cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown -R ldap:ldap /var/lib/ldap

4. Ρυθμίστε έναν χρήστη διαχειριστή OpenLDAP και εκχωρήστε έναν κωδικό πρόσβασης:


slappasswd

όπως φαίνεται στην επόμενη εικόνα:

και δημιουργήστε ένα αρχείο LDIF (ldaprootpasswd.ldif) με τα ακόλουθα περιεχόμενα:


dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}PASSWORD

που :

  1. Ο PASSWORD είναι η κατακερματισμένη συμβολοσειρά που ελήφθη νωρίτερα.
  2. Το cn=config υποδεικνύει καθολικές επιλογές διαμόρφωσης.
  3. Η olcDatabase υποδεικνύει ένα συγκεκριμένο όνομα παρουσίας βάσης δεδομένων και μπορεί να βρίσκεται συνήθως στο /etc/openldap/slapd.d/cn=config.

Αναφερόμενοι στο θεωρητικό υπόβαθρο που δόθηκε προηγουμένως, το αρχείο ldaprootpasswd.ldif θα προσθέσει μια καταχώρηση στον κατάλογο LDAP. Σε αυτήν την καταχώρηση, κάθε γραμμή αντιπροσωπεύει ένα χαρακτηριστικό: ζεύγος τιμών (όπου dn, changetype, add και olcRootPW είναι τα χαρακτηριστικά και οι συμβολοσειρές στα δεξιά κάθε άνω και κάτω τελείας είναι οι αντίστοιχες τιμές τους).

Μπορεί να θέλετε να το έχετε υπόψη σας καθώς προχωράμε παρακάτω και σημειώστε ότι χρησιμοποιούμε τα ίδια κοινά ονόματα (cn=) σε όλο το υπόλοιπο αυτού του άρθρου, όπου κάθε βήμα εξαρτάται από το προηγούμενο .

5. Τώρα, προσθέστε την αντίστοιχη καταχώρηση LDAP, προσδιορίζοντας το URI που αναφέρεται στον διακομιστή ldap, όπου επιτρέπονται μόνο τα πεδία πρωτοκόλλου/κεντρικού υπολογιστή/θύρας.


ldapadd -H ldapi:/// -f ldaprootpasswd.ldif 

Η έξοδος πρέπει να είναι παρόμοια με:

και εισαγάγετε ορισμένους βασικούς ορισμούς LDAP από τον κατάλογο /etc/openldap/schema:


for def in cosine.ldif nis.ldif inetorgperson.ldif; do ldapadd -H ldapi:/// -f /etc/openldap/schema/$def; done

6. Ζητήστε από το LDAP να χρησιμοποιήσει τον τομέα σας στη βάση δεδομένων του.

Δημιουργήστε ένα άλλο αρχείο LDIF, το οποίο θα ονομάσουμε ldapdomain.ldif, με τα ακόλουθα περιεχόμενα, αντικαθιστώντας τον τομέα σας (στο στοιχείο Domain dc=) και τον κωδικό πρόσβασης, ανάλογα με την περίπτωση:


dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth"
  read by dn.base="cn=Manager,dc=mydomain,dc=com" read by * none

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=mydomain,dc=com

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=mydomain,dc=com

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}PASSWORD

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by
  dn="cn=Manager,dc=mydomain,dc=com" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=Manager,dc=mydomain,dc=com" write by * read

Στη συνέχεια, φορτώστε το ως εξής:


ldapmodify -H ldapi:/// -f ldapdomain.ldif

7. Τώρα είναι ώρα να προσθέσουμε κάποιες καταχωρίσεις στον κατάλογό μας LDAP. Τα χαρακτηριστικά και οι τιμές διαχωρίζονται με άνω και κάτω τελεία (:) στο ακόλουθο αρχείο, το οποίο θα ονομάσουμε baseldapdomain.ldif:


dn: dc=mydomain,dc=com
objectClass: top
objectClass: dcObject
objectclass: organization
o: mydomain com
dc: mydomain

dn: cn=Manager,dc=mydomain,dc=com
objectClass: organizationalRole
cn: Manager
description: Directory Manager

dn: ou=People,dc=mydomain,dc=com
objectClass: organizationalUnit
ou: People

dn: ou=Group,dc=mydomain,dc=com
objectClass: organizationalUnit
ou: Group

Προσθέστε τις εγγραφές στον κατάλογο LDAP:


ldapadd -x -D cn=Manager,dc=mydomain,dc=com -W -f baseldapdomain.ldif

8. Δημιουργήστε έναν χρήστη LDAP που ονομάζεται ldapuser (adduser ldapuser) και, στη συνέχεια, δημιουργήστε τους ορισμούς για μια ομάδα LDAP στο ldapgroup.ldif.


adduser ldapuser
vi ldapgroup.ldif

Προσθέστε το ακόλουθο περιεχόμενο.


dn: cn=Manager,ou=Group,dc=mydomain,dc=com
objectClass: top
objectClass: posixGroup
gidNumber: 1004

όπου gidNumber είναι το GID στο /etc/group για το ldapuser) και φορτώστε το:


ldapadd -x -W -D "cn=Manager,dc=mydomain,dc=com" -f ldapgroup.ldif

9. Προσθέστε ένα αρχείο LDIF με τους ορισμούς για το χρήστη ldapuser (ldapuser.ldif):


dn: uid=ldapuser,ou=People,dc=mydomain,dc=com
objectClass: top
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
cn: ldapuser
uid: ldapuser
uidNumber: 1004
gidNumber: 1004
homeDirectory: /home/ldapuser
userPassword: {SSHA}fiN0YqzbDuDI0Fpqq9UudWmjZQY28S3M
loginShell: /bin/bash
gecos: ldapuser
shadowLastChange: 0
shadowMax: 0
shadowWarning: 0

και φορτώστε το:


ldapadd -x -D cn=Manager,dc=mydomain,dc=com -W -f ldapuser.ldif

Ομοίως, μπορείτε να διαγράψετε την καταχώριση χρήστη που μόλις δημιουργήσατε:


ldapdelete -x -W -D cn=Manager,dc=mydomain,dc=com "uid=ldapuser,ou=People,dc=mydomain,dc=com"

10. Επιτρέψτε την επικοινωνία μέσω του τείχους προστασίας:


firewall-cmd --add-service=ldap

11. Τέλος, αλλά εξίσου σημαντικό, επιτρέψτε στον πελάτη να πραγματοποιήσει έλεγχο ταυτότητας χρησιμοποιώντας LDAP.

Για να μας βοηθήσετε σε αυτό το τελευταίο βήμα, θα χρησιμοποιήσουμε το βοηθητικό πρόγραμμα authconfig (μια διεπαφή για τη διαμόρφωση των πόρων ελέγχου ταυτότητας συστήματος).

Χρησιμοποιώντας την ακόλουθη εντολή, ο αρχικός κατάλογος για τον χρήστη που ζητήθηκε δημιουργείται εάν δεν υπάρχει μετά την επιτυχία του ελέγχου ταυτότητας έναντι του διακομιστή LDAP:


authconfig --enableldap --enableldapauth --ldapserver=rhel7.mydomain.com --ldapbasedn="dc=mydomain,dc=com" --enablemkhomedir --update

Περίληψη

Σε αυτό το άρθρο εξηγήσαμε πώς να ρυθμίσετε τον βασικό έλεγχο ταυτότητας έναντι ενός διακομιστή LDAP. Για περαιτέρω διαμόρφωση της ρύθμισης που περιγράφεται στον παρόντα οδηγό, ανατρέξτε στο Κεφάλαιο 13 – Διαμόρφωση LDAP στον οδηγό διαχειριστή συστήματος RHEL 7, δίνοντας ιδιαίτερη προσοχή στις ρυθμίσεις ασφαλείας χρησιμοποιώντας το TLS.

Μη διστάσετε να αφήσετε τυχόν ερωτήσεις που μπορεί να έχετε χρησιμοποιώντας την παρακάτω φόρμα σχολίων.