Documentazione di Ubuntu → Ubuntu 10.04 → Guida a Ubuntu server → Autenticazione di rete → Kerberos

## 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 garantisce 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 pacchetti 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 server.

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 è una Instance e @EXAMPLE.COM indica il realm. Il Principal "giornaliero" è steve@EXAMPLE.COM e dovrebbe avere i diritti di un utente normale.

   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.

   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"

   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

   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

   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

    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

- Per maggiori informazioni riguardo Kerberos, consultare il sito di Kerberos presso il MIT.

- The Ubuntu Wiki Kerberos page has more details.

- Il libro Kerberos: The Definitive Guide di O'Reilly è un ottimo punto di riferimento per impostare un server Kerberos.

- Inoltre, è possibile chiedere informazioni nel canale IRC #ubuntu-server su Freenode.

Samba e LDAP |  | Kerberos e LDAP