Kerberos

Kerberos è un sistema di autenticazione di rete basato sul principio di un "agente" terzo fidato. Le altre due parti sono l'utente e il servizio a cui l'utente vuole autenticarsi. Non tutti i serivizi e le applicazioni possono usare Kerberos, ma quelle che ne sono in grado, consentono di portare la rete a essere un SSO (Single Sign On).

Questa sezione spiega come installare e configurare un server Kerberos, fornendo alcuni esempi di configurazione.

Panoramica

Se si è nuovi di Kerberos, ci sono alcuni termini che è bene comprendere prima di procedere. Molti di questi termini potrebbero essere simili ad altri concetti di altri ambienti più familiari.

  • Principal: qualsiasi utente, computer e servizio fornito da server deve essere difinito come "Kerberos Principal".

  • Istanze: usate dai principal di servizio e da quelli amministrativi.

  • Realms: il "reame" di controllo fornito dall'installazione di Kerberos. Di solito il dominio DNS convertito in maiuscolo (EXAMPLE.IT).

  • Key Distribution Center (KDC): consiste di tre parti, un database di tutti i principal, il server di autenticazione e il server che garantisci i ticket. Per ogni reame deve esserci almeno un KDC.

  • Ticket Granting Ticket (TGT): emesso dallo "Authentication Server" (AS), il "Ticket Granting Ticket" è cifrato con la password dell'utente ed è quindi noto solo all'utente e al KDC.

  • Ticket Granting Server (TGS): emette i ticket su richiesta dei client.

  • Ticket:: conferma l'identità dei due principal. Uno è l'utente e l'altro il servizio richiesto. Il ticket stabilisce una chiave di cifratura usata per garantire la sicurezza della comunicazione durante la fase di autenticazione.

  • File keytab: sono file estratti dal KDC e contengono le chiavi di cifratura per un servizio o un host.

Per riassumenre, un reame ha almeno un KDC, preferibilmente due per ridondanza, che contiene un database di principal. Quando un utente accede in una workstation, configurata per l'autenticazione Kerberos, il KDC emette un TGT (Ticket Granting Ticket). Se le informazioni fornite dall'utente corrispondono, l'utente viene autenticato e può richiedere i ticket per i servizi Kerberos da un TGS (Ticket Granting Server). I ticket consentono all'utente di autenticarsi al servizio senza dover fornire nome utente e password.

Server Kerberos

Installazione

Prima di installare il server Kerberos, è necessario disporre di un server DNS configurato per il proprio dominio. Dato che il reame Kerberos corrisponde al dominio, questa sezione utilizza il dominio example.com configurato in la sezione chiamata «Server primario».

Kerberos, inoltre, è un protocollo basato sul tempo. Se l'ora locale tra il client e il server differisce di più di 5 minuti, le workstation non potranno autenticarsi. Per correggere questo problema, tutti gli host dovrebbe sincronizzare il proprio orario usando il protocollo NTP (Network Time Protocol). Per maggiori informazioni, consultare la sezione chiamata «Sincronizzazione del tempo con NTP».

Il primo passo nell'installare Kerberos consiste nell'installare i pacchetto krb5-kdc e krb5-admin-server. In un terminale, digitare:

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

Alla fine dell'installazione viene chiesto di fornire un nome per i server Kerberos e Admin del reame, che potrebbero essere anche lo stesso servo.

Creare il reame con l'utilità kdb5_newrealm:

sudo krb5_newrealm

Configurazione

Le domande poste durate l'installazione sono usate per impostare il file /etc/krb5.conf. Per modificare la configurazione del KDC, modificare il file e riavviare il demone krb5-kdc.

  1. Ora che il KDC è in esecuzione, è necessario avere un utente amministratore. È raccomandato usare un nome utente diverso da quello usato giornalmente per le normali operazioni al computer. Usando l'utilità kadmin.local da un terminale:

    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
    

    Nell'esempio precedente steve è il principal, /admin è un'istanza e @EXAMPLE.COM indica il reame. Il principal "normale" in questo caso è steve@EXAMPLE.COM e dovrebbe avere solo i permessi normali.

    [Nota]

    Sostituire EXAMPLE.COM e steve con il proprio reame e il nome utente dell'amministratore.

  2. Il nuovo utente amministratore necessita dei permessi ACL (Access Control List) corretti, configurati tramite il file /etc/krb5kdc/kadm5.acl:

    steve/admin@EXAMPLE.COM        *
    

    Questa voce garantisce a steve/admin la possibilità di eseguire qualsiasi operazione su tutti i principal nel reame.

  3. Riavviare krb5-admin-server affinché le nuove ACL abbiano effetto:

    sudo /etc/init.d/krb5-admin-server restart
    
  4. Il nuovo utente può essere provato con l'utilità kinit:

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

    Una volta inserita la password, usare l'utilità klist per visualizzare le informazioni riguardo il TGT (Ticket Granting Ticket):

    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
    

    Potrebbe essere necessario aggiungere una voce nel file /etc/hosts per il KDC. Per esempio:

    192.168.0.1   kdc01.example.com       kdc01
    

    Sostituire 192.168.0.1 con l'indirizzo del KDC.

  5. Affinché i client possano determinare il corretto KDC per il reame, sono necessari dei record DNS SRV. Aggiungere quanto segue al file /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.
    
    [Nota]

    Sostituire EXAMPLE.COM, kdc01 e kdc02 con il nome del proprio dominio, il KDC primario e quello secondario.

    Consultare Capitolo 7, DNS (Domain Name Service) per le istruzioni sulla configurazione di DNS.

