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.
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.
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
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.
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.localAuthenticating 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. |
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.
Riavviare krb5-admin-server affinché le nuove ACL abbiano effetto:
sudo /etc/init.d/krb5-admin-server restart
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.
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.
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.
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
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. |
Estrarre il file keytab_
kadmin -q "ktadd -k keytab.kdc02 host/kdc02.example.com"
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 |
È 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
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
Creare un database vuoto nel KDC secondario:
sudo kdb5_util -s create
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
Da un terminale dal KDC primario, creare un file di dump del database principale:
sudo kdb5_util dump /var/lib/krb5kdc/dump
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/krb5.keytab
![]() |
|
Assicurarsi che ci sia un host per kdc01.example.com prima di estrarre il keytab. |
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 |
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
Sempre nel KDC secondario, creare un file stash in cui salvare la chiave principale di Kerberos:
sudo kdb5_util stash
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.
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.
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.
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.
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.