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.
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 «Configurazione».
-
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
-
Creare una directory temporanea in cui salvare i file LDIF:
mkdir /tmp/ldif_output
-
Ora usare slaptest per convertire i file schema:
slaptest -f schema_convert.conf -F /tmp/ldif_output
Modificare i percorsi e i nomi dei file in base alla proprie esigenze.
-
Modificare il file
/tmp/ldif_output/cn=config/cn=schema/cn={12}kerberos.ldif
generato, modificando 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.
-
Caricare il nuovo schema con ldapadd:
ldapadd -x -D cn=admin,cn=config -W -f /tmp/ldif_output/cn\=config/cn\=schema/cn\=\{12\}kerberos.ldif
-
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" -
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.
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. |
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.
-
Maggiori informazioni possono essere trovate nella Kerberos Admin Guide.
-
Per ulteriori informazioni su kdb5_ldap_util, consultare la sezione 5.6 e la pagina man di kdb5_ldap_util.
-
Un'altra utile risorsa è la pagina man di krb5.conf.