Il reame Kerberos è ora pronto per autenticare i client.

KDC secondario

Una volta ottenuto un KDC all'interno della rete, è utile avere anche un KDC secondario nel caso in cui quello primario non fosse più disponibile.

  1. Per prima cosa installare il pacchetto e quando vengono chiesti i nomi di Kerberos e Admin, inserire il nome del KDC primario:

    sudo apt-get install krb5-kdc krb5-admin-server
    
  2. Una volta installato il pacchetto, creare il KDC secondario. Da un terminale, digitare:

    kadmin -q "addprinc -randkey host/kdc02.example.com"
    
    [Nota]

    Una volta eseguiti i comandi kadmin viene chiesto la propria password NOME_UTENTE/ADMIN@EXAMPLE.COM.

  3. Estrarre il file keytab_

    kadmin -q "ktadd -k keytab.kdc02 host/kdc02.example.com"
    
  4. Dovrebbe esserci un file keytab.kdc02 nella directory corrente, spostare il file in /etc/krb5.keytab:

    sudo mv keytab.kdc02 /etc/krb5.keytab
    
    [Nota]

    Se il percorso a keytab.kdc02 è diverso, modificarlo in base al proprio caso.

    È possibile elencare tutti i principal presenti in un file Keytab, utile durante la risoluzione dei problemi, con l'utilità klist:

    sudo klist -k /etc/krb5.keytab
    
  5. Dovrebbe esserci un file kpropd.acl in ogni KDC che presenti tutti i KDC del reame. Per esempio, sia sul KDC primario che secondario, creare un file /etc/krb5kdc/kpropd.acl:

    host/kdc01.example.com@EXAMPLE.COM
    host/kdc02.example.com@EXAMPLE.COM
    
  6. Creare un database vuoto nel KDC secondario:

    sudo kdb5_util -s create
    
  7. Avviare il demone kpropd che resterà in ascolto per le connessioni dall'utilità kprop. kprop è usato per trasferire i file di dump:

    sudo kpropd -S
    
  8. Da un terminale dal KDC primario, creare un file di dump del database principale:

    sudo kdb5_util dump /var/lib/krb5kdc/dump
    
  9. Estrarre il keytab del KDC primario e copiarlo in /etc/krb5.keytab:

    kadmin -q "ktadd -k keytab.kdc01 host/kdc01.example.com"
    sudo mv keytab.kdc01 /etc/kr5b.keytab
    
    [Nota]

    Assicurarsi che ci sia un host per kdc01.example.com prima di estrarre il keytab.

  10. Usando l'utilità kprop eseguire il push del database sul KDC secondario:

    sudo kprop -r EXAMPLE.COM -f /var/lib/krb5kdc/dump kdc02.example.com
    
    [Nota]

    Dovrebbe essere visualizzato un messaggio di SUCCEEDED se la propagazione è andata a buon fine. Se si è verificato un errore, per maggiori informazioni, controllare /var/log/syslog sul KDC secondario.

    Potrebbe esser utile creare anche un'attività cron per aggiornare periodicamente il database sul KDC secondario. Per esempio, il comando seguente esegue il push del database ogni ora:

    # 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. Sempre nel KDC secondario, creare un file stash in cui salvare la chiave principale di Kerberos:

    sudo kdb5_util stash
    
  12. Avviare il demone krb5-kdc sul KDC secondario:

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

Il KDC secondario dovrebbe ora essere in grado di emettere i ticket per il reame. È possibile verificare ciò fermando il demone krb5-kdc sul KDC primario e usando kinit per richiedere un ticket. Se tutto funziona correttamente, si dovrebbe ricevere un ticket dal KDC secondario.

Client Kerberos Linux

Questa sezione spiega come configurare un sistema Linux come un client Kerberos consentendo l'accesso a qualsiasi servizio Kerberos ad accesso effettuato correttamente da parte degli utenti.

Installazione

Per autenticarsi in un reame Kerberos sono necessari i pacchetti krb5-user e libpam-krb5 oltre ad altri non strettamente necessari, ma che semplificano molto la gestione. Per installare questi pacchetti, digitare:

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

Il pacchetto auth-client-config consente una semplice configurazione dell'autenticazione PAM per diverse sorgenti e libpam-ccreds memorizza le credenziali di autenticazione consentendo di effettuare l'accesso anche se il KDC non è disponibile. Questo pacchetto è utile anche per i computer portatili che possono autenticarsi su reti aziendali, ma devono essere in grado di farlo anche al di fuori della rete.

Configurazione

Per configurare il client, in un terminale digitare:

sudo dpkg-reconfigure krb5-config

Viene quindi chiesto di inserire il nome del reame Kerberos. Inoltre, se non si dispone di un DNS configurato con i record SRV di Kerberos, viene richiesto il nome dell'host del KDC e del server amministrativo.

Il comando dpkg-reconfigure aggiunge delle voci al file /etc/krb5.conf del proprio reame. Dovrebbero essere disponibili delle voci simili alle seguenti:

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

Per avviare la configurazione, richiedere un ticket usando l'utilità kinit. Per esempio:

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

Una volta ottenuto un ticket, i dettagli possono essere visualizzati usando 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

Usare auth-client-config per configurare il modulo libpam-krb5 affinché richieda un ticket durante la fase di accesso:

sudo auth-client-config -a -p kerberos_example

Una volta autenticati con successo, si dovrebbe ricevere un ticket.

Risorse