Kerberos

Το Kerberos είναι ένα σύστημα πιστοποίησης δικτύου που βασίζεται στην αρχή του έμπιστου τρίτου μέρους. Όπου τα άλλα δύο μέρη είναι ο χρήστης και η υπηρεσία στην οποία θέλει να πιστοποιηθεί ο χρήστης. Δεν μπορούν όλες οι υπηρεσίες και εφαρμογές να χρησιμοποιούν το Kerberos, αλλά για αυτές που μπορούν, το περιβάλλον δικτύου προσεγγίζει κατά ένα ακόμη βήμα το ιδανικό της μοναδικής εισόδου (Single Sign On - SSO).

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

Επισκόπηση

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

  • Principal (Διευθυντής): όλοι οι χρήστες, υπολογιστές και υπηρεσίες που παρέχονται από εξυπηρετητές πρέπει να έχουν οριστεί ως Kerberos Principals.

  • Instances: χρησιμοποιούνται για τους διευθυντές υπηρεσιών και τους ειδικούς διαχειριστικούς διευθυντές.

  • Realms (Επικράτειες): η μοναδική επικράτεια ελέγχου που παρέχει η εγκατάσταση του Kerberos. Συνήθως χρησιμοποιείται ο τομέας DNS με κεφαλαία (EXAMPLE.COM).

  • Key Distribution Center (KDC - Βασικό Κέντρο Διανομής: αποτελείται από τρία τμήματα, μια βάση δεδομένων με όλους τους διευθυντές, τον εξυπηρετητή πιστοποίησης και τον εξυπηρετητή εκχώρησης ticket. Κάθε realm πρέπει να διαθέτει τουλάχιστον ένα KDC.

  • Ticket Granting Ticket (Δελτίο Εκχώρησης Δελτίου): εκδίδεται από τον εξυπηρετητή πιστοποίησης (AS). Το Δελτίο Εκχώρησης Δελτίου (TGT) κρυπτογραφείται με τον κωδικό του χρήστη, που είναι γνωστός μόνο στον χρήστη και το KDC.

  • Ticket Granting Server (Εξυπηρετητής Εκχώρησης Δελτίων - TGS): Εκχωρεί δελτία υπηρεσιών στους πελάτες μετά από αίτημά τους.

  • Tickets (Δελτία): επιβεβαιώνουν την ταυτότητα των δύο διευθυντών. Όπου ο ένας διευθυντής είναι χρήστης και ο άλλος μία υπηρεσία που έχει ζητήσει ο χρήστης. Τα δελτία χρησιμοποιούν ένα κλειδί κρυπτογράφησης που διασφαλίζει την επικοινωνία κατά τη διάρκεια της πιστοποιημένης συνεδρίας.

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

Για να συνοψίσουμε, κάθε Realm (Επικράτεια) διαθέτει τουλάχιστον ένα KDC, κατά προτίμηση δύο για λόγους εφεδρείας, που περιέχει μια βάση δεδομένων των Principal (διευθυντών). Όταν ένας διευθυντής χρήστης κάνει είσοδο σε ένα σταθμό εργασίας που διαθέτει πιστοποίηση Kerberos, το KDC εκδίδει ένα Ticket Granting Ticket (TGT - Δελτίο Εκχώρησης Δελτίου). Αν τα στοιχεία που παρέχει ο χρήστης είναι σωστά, γίνεται πιστοποίηση του χρήστη, ο οποίος μπορεί στη συνέχεια να ζητήσει δελτία για υπηρεσίες μέσω Kerberos από τον Ticket Granting Server (TGS - Εξυπηρετητή Εκχώρησης Δελτίων). Τα δελτία υπηρεσιών επιτρέπουν στο χρήστη να πιστοποιείται σε υπηρεσίες χωρίς να εισάγει νέο όνομα χρήστη και κωδικό.

Εξυπηρετητής Kerberos

Εγκατάσταση

Πριν γίνει η εγκατάσταση του εξυπηρετητή Kerberos, το domain σας χρειάζεται έναν κατάλληλα ρυθμισμένο εξυπηρετητή DNS. Επειδή το Kerberos Realm κατά σύμβαση συμπίπτει με το όνομα του domain, αυτή η ενότητα χρησιμοποιεί το domain example.com που είχε καθοριστεί στο “Κύριος Master”.

Επιπλέον, το Kerberos αποτελεί πρωτόκολλο που εξαρτάται από την ώρα. Άρα, αν η ώρα τοπικού συστήματος ενός πελάτη και του εξυπηρετητή απέχουν περισσότερο από πέντε λεπτά (προεπιλογή), δε θα είναι δυνατή η πιστοποίηση του σταθμού εργασίας. Για να επιλύσετε αυτό το πρόβλημα, θα πρέπει να συγχρονίσετε όλα τα μηχανήματα με το Network Time Protocol (NTP - Πρωτόκολλο Ώρας Δικτύου). Για περισσότερες λεπτομέρειες σχετικά με το NTP δείτε το “Συγχρονισμός Ώρας με NTP”.

Το πρώτο βήμα για την εγκατάσταση ενός Kerberos Realm είναι η εγκατάσταση των πακέτων krb5-kdc και krb5-admin-server. Από το τερματικό, δίνετε:

sudo apt-get install krb5-kdc krb5-admin-server

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

Στη συνέχεια, δημιουργήστε το νέο realm χρησιμοποιώντας το kdb5_newrealm:

sudo krb5_newrealm

Ρυθμίσεις

Οι ερωτήσεις κατά τη διάρκεια της εγκατάστασης χρησιμοποιούνται για τη ρύθμιση του αρχείου /etc/krb5.conf. Αν χρειαστεί να αλλάξετε τις ρυθμίσεις του KDC, απλά τροποποιήστε αυτό το αρχείο και επανεκκινήστε την υπηρεσία krb5-kdc.

  1. Τώρα που λειτουργεί το KDC, χρειάζεται ένας χρήστης με δικαιώματα διαχειριστή. Συνιστάται η χρήση διαφορετικού ονόματος χρήστη από το κανονικό σας. Χρησιμοποιήστε το εργαλείο kadmin.local, δίνοντας από τερματικό:

    sudo kadmin.local
    Authenticating as principal root/admin@EXAMPLE.COM with password.
    kadmin.local: addprinc steve/admin
    WARNING: no policy specified for steve/admin@EXAMPLE.COM; defaulting to no policy
    Enter password for principal "steve/admin@EXAMPLE.COM": 
    Re-enter password for principal "steve/admin@EXAMPLE.COM": 
    Principal "steve/admin@EXAMPLE.COM" created.
    kadmin.local: quit
    

    Στο παραπάνω παράδειγμα, ο steve είναι ο Principal, το /admin είναι ένα Instance και το @EXAMPLE.COM αντιστοιχεί στο realm. Ο "καθημερινός" Principal είναι ο steve@EXAMPLE.COM και θα έπρεπε να διαθέτει μόνο απλά δικαιώματα χρήστη.

    [Σημείωση]

    Αντικαταστήστε τα EXAMPLE.COM και steve με το Realm σας και το όνομα χρήστη του διαχειριστή.

  2. Στη συνέχεια, ο νέος χρήστης - διαχειριστής πρέπει να αποκτήσει τα κατάλληλα δικαιώματα ACL. Τα δικαιώματα ορίζονται στο αρχείο /etc/krb5kdc/kadm5.acl.

    steve/admin@EXAMPLE.COM        *
    

    Αυτή η εγγραφή δίνει στον steve/admin τη δυνατότητα εκτέλεσης οποιασδήποτε ενέργειας σε όλους τους principals του realm.

  3. Τώρα, επανεκκινήστε το krb5-admin-server για να ενεργοποιήσετε το ACL:

    sudo /etc/init.d/krb5-admin-server restart
    
  4. Μπορείτε να δοκιμάσετε το νέο principal χρησιμοποιώντας το εργαλείο kinit:

    kinit steve/admin
    steve/admin@EXAMPLE.COM's Password:
    

    Αφού εισάγετε τον κωδικό, χρησιμοποιήστε το klist για να δείτε πληροφορίες σχετικά με το Ticket Granting Ticket (TGT):

    klist
    Credentials cache: FILE:/tmp/krb5cc_1000
            Principal: steve/admin@EXAMPLE.COM
    
      Issued           Expires          Principal
    Jul 13 17:53:34  Jul 14 03:53:34  krbtgt/EXAMPLE.COM@EXAMPLE.COM
    

    Ίσως χρειαστεί να προσθέσετε μία εγγραφή για το KDC στο /etc/hosts. Π.χ.:

    192.168.0.1   kdc01.example.com       kdc01
    

    Αντικαταστήστε το 192.168.0.1 με τη διεύθυνση IP του KDC.

  5. Για να μπορούν οι πελάτες να καθορίσουν το KDC του Realm απαιτούνται ορισμένες εγγραφές DNS SRV. Προσθέστε τα παρακάτω στο /etc/named/db.example.com:

    _kerberos._udp.EXAMPLE.COM.     IN SRV 1  0 88  kdc01.example.com.
    _kerberos._tcp.EXAMPLE.COM.     IN SRV 1  0 88  kdc01.example.com.
    _kerberos._udp.EXAMPLE.COM.     IN SRV 10 0 88  kdc02.example.com. 
    _kerberos._tcp.EXAMPLE.COM.     IN SRV 10 0 88  kdc02.example.com. 
    _kerberos-adm._tcp.EXAMPLE.COM. IN SRV 1  0 749 kdc01.example.com.
    _kpasswd._udp.EXAMPLE.COM.      IN SRV 1  0 464 kdc01.example.com.
    
    [Σημείωση]

    Αντικαταστήστε τα EXAMPLE.COM, kdc01, και kdc02 με το όνομα του domain, το πρωτεύον KDC και το δευτερεύον KDC.

    Δείτε το Κεφάλαιο 7, Υπηρεσία ονομάτων τομέα (DNS) για λεπτομερείς οδηγίες ρύθμισεις του DNS.

Το νέο Kerberos Realm είναι πλέον σε θέση να πιστοποιεί πελάτες.

Δευτερεύον KDC

Αφού αποκτήστετε ένα KDC (Κέντρο Διανομής Κλειδιών) στο δίκτυο σας, είναι καλή πρακτική να αποκτήσετε και δευτερεύον KDC, για περιπτώσεις όπου το πρωτεύον δε θα είναι διαθέσιμο.

  1. Καταρχάς, εγκαταστήστε τα πακέτα και, όταν σας ζητηθούν τα ονόματα των εξυπηρετητών Kerberos και διαχειριστή, εισάγετε το όνομα του πρωτεύοντος KDC:

    sudo apt-get install krb5-kdc krb5-admin-server
    
  2. Αφού εγκατασταθούν τα πακέτα, δημιουργήστε τον principal του δευτερεύοντος KDC. Από το τερματικό, δίνετε:

    kadmin -q "addprinc -randkey host/kdc02.example.com"
    
    [Σημείωση]

    Στη συνέχεια, κάθε φορά που θα εκτελείτε εντολές kadmin, θα ερωτάστε για τον κωδικό του principal username/admin@EXAMPLE.COM.

  3. Εξάγετε το αρχείο keytab:

    kadmin -q "ktadd -k keytab.kdc02 host/kdc02.example.com"
    
  4. Θα πρέπει πλέον να διαθέτετε ένα αρχείο keytab.kdc02 στον τρέχοντα κατάλογο, το οποίο θα πρέπει να μετακινήσετε στο /etc/krb5.keytab:

    sudo mv keytab.kdc02 /etc/krb5.keytab
    
    [Σημείωση]

    Αν η διαδρομή προς το αρχείο keytab.kdc02 είναι διαφορετική, τροποποιήστε την κατάλληλα.

    Επίσης, μπορείτε να απαριθμήσετε τους principal σε ένα αρχείο Keytab (χρήσιμο για αποσφαλμάτωση), χρησιμοποιώντας το klist:

    sudo klist -k /etc/krb5.keytab
    
  5. Περαιτέρω, χρειάζεται ένα αρχείο kpropd.acl σε κάθε KDC, που να απαριθμεί όλα τα KDC του Realm. Π.χ., τόσο στο πρωτεύον όσο και στο δευτερεύον KDC, δημιουργήστε ένα αρχείο /etc/krb5kdc/kpropd.acl:

    host/kdc01.example.com@EXAMPLE.COM
    host/kdc02.example.com@EXAMPLE.COM
    
  6. Δημιουργήστε μια άδεια βάση δεδομένων στο δευτερεύον KDC:

    sudo kdb5_util -s create
    
  7. Τώρα, εκκινήστε την υπηρεσία kpropd, που αφουγκράζεται για συνδέσεις από την υπηρεσία kprop. Το kprop χρησιμοποιείται για τη μεταφορά αρχείων dump:

    sudo kpropd -S
    
  8. Από το τερματικό στο πρωτεύον KDC, δημιουργήστε ένα αρχείο dump της βάσης δεδομένων των principal:

    sudo kdb5_util dump /var/lib/krb5kdc/dump
    
  9. Εξάγετε το αρχείο keytab του πρωτεύοντος KDC και αντιγράψτε το στο /etc/krb5.keytab:

    kadmin -q "ktadd -k keytab.kdc01 host/kdc01.example.com"
    sudo mv keytab.kdc01 /etc/krb5.keytab
    
    [Σημείωση]

    Βεβαιωθείτε ότ υπάρχει host για το kdc01.example.com πριν εξάγετε το αρχείο keytab.

  10. Χρησιμοποιώντας το kprop, σπρώξτε (push) τη βάση δεδομένων στο δευτερεύον KDC:

    sudo kprop -r EXAMPLE.COM -f /var/lib/krb5kdc/dump kdc02.example.com
    
    [Σημείωση]

    Αν επιτύχει η διαδικασία, θα πρέπει να εμφανιστεί το μήνυμα SUCCEEDED. Αν εμφανιστεί μήνυμα σφάλματος, ελέγξτε το /var/log/syslog του δευτερεύοντος KDC για περισσότερες πληροφορίες.

    Ίσως επίσης σας ενδιαφέρει να δημιουργήσετε ένα cron job που θα ενημερώνει περιοδικά τη βάση δεδομένων του δευτερεύοντος KDC. Π.χ., τα παρακάτω κάνουν push της βάσης δεδομένων κάθε ώρα:

    # m h  dom mon dow   command
    0 * * * * /usr/sbin/kdb5_util dump /var/lib/krb5kdc/dump && /usr/sbin/kprop -r EXAMPLE.COM -f /var/lib/krb5kdc/dump kdc02.example.com
    
  11. Επιστρέφοντας στο δευτερεύον KDC, δημιουργήστε ένα αρχείο αποθήκευσης (stash) για το κύριο (master) κλειδί του Kerberos:

    sudo kdb5_util stash
    
  12. Τέλος, εκκινήστε την υπηρεσία krb5-kdc στο δευτερευόν KDC:

    sudo /etc/init.d/krb5-kdc start
    

Τώρα, το δευτερεύον KDC θα πρέπει να είναι σε θέση να εκδίδει δελτία (ticket) για το Realm. Μπορείτε να το δοκιμάσετε διακόπτοντας την υπηρεσία krb5-kdc στο πρωτεύον KDC, και χρησιμοποιώντας, στη συνέχεια, το kinit για να ζητήσετε δελτίο. Αν όλα πάνε καλά, θα πρέπει να λάβετε δελτίο από το δευτερεύον KDC.

Πελάτης Kerberos για Linux

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

Εγκατάσταση

Για να γίνει η πιστοποίηση σε realm Kerberos, απαιτούνται τα πακέτα krb5-user και libpam-krb5, καθώς και ορισμένα ακόμη, που, αν και δεν είναι απολύτως απαραίτητα, διευκολύνουν σημαντικά το έργο σας. Για να τα εγκαταστήσετε, πληκτρολογείτε στο τερματικό:

sudo apt-get install krb5-user libpam-krb5 libpam-ccreds auth-client-config

Το πακέτο auth-client-config σας επιτρέπει να ρυθμίζεται εύκολα το PAM για πιστοποίηση από πολλαπλές πηγές, ενώ το libpam-ccreds αποθηκεύει τα στοιχεία πιστοποίησης, έτσι ώστε να μπορείτε να κάνετε είσοδο σε περίπτωση που το Κέντρο Διανομής Κλειδιών (KDC) δεν είναι διαθέσιμο. Το πακέτο αυτό είναι χρήσιμο και για φορητούς υπολογιστές που κάνουν πιστοποίηση μέσω Kerberos όταν βρίσκονται στο εταιρικό δίκτυο, αλλά που θα πρέπει να μπορούν να χρησιμοποιηθούν και εκτός δικτύου.

Ρυθμίσεις

Για να ρυθμίσετε τον πελάτη, είσαγετε τα παρακάτω στο τερματικό:

sudo dpkg-reconfigure krb5-config

Θα σας ζητηθεί το όνομα του realm του Kerberos. Επίσης, αν το DNS δεν έχει ρυθμιστεί με τις εγγραφές SRV του Kerberos, θα σας ζητηθεί το hostname του KDC και ο εξυπηρετητής διαχείρισης του realm.

Το dpkg-reconfigure προσθέτει εγγραφές στο αρχείο /etc/krb5.conf του realm. Οι εγγραφές σας θα πρέπει να μοιάζουν στις ακόλουθες:

[libdefaults]
        default_realm = EXAMPLE.COM
...
[realms]
        EXAMPLE.COM = }                
                kdc = 192.168.0.1               
                admin_server = 192.168.0.1
        }

