Integrazione Kerberos e LDAP
Integrazione tra Kerberos e LDAP
Il problema chiave sta nella collocazione delle credenziali degli utenti. Mentre è chiaro che:
- Kerberos può autenticare gli accessi a LDAP
- LDAP può contenere i dati aggiuntivi degli utenti (aggiuntivi significa altri rispetto a username e password)
non è chiaro dove riporre username e password.
Le alternative sono:
Credenziali in Kerberos
Si tratta della soluzione mainstream e maggiormente documentata. Si tratta di duplicare le identità ed aggiungere con kadmin -l add tutti gli utenti necessari.
Credenziali in LDAP
Per questa configutazione non è possibile usare la versione MIT di Kerberos.
Sono disponibili le istruzioni degli sviluppatori e un utile howto per permettere a Heimdal Kerberos di ricercare le password in un backend LDAP.
Nel caso di utenti già inseriti vengono aggiunti attributi aggiuntivi, e vengono mantenute le vecchie password negli attributi LDAP userPassword, sambaNTPassword, sambaLMPassword.
Il progetto è di inserire nell'albero "ou=kerberosprincipals" i principali amministrativi e le utenze dei servizi (ldap, nfs), mentre di mantenere in 'ou=people' gli utenti.
ldapi:///
Heimdal Kerberos comunica con OpenLDAP tramite ldapi:///, cioé un socket unix locale. Questo significa che il kdc sia anche server OpenLDAP. Bisogna far sì che slapd si avvi con l'opzione: -h ldapi. In debian si ottiene con l'aggiunta di:
SLAPD_SERVICES="ldapi:/// ldap:/// ldaps:///"
Nel file /etc/default/slapd.conf.
In Debian kerberos si aspetta di trovare il socket di ldapi in /var/run, mentre OpenLDAP lo colloca in /var/run/slapd. Quindi bisogna creare un soft link dal secondo al primo (non più necessario se la versione di ldap-utils è pari o uguale alla 2.3.30-5 - 15/3/2007).
Il file /etc/ldap/slapd.conf deve essere modificato per permettere un accesso in scrittura agli utenti che transitano per ldapi:///. Si può aggiungere la riga:
by sockurl.regex="^ldapi" write
subito dopo ogni direttiva "access". Per evitare che utenti generici possano vedere l'albero ou=kerberosprincipals, aggiungere:
access to dn.subtree="ou=kerberosprincipals,dc=unimore,dc=it" by sockurl.regex="^ldapi" write
Per evitare che ogni utente locale interroghi ldap senza restrizioni con lo switch "-H ldapi:///" in ldapsearch, eseguire: chmod o-rwx /var/run/slapd/ldapi.
Aggiunta dei principali amministrativi
Aggiungere al file /etc/krb5.conf la sezione:
[kdc] database = { realm = PINSS9.UNIMO.IT dbname = ldap:ou=KerberosPrincipals,dc=unimore,dc=it mkey_file = /var/lib/heimdal-kdc/m-key }
Inserire in slapd lo ldif:
dn: ou=kerberosprincipals,dc=unimore,dc=it ou: kerberosprincipals objectClass: top objectclass: organizationalunit
Poi eseguire kadmin -l stash e resettare il dominio. Conviene approfittarne adesso per creare tutti i vari principali amministrativi: kadmin -l add --random-key ldap/pinss9.unimo.it. Se sono già presenti, è meglio prima rimuoverli con kadmin -l remove.
Modifica agli utenti LDAP
Nel file /etc/krb5.conf, togliere "ou=kerberosprincipals" dalla riga:
dbname = ldap:ou=KerberosPrincipals,dc=unimore,dc=it
Adesso è possibile richiamare gli utenti LDAP con il comando:
kadmin -l list malvezzi
Evitare kadmin -l list * altrimenti i tempi di attesa sono lunghi davvero, con i 30 mila utenti di ldap1.unimo.it
Per ogni utente da kerberizzare, creare un file ldif del tipo:
dn: uid=francesco,ou=users,dc=unimore,dc=it changetype: modify add: objectClass objectClass: krb5Principal - add: objectClass objectClass: krb5KDCEntry - add: krb5PrincipalName krb5PrincipalName: francesco@PINSS9.UNIMO.IT - add: krb5KeyVersionNumber krb5KeyVersionNumber: 1 - add: krb5MaxLife krb5MaxLife: 86400 - add: krb5MaxRenew krb5MaxRenew: 604800 - add: krb5KDCFlags krb5KDCFlags: 126
E lanciare lo ldapmodify. In seguito creare la passwd con kadmin -l cpw francesco.
Autenticare l'accesso a LDAP con Kerberos (SASL)
Scaricare il supporto SASL per Kerberos:
apt-get install libsasl2-modules-gssapi-heimdal
Aggiungere un principale per il server ldap con il comando kadmin -l:
add --random-key ldap/pinss9.unimo.it ext ldap/pinss9.unimo.it
Aggiungere nella sezione globale del file /etc/ldap/slapd.conf le righe:
sasl-secprops NOPLAIN,NOACTIVE sasl-host PINSS9.UNIMO.it sasl-realm "PINSS9.UNIMO.it" sasl-regexp uid=(.*),cn=gssapi,cn=auth cn=adminread,dc=unimore,dc=it
(queste righe in realtà servono per equiparare all'amministratore locale ogni utente che si identifica attraverso SASL/gssapi).
Se openldap è eseguito come utente generico (openldap, ad esempio), è necessario cambiare i permessi del file /etc/krb5.keytab:
chgrp openldap /etc/krb5.keytab chmod 640 /etc/krb5.keytab
--Malvezzi 09:18, 22 December 2006 (CET)