User Tools

Site Tools


doc:appunti:linux:sa:sldap

This is an old revision of the document!


LDAP con slapd 2.4.23

Gli appunti LDAP sono relativi a Debian Lenny, che installa slapd 2.4.11. Con Debian Squeeze viene fornito slapd 2.4.23: la logica della configurazione rimane sostanzialmente invariata, cambia invece il metodo predefinito di salvare la configurazione.

Al posto del tradizionale file di configurazione /etc/ldap/slapd.conf adesso esiste la directory /etc/ldap/slapd.d/ che contiene la configurazione sotto forma di numerosi file in formato LDIF, secondo l'impostazione gerarchica dei nodi. La configurazione è disponibile come oggetto LDAP e corrisponde al nodo che ha come distinguished name cn=config.

slapd usa un backend speciale per memorizzare questo nodo e lo identifica con il nome config. Ne può esistere uno solo e viene istanziato automaticamente anche se non viene definito esplicitamente.

In generale il contenuto del database cn=config viene modificato a runtime tramite snippet di file LDIF caricati con il comando ldapmodify. Le modifiche effettuate a runtime vengono salvate automaticamente nella directory /etc/ldap/slapd.d/, ma bisogna fermare il servizio slapd per essere sicuri che tutte le modifiche siano state salvate. Quando il servizio è fermo è anche possibile intervenire manualmente sui file .ldif.

Ecco un esempio di come interrogare il nodo cn=config con ldapsearch:

ldapsearch -LLLQY EXTERNAL -H ldapi:/// -b cn=config "(|(olcDatabase={1}hdb)(cn=module{0}))"

Nell'esempio l'accesso avviene tramite Unix-domain socket (ldapi) e meccanismo di autenticazione SASL EXTERNAL (?).

Debug