Μπορείτε να δοκιμάσετε τις ρυθμίσεις ζητώντας ένα δελτίο (ticket) μέσω του kinit. Π.χ.:

kinit steve@EXAMPLE.COM
Password for steve@EXAMPLE.COM:

Αφού εκχωρηθεί το δελτίο, μπορείτε να δείτε τις σχετικές πληροφορίες μέσω klist:

klist
Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: steve@EXAMPLE.COM

Valid starting     Expires            Service principal
07/24/08 05:18:56  07/24/08 15:18:56  krbtgt/EXAMPLE.COM@EXAMPLE.COM
        renew until 07/25/08 05:18:57


Kerberos 4 ticket cache: /tmp/tkt1000
klist: You have no tickets cached

Στη συνέχεια, χρησιμοποιήστε το auth-client-config για να ρυθμίσετε το άρθρωμα libpam-krb5 έτσι ώστε να ζητάει δελτίο κατά την είσοδο:

sudo auth-client-config -a -p kerberos_example

Θα πρέπει πλέον να λαμβάνετε δελτίο μετά από κάθε επιτυχή πιστοποίηση εισόδου.

Πόροι

  • Για περισσότερες πληροφορίες σχετικά με το Kerberos δείτε τον ιστότοπο του MIT για το Kerberos.

  • The Ubuntu Wiki Kerberos page has more details.

  • Το εγχειρίδιο Kerberos: The Definitive Guide του O'Reilly είναι ένα εξαιρετικό έργο αναφοράς για την εγκατάσταση του Kerberos.

  • Επίσης, μπορείτε πάντοτε να περάσετε από το κανάλι IRC #ubuntu-server στο Freenode αν έχετε ερωτήσεις σχετικά με το Kerberos.