Integrazione Kerberos e LDAP

Da sia.
Versione del 15 mar 2007 alle 07:51 di Malvezzi (discussione | contributi) (→‎ldapi:///)
(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)
Vai alla navigazione Vai alla ricerca

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)

Kerberos