Si imposta con l'attributo olcLogLevel del nodo cn=config (/etc/ldap/slapd.d/cn=config.ldif, da editare a servizio fermo). Il valore predefinito stats è fin troppo prolisso, su un sistema in produzione conviene il valore none (vedere loglevel in man slapd.conf): <file> olcLogLevel: none </file> ===== Inclusione di uno schema aggiuntivo ===== Il metodo tradizionale (versione 2.4.11) per includere uno schema LDAP era quello di utilizzare la direttiva include nel file /etc/ldap/slapd.conf, gli schemi venivano solitamente salvati in /etc/ldap/schema/. Nella nuova configurazione gli schemi vengono caricati da file LDIF contenuti nella directory /etc/ldap/slapd.d/cn=config/cn=schema/. È comunque buona norma salvare li file sorgente dello schema in /etc/ldap/schema/. Nell'impostazione predefinita LDAP di Debian include i seguenti schemi: * core * cosine * nis * inetorgperson Vogliamo aggiungere a questo elenco il samba.schema, fornito dal pacchetto samba-doc. ==== Caricamento a freddo da file .ldif ==== Quello che segue è un metodo manuale per compilare i file samba.schema in un file .ldif: <code bash> zcat /usr/share/doc/samba-doc/examples/LDAP/samba.schema.gz > /etc/ldap/schema/samba.schema mkdir tmp cd tmp cat « EOF > my_slapd.conf include /etc/ldap/schema/core.schema include /etc/ldap/schema/cosine.schema include /etc/ldap/schema/nis.schema include /etc/ldap/schema/inetorgperson.schema include /etc/ldap/schema/samba.schema EOF mkdir my_slapd.d slaptest -f my_slapd.conf -F my_slapd.d </code> Il file samba.schema verrà compilato in my_slapd.d/cn=config/cn=schema/cn={4}samba.ldif e potrà essare copiato in /etc/ldap/slapd.d/cn=config/cn=schema dopo aver fermato il servizio slapd: <code bash> /etc/init.d/slapd stop cp 'my_slapd.d/cn=config/cn=schema/cn={4}samba.ldif' '/etc/ldap/slapd.d/cn=config/cn=schema/' /etc/init.d/slapd start </code> NOTA: Eventualmente modificare il creatorsName e modifiersName per uniformarlo agli altri file .ldif. ==== Caricamento a caldo con ldapadd ==== Un vantaggio della configurazione cn=config di slapd è quella di poter modificare la configurazione senza fermare il servizio (in questo caso aggiungere uno schema). Per fare questo bisogna “ripulire” un po' il file creato con il metodo visto sopra e caricarlo a runtime con ldapadd. La pulizia consiste nel togliere le stringhe {4} all'inizio del file (4 è il numero progressivo dello schema, mentre core.schema è il primo ed ha numero zero): <file> dn: cn={4}samba objectClass: olcSchemaConfig cn: {4}samba </file> In fondo al file bisogna togliere le righe: <file> structuralObjectClass: entryUUID: creatorsName: createTimestamp: entryCSN: modifiersName: modifyTimestamp: </file> Infine per caricare il file LDIF (in questo caso senza fermare il servizio): <code> ldapadd -x -D “cn=admin,cn=config” -f 'my_slapd.d/cn=config/cn=schema/cn={4}samba.ldif' </code> ===== Configurazione TLS ===== Per utilizzare i protocolli cifrati ldaps (su porta 636 TCP) oppure ldap con StartTLS (su porta 389 TCP) bisogna anzitutto creare un certificato auto-firmato, utilizziamo per questo openssl. Creare un file di configurazione, ad esempio /etc/ldap/tls/ldap.my.rigacci.org.cnf: <file> #—————————————————————- # Create an RSA key and a self-signed Certificate with the # following command: # # openssl req -config /etc/ldap/tls/ldap.my.rigacci.org.cnf \ # -new -x509 -days 1461 -nodes \ # -keyout /etc/ldap/tls/ldap.my.rigacci.org.pem \ # -out /etc/ldap/tls/ldap.my.rigacci.org.pem # # The resulting file (unencrypted otherwise Slapd can't start # automatically) will contains the RSA private key, so be sure # to set its mode to 0400. #—————————————————————- [ req ] prompt = no default_bits = 2048 distinguished_name = ldap.rigacci.org_distinguished_name [ ldap.my.rigacci.org_distinguished_name ] countryName = IT stateOrProvinceName = Italy localityName = Firenze organizationName = Rigacci.Org organizationalUnitName = Information and Communications Technology commonName = ldap.my.rigacci.org emailAddress = webmaster@rigacci.org </file> Utilizzare il comando openssl come indicato nel commento. Il certificato .pem generato ha validtià 4 anni, deve essere protetto con mode 0400 e appartenere a openldap:openldap. Per utilizzare il certificato si deve aggiungere al nodo cn=config le due chiavi: <file> olcTLSCertificateFile: /etc/ldap/tls/ldap.my.rigacci.org.pem olcTLSCertificateKeyFile: /etc/ldap/tls/ldap.my.rigacci.org.pem </file> cioè (avendo fermato slapd) basta aggiungere le due righe in /etc/ldap/slapd.d/cn=config.ldif. Avendo attivato ldaps si potrebbe chiudere all'esterno il protocollo ldap, mettendo in /etc/default/slapd (impedendo peró anche ldap StartTLS): <file> SLAPD_SERVICES=“ldap://127.0.0.1:389/ ldaps:/ ldapi:/” </file> ==== Test ==== Per provare la connessione su protocollo ldaps si può usare: <code> ldapsearch -v -x -H ldaps:127.0.0.1/ -b “dc=rigacci,dc=org” “(objectclass=*)” </code> ATTENZIONE: Poiché il server slapd sta usando un certificato auto-firmato, il client (ldapsearch) non deve tentare di validarlo. Si imposta questo comportamento per tutti i client system-wide mettendo in /etc/ldap/ldap.conf: <file> TLS_REQCERT never </file> Per verificare ldap con StartTLS (sulla porta 389 TCP) basta aggiungere l'opzione -ZZ a ldapsearch. Catturando i pacchetti con tcpdump sull'interfaccia lo si verifica che la trasmissione dati sia cifrata.

doc/appunti/linux/sa/sldap.1318503562.txt.gz · Last modified: 2011/10/13 12:59 by niccolo