Documentazione di Ubuntu > Ubuntu 10.10 > Guida a Ubuntu Server > Autenticazione di rete > Kerberos e LDAP

## Kerberos e LDAP

Sostituire un database principale di Kerberos tra due server può essere complicato e aggiunge un ulteriori database all'interno della rete. Il server Kerberos può comunque essere configurato per utilizzare una directory LDAP come database principale. In questa sezione viene descritto come configurare un server Kerberos, primario e secondario, affinché utilizzi OpenLDAP come database principale.

### Configurare OpenLDAP

Per prima cosa è necessario caricare lo schema all'interno del server OpenLDAP collegato ai KDC primario e secondario. I successivi passi qui descritti hanno come presupposto la presenza di un server LDAP di replica configurato tra due server. Per maggiori informazioni su come impostare un server OpenLDAP, consultare la sezione chiamata «Server OpenLDAP».

È inoltre richiesto per configurare OpenLDAP all'uso di connessioni TLS e SSL, in modo che il traffico tra il KDC e il server LDAP sia cifrato. Per maggiori informazioni, consultare la sezione chiamata «TLS e SSL».

- Per caricare lo schema all'interno del server LDAP, installare su tale server il pacchetto krb5-kdc-ldap. Da un terminale, digitare:

      sudo apt-get install krb5-kdc-ldap

- Estrarre il file `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/

- Lo schema kerberos deve essere aggiunto all'albero cn=config. La procedura per aggiungere un nuovo schema a slapd è descritta anche in la sezione chiamata «Further Configuration».

  1. Creare un file di configurazione chiamato `schema_convert.conf`, o simile, contenente quanto segue:

         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

  2. Creare una directory temporanea in cui salvare i file LDIF:

         mkdir /tmp/ldif_output

  3. Usare quindi slapcat per convertire i file schema:

         slapcat -f schema_convert.conf -F /tmp/ldif_output -n0 -s "cn={12}kerberos,cn=schema,cn=config" > /tmp/cn=kerberos.ldif

     Modificare i percorsi e i nomi dei file in base alla proprie esigenze.

  4. Modificare il file `/tmp/cn\=kerberos.ldif` generato sistemando i seguenti attributi:

         dn: cn=kerberos,cn=schema,cn=config
         ...
         cn: kerberos

     Rimuovere le seguenti righe dalla fine del file:

         structuralObjectClass: olcSchemaConfig
         entryUUID: 18ccd010-746b-102d-9fbe-3760cca765dc
         creatorsName: cn=config
         createTimestamp: 20090111203515Z
         entryCSN: 20090111203515.326445Z#000000#000#000000
         modifiersName: cn=config
         modifyTimestamp: 20090111203515Z

     I valori degli attributi possono variare, basta solo assicurarsi che gli attributi siano rimossi.

  5. Caricare il nuovo schema con ldapadd:

         ldapadd -x -D cn=admin,cn=config -W -f /tmp/cn\=kerberos.ldif

  6. Aggiungere un indice per l'attributo krb5principalname:

         ldapmodify -x -D cn=admin,cn=config -W
         Enter LDAP Password:
         dn: olcDatabase={1}hdb,cn=config
         add: olcDbIndex
         olcDbIndex: krbPrincipalName eq,pres,sub

         modifying entry "olcDatabase={1}hdb,cn=config"

  7. Infine, aggiornare le ACL (Access Control Lists):

         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 * read

         modifying entry "olcDatabase={1}hdb,cn=config"

La directory LDAP è ora pronta come database principale per Kerberos.

### Configurazione KDC primario

Configurato OpenLDAP, è necessario configurare KDC.

- Installare i pacchetti necessari. In un terminale, digitare:

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

- Modificare `/etc/krb5.conf` aggiungendo le seguenti opzioni all'interno delle sezioni appropriate:

      [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
              }

  Modificare example.com, dc=example,dc=com, cn=admin,dc=example,dc=com e ldap01.example.com con i valori corretti del dominio, dell'oggetto e del server LDAP della propria rete.

- Usare l'utilità kdb5_ldap_util per creare il reame:

      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

- Creare un file stash della password utilizzata per l'associazione al server LDAP. Questa password è usata con le opzioni ldap_kdc_dn e ldap_kadmin_dn nel file `/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

- Copiare il certificato della CA dal server LDAP:

      scp ldap01:/etc/ssl/certs/cacert.pem .
      sudo cp cacert.pem /etc/ssl/certs

  Modificare il file `/etc/ldap/ldap.conf` affinché utilizzi il certificato:

      TLS_CACERT /etc/ssl/certs/cacert.pem

  Il certificato deve anche essere copiato nel KDC secondario per consentire la connessione ai server LDAP utilizzando LDAPS.

Ora è possibile aggiungere i principal Kerberos al database LDAP che verranno copiati su tutti gli altri server LDAP di replica. Per aggiungere un principal utilizzando l'utilità kadmin.local, digitare:

    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.

Dovrebbero ora essere aggiunti all'oggetto utente uid=steve,ou=people,dc=example,dc=com gli attributi krbPrincipalName, krbPrincipalKey, krbLastPwdChange e krbExtraData. Per verificare che all'utente venga emesso un ticket, utilizzare le utilità kinit e klist.

Se l'oggetto utente è già stato creato, è necessario usare l'opzione -x dn="..." per aggiungere gli attributi Kerberos, altrimenti verrà creato un nuovo oggetto principal nel sottoalbero del reame.

### Configurazione KDC secondario

La configurazione di un KDC secondario utilizzando il backend LDAP è molto simile alla configurazione tramite l'utilizzo del database Kerberos.

- Installare i pacchetti necessari. In un terminale digitare:

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

- Modificare il file `/etc/krb5.conf` affinché utilizzi il 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
              }

- Creare il file stash per la password di associazione LDAP:

      sudo kdb5_ldap_util -D cn=admin,dc=example,dc=com stashsrvpw -f /etc/krb5kdc/service.keyfile cn=admin,dc=example,dc=com

- Dal KDC primario, copiare il file di stash della chiave primaria (`/etc/krb5kdc/.k5.EXAMPLE.COM`) nel KDC secondario. Accertarsi di copiare tale file utilizzando una connessione cifrata come scp o su un supporto fisico.

      sudo scp /etc/krb5kdc/.k5.EXAMPLE.COM steve@kdc02.example.com:~
      sudo mv .k5.EXAMPLE.COM /etc/krb5kdc/

  Ricordarsi di sostituire EXAMPLE.COM con il reame in uso.

- Infine. avviare il demone krb5-kdc:

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

All'interno della propria rete sono quindi disponibili dei KDC ridondanti che assieme ai server LDAP ridondanti permettono l'autenticazione degli utenti anche nel caso in cui un server LDAP, un server Kerberos o uno server LDAP e un server Kerberos non siano più disponibili.

### Risorse

- Maggiori informazioni possono essere trovate nella Kerberos Admin Guide.

- 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.

Kerberos |  | Capitolo 7. DNS (Domain Name Service)