Η αντιγραφή μιας βάσης δεδομένων principal Kerberos μεταξύ δύο εξυπηρετητών μπορεί να είναι πολύπλοκη διαδικασία, ενώ επίσης προσθέτει μία ακόμη βάση δεδομένων χρήστη στο δίκτυό σας. Ευτυχώς, το Kerberos του MIT μπορεί να ρυθμιστεί έτσι ώστε να χρησιμοποιεί έναν κατάλογο LDAP ως βάση δεδομένων principal. Αυτή η ενότητα καλύπτει τη διαδικασία ρύθμισης ενός πρωτεύοντος και ενός δευτερεύοντος εξυπηρετητή kerberos ώστε να χρησιμοποιούν το OpenLDAP για τη βάση δεδομένων principal.
Καταρχάς, πρέπει να φορτωθεί το κατάλληλο σχήμα neσε έναν εξυπηρετητή OpenLDAP με δικτυακή σύνδεση στα πρωτεύοντα και δευτερεύοντα KDC. Στο υπόλοιπο αυτής της ενότητας υποθέτουμε ότι έχετε ρυθμίσει την αντιγραφή του LDAP μεταξύ δύο τουλάχιστον εξυπηρετητών. Για πληροφορίες σχετικά με τη ρύθμιση του OpenLDAP δείτε το “Εξυπηρετητής OpenLDAP”.
Επίσης, απαιτείται η ρύθμιση του OpenLDAP για συνδέσεις TLS και SSL, έτσι ώστε να κρυπτογραφείται η κίνηση μεταξύ KDC και εξυπηρετητή LDAP. Δείτε το “TLS και SSL” για λεπτομέρειες.
-
Για να φορτώσετε το σχήμα στο LDAP, εγκαταστήστε το πακέτο krb5-kdc-ldap στον εξυπηρετητή LDAP. Από το τερματικό, δίνετε:
sudo apt-get install krb5-kdc-ldap -
Στη συνέχεια, εξάγετε το αρχείο
kerberos.schema.gz:sudo gzip -d /usr/share/doc/krb5-kdc-ldap/kerberos.schema.gz sudo cp /usr/share/doc/krb5-kdc-ldap/kerberos.schema /etc/ldap/schema/
-
Το σχήμα του kerberos πρέπει να προστεθεί στο δέντρο του cn=config. Η διαδικασία προσθήκης νέου σχήματος στο slapd περιγράφεται και στο “Περαιτέρω ρυθμίσεις”.
-
Καταρχάς, δημιουργήστε ένα αρχείο ρυθμίσεων με όνομα
schema_convert.conf, ή κάτι εξίσου περιγραφικό, που θα περιέχει τις ακόλουθες γραμμές:include /etc/ldap/schema/core.schema include /etc/ldap/schema/collective.schema include /etc/ldap/schema/corba.schema include /etc/ldap/schema/cosine.schema include /etc/ldap/schema/duaconf.schema include /etc/ldap/schema/dyngroup.schema include /etc/ldap/schema/inetorgperson.schema include /etc/ldap/schema/java.schema include /etc/ldap/schema/misc.schema include /etc/ldap/schema/nis.schema include /etc/ldap/schema/openldap.schema include /etc/ldap/schema/ppolicy.schema include /etc/ldap/schema/kerberos.schema
-
Δημιουργήστε έναν προσωρινό κατάλογο για τα αρχεία LDIF:
mkdir /tmp/ldif_output -
Τώρα, χρησιμοποιήστε το slapcat για να μετατρέψετε τα αρχεία σχημάτων:
slapcat -f schema_convert.conf -F /tmp/ldif_output -n0 -s "cn={12}kerberos,cn=schema,cn=config" > /tmp/cn=kerberos.ldifΑλλάξτε τα ονόματα των αρχείων και διαδρομών αν έχετε χρησιμοποιήσει διαφορετικά.
-
Τροποποιήστε το αρχείο
/tmp/cn\=kerberos.ldifπου προκύπτει, αλλάζοντας τα ακόλουθα γνωρίσματα:dn: cn=kerberos,cn=schema,cn=config ... cn: kerberos
Και αφαιρέστε τις ακόλουθες γραμμές από το τέλος του αρχείου:
structuralObjectClass: olcSchemaConfig entryUUID: 18ccd010-746b-102d-9fbe-3760cca765dc creatorsName: cn=config createTimestamp: 20090111203515Z entryCSN: 20090111203515.326445Z#000000#000#000000 modifiersName: cn=config modifyTimestamp: 20090111203515Z
Οι τιμές των γνωρισμάτων μπορεί να διαφέρουν, εσείς απλά βεβαιωθείτε ότι αφαιρέθηκαν τα συγκεκριμένα γνωρίσματα.
-
Φορτώστε το νέο αρχείο με το ldapadd:
ldapadd -x -D cn=admin,cn=config -W -f /tmp/cn\=kerberos.ldif -
Προσθέστε ένα ευρετήριο για το γνώρισμα krb5principalname:
ldapmodify -x -D cn=admin,cn=config -W
Enter LDAP Password:dn: olcDatabase={1}hdb,cn=config add: olcDbIndex olcDbIndex: krbPrincipalName eq,pres,submodifying entry "olcDatabase={1}hdb,cn=config" -
Τέλος, ενημερώστε τις Λίστες Ελέγχου Πρόσβασης (ACL):
ldapmodify -x -D cn=admin,cn=config -W
Enter LDAP Password:dn: olcDatabase={1}hdb,cn=config replace: olcAccess olcAccess: to attrs=userPassword,shadowLastChange,krbPrincipalKey by dn="cn=admin,dc=exampl e,dc=com" write by anonymous auth by self write by * none - add: olcAccess olcAccess: to dn.base="" by * read - add: olcAccess olcAccess: to * by dn="cn=admin,dc=example,dc=com" write by * readmodifying entry "olcDatabase={1}hdb,cn=config"
-
Αυτό ήταν, ο κατάλογος LDAP είναι τώρα έτοιμος να λειτουργήσει ως βάση δεδομένων principal Kerberos.
Αφού ρυθμιστεί το OpenLDAP θα πρέπει να ρυθμιστεί και το KDC.
-
Καταρχάς, εγκαταστήστε τα απαραίτητα πακέτα από το τερματικό, εισάγοντας:
sudo apt-get install krb5-kdc krb5-admin-server krb5-kdc-ldap -
Τώρα, τροποποιήστε το
/etc/krb5.conf, προσθέτοντας τις ακόλουθες επιλογές στα κατάλληλα σημεία:[libdefaults] default_realm = EXAMPLE.COM ... [realms] EXAMPLE.COM = { kdc = kdc01.example.com kdc = kdc02.example.com admin_server = kdc01.example.com admin_server = kdc02.example.com default_domain = example.com database_module = openldap_ldapconf } ... [domain_realm] .example.com = EXAMPLE.COM ... [dbdefaults] ldap_kerberos_container_dn = dc=example,dc=com [dbmodules] openldap_ldapconf = { db_library = kldap ldap_kdc_dn = "cn=admin,dc=example,dc=com" # this object needs to have read rights on # the realm container, principal container and realm sub-trees ldap_kadmind_dn = "cn=admin,dc=example,dc=com" # this object needs to have read and write rights on # the realm container, principal container and realm sub-trees ldap_service_password_file = /etc/krb5kdc/service.keyfile ldap_servers = ldaps://ldap01.example.com ldaps://ldap02.example.com ldap_conns_per_server = 5 }
Αντικαταστήστε τα example.com, dc=example,dc=com, cn=admin,dc=example,dc=com, and ldap01.example.com με το κατάλληλο domain, αντικείμενο LDAP, και εξυπηρετητή LDAP.
-
Στη συνέχεια, χρησιμοποιήστε το kdb5_ldap_util για να δημιουργήσετε το realm:
sudo kdb5_ldap_util -D cn=admin,dc=example,dc=com create -subtrees dc=example,dc=com -r EXAMPLE.COM -s -H ldap://ldap01.example.com -
Αποθηκεύστε κρυφά (stash) τον κωδικό που χρησιμοποιείται σε σύνδεση με τον εξυπηρετητή LDAP. Πρόκειται για τον κωδικό που χρησιμοποιείται στις επιλογές ldap_kdc_dn και ldap_kadmin_dn του
/etc/krb5.conf:sudo kdb5_ldap_util -D cn=admin,dc=example,dc=com stashsrvpw -f /etc/krb5kdc/service.keyfile cn=admin,dc=example,dc=com -
Αντιγράψτε το πιστοποιητικό CA από τον εξυπηρετητή LDAP:
scp ldap01:/etc/ssl/certs/cacert.pem . sudo cp cacert.pem /etc/ssl/certs
Και αλλάξτε το
/etc/ldap/ldap.confέτσι ώστε να χρησιμοποιεί το πιστοποιητικό:TLS_CACERT /etc/ssl/certs/cacert.pem
Το πιστοποιητικό θα πρέπει να αντιγραφεί και στο δευτερεύον KDC, για να επιτρέπεται η σύνδεση στους εξυπηρετητές LDAP μέσω LDAPS.
Τώρα, μπορείτε να προσθέσετε τους principal Kerberos στη βάση δεδομένων LDAP. Θα αντιγραφούν και στους υπόλοιπους εξυπηρετητές LDAP που έχουν ρυθμιστεί για αντιγραφή. Για να προσθέσετε ένα principal χρησιμοποιήστε το kadmin.local και εισάγετε:
sudo kadmin.local
Authenticating as principal root/admin@EXAMPLE.COM with password.
kadmin.local: addprinc -x dn="uid=steve,ou=people,dc=example,dc=com" steve
WARNING: no policy specified for steve@EXAMPLE.COM; defaulting to no policy
Enter password for principal "steve@EXAMPLE.COM":
Re-enter password for principal "steve@EXAMPLE.COM":
Principal "steve@EXAMPLE.COM" created.
Τα γνωρίσματα krbPrincipalName, krbPrincipalKey, krbLastPwdChange, and krbExtraData θα πρέπει πλέον να έχουν προστεθεί στο αντικείμενο χρήστη uid=steve,ou=people,dc=example,dc=com. Χρησιμοποιήστε τα kinit και klist για να ελέγξετε αν όντως εκδόθηκε δελτίο (ticket) για τον χρήστη.
|
|
|
Αν το αντικείμενο χρήστη έχει ήδη δημιουργηθεί, θα χρειαστεί η επιλογή -x dn="..." για την προσθήκη των γνωρισμάτων Kerberos. Διαφορετικά θα δημιουργηθεί νέο αντικείμενο principal στο υποδέντρο του realm. |
Η ρύθμιση του δευτερεύοντος KDC μέσω του backend του LDAP είναι παρόμοια με τη ρύθμισή του για χρήση της κανονικής βάσης δεδομένων Kerberos.
-
Καταρχάς, εγκαταστήστε τα απαραίτητα πακέτα από το τερματικό, εισάγοντας:
sudo apt-get install krb5-kdc krb5-admin-server krb5-kdc-ldap -
Στη συνέχεια, τροποποιήστε το
/etc/krb5.confώστε να χρησιμοποιεί το backend του LDAP:[libdefaults] default_realm = EXAMPLE.COM ... [realms] EXAMPLE.COM = { kdc = kdc01.example.com kdc = kdc02.example.com admin_server = kdc01.example.com admin_server = kdc02.example.com default_domain = example.com database_module = openldap_ldapconf } ... [domain_realm] .example.com = EXAMPLE.COM ... [dbdefaults] ldap_kerberos_container_dn = dc=example,dc=com [dbmodules] openldap_ldapconf = { db_library = kldap ldap_kdc_dn = "cn=admin,dc=example,dc=com" # this object needs to have read rights on # the realm container, principal container and realm sub-trees ldap_kadmind_dn = "cn=admin,dc=example,dc=com" # this object needs to have read and write rights on # the realm container, principal container and realm sub-trees ldap_service_password_file = /etc/krb5kdc/service.keyfile ldap_servers = ldaps://ldap01.example.com ldaps://ldap02.example.com ldap_conns_per_server = 5 } -
Αποθηκεύστε τον κωδικό (stash) σύνδεσης με το LDAP:
sudo kdb5_ldap_util -D cn=admin,dc=example,dc=com stashsrvpw -f /etc/krb5kdc/service.keyfile cn=admin,dc=example,dc=com -
Τώρα, στο πρωτεύον KDC αντιγράψτε το κρυμμένο κύριο κλειδί (master) του
/etc/krb5kdc/.k5.EXAMPLE.COMστο δευτερεύον KDC. Θυμηθείτε να κάνετε την αντιγραφή μέσω κρυπτογραφημένης σύνδεσης, π.χ. με το scp, ή χρησιμοποιώντας φυσικό μέσο.sudo scp /etc/krb5kdc/.k5.EXAMPLE.COM steve@kdc02.example.com:~ sudo mv .k5.EXAMPLE.COM /etc/krb5kdc/
Και εδώ, αντικαταστήστε το EXAMPLE.COM με το δικό σας realm.
-
Τέλος, εκκινήστε την υπηρεσία krb5-kdc:
sudo /etc/init.d/krb5-kdc start
Τώρα το δίκτυό σας διαθέτει εφεδρικό KDC και μαζί με εφεδρικούς εξυπηρετητές LDAP, θα μπορείτε να συνεχίζετε να πιστοποιείτε χρήστες, ακόμη και αν δεν είναι διαθέσιμοι ένας εξυπηρετητής Kerberos, ένας εξυπηρετητής LDAP ή ένας εξυπηρετητής Kerberos και ένας LDAP.
-
O οδηγός διαχείρισης του Kerberos διαθέτει ορισμένες επιπλέον λεπτομέρειες.
-
For more information on kdb5_ldap_util see Section 5.6 and the kdb5_ldap_util man page.
-
Another useful link is the krb5.conf man page.
-
Also, see the Kerberos and LDAP Ubuntu wiki page.

