User Tools

Site Tools


doc:appunti:linux:sa:sldap

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Last revisionBoth sides next revision
doc:appunti:linux:sa:sldap [2011/10/14 12:25] – [Creazione di un indice] niccolodoc:appunti:linux:sa:sldap [2014/12/25 16:24] – [Configurazione TLS] niccolo
Line 26: Line 26:
 </file> </file>
  
-===== Creazione di un indice =====+===== Inizializzazione o restore di un database =====
  
-FIXME **NON CREARE QUESTO INDICE** FIXME Altrimenti la ricerca per **''sambaSID''** fallisce!+Nell'installazione predefinita il database #1 viene definito nel file **''/etc/ldap/slapd.d/cn=config/olcDatabase={1}hdb.ldif''**, il contenuto vero e proprio (in formato Berkeley DB) è invece in **''/var/lib/ldap/''**.
  
-Questa è la query che esegue il demone Samba:+Per recuperare o inizializzare il contenuto del database (ad esempio facendo il restore di un precedente **''slapcat''**) è sufficiente eseguire questa procedura basata su **''slapadd''** (aggiustare il //suffix// del database in cui fare il restore):
  
 <code> <code>
-ldapsearch -x -H ldaps://127.0.0.1-D "cn=admin,dc=rigacci,dc=org" -W -b "dc=rigacci,dc=org" \ +/etc/init.d/slapd stop 
-    "(&(sambaSID=s-1-5-21-507755589-3346621370-1365447521-3000)(objectClass=sambaSamAccount))"+slapadd -b 'dc=rigacci,dc=org' < slapcat_dump.ldif 
 +/etc/init.d/slapd start
 </code> </code>
  
-se esiste l'indice la ricerca resituisce zero risultatibisogna aggiungere un **''*''** in coda al sambaSID per ottenere qualcosaCome mai?+Dopo l'operazione controllare i permessi dei file in ''/var/lib/ldap/'', devono essere leggibili e scrivibili da **''openldap''**. Se per esempio un indice viene creato a nome di ''root''nelle successive esecuzioni di ''ldapadd'' si incappa nell'errore: 
 + 
 +<code> 
 +ldap_add: Other (e.g., implementation specific) error (80) 
 +        additional info: index generation failed 
 +</code> 
 + 
 +Notare che **non è in genere possibile usare ''ldapadd''** per aggiungere oggetti in un database vuoto, ad esempio perché le informazioni per onorare le ACL (es. le password) devono risiedere nel database stesso. 
 + 
 +In modo analogo con ''ldapadd'' non è possibile effettuare il restore di alcuni attributi, in quanto lo schema li dichiara non modificabili dall'utente. Questi alcuni esempi: **''structuralObjectClass''**, **''entryUUID''**, **''creatorsName''**. Quindi in generale il restore va effettuato con **''slapadd''** che interviene direttamente sul database senza passare per il protocollo LDAP. 
 +===== Creazione di un indice =====
  
 Esempio: l'esecuzione di **''pdbedit -L -w''** con Samba che si appoggia su LDAP genera il seguente messaggio di log: Esempio: l'esecuzione di **''pdbedit -L -w''** con Samba che si appoggia su LDAP genera il seguente messaggio di log:
Line 50: Line 61:
 olcDbIndex: sambaSID eq olcDbIndex: sambaSID eq
 </file> </file>
 +
 +Si possono indicare, separati da virgola, diversi criteri per la creazione dell'indice: **''pres''**, **''approx''**, **''eq''**, **''sub''** e **''special''**.
  
 Nel nostro esempio la configurazione del database è contenuta nel nodo **''olcDatabase={1}hdb''**, cioè nel file **''/etc/ldap/slapd.d/cn=config/olcDatabase={1}hdb.ldif''** (sempre da editare a servizio fermo). Nel nostro esempio la configurazione del database è contenuta nel nodo **''olcDatabase={1}hdb''**, cioè nel file **''/etc/ldap/slapd.d/cn=config/olcDatabase={1}hdb.ldif''** (sempre da editare a servizio fermo).
  
 +==== Debug ====
 +
 +Potrebbe capitare che l'indice risulti corrotto, in tal caso la ricerca restituisce zero risultati. Con un database Syncrepl la strada più rapida è fermare il servizio, rimuovere i file (directory predefinita **''/var/lib/ldap/''**) e quindi riavviare il servizio.
 +
 +L'errore è visibile solo con **''olcLogLevel: stats filter trace''**, ed è qualcosa di simile:
 +
 +<code>
 +slapd[2937]: #011EQUALITY
 +slapd[2937]: => bdb_equality_candidates (sambaSID)
 +slapd[2937]: => key_read
 +slapd[2937]: <= bdb_index_read: failed (-30988)
 +</code>
 ===== Inclusione di uno schema aggiuntivo ===== ===== Inclusione di uno schema aggiuntivo =====
  
Line 130: Line 155:
 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''. 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''**:+Creare un file di configurazione, ad esempio **''/etc/ldap/ssl/ldap.rigacci.org.cnf''**:
  
 <file> <file>
Line 137: Line 162:
 # following command: # following command:
 # #
-# openssl req -config /etc/ldap/tls/ldap.my.rigacci.org.cnf \+# openssl req -config /etc/ldap/ssl/ldap.my.rigacci.org.cnf \
 #     -new -x509 -days 1461 -nodes \ #     -new -x509 -days 1461 -nodes \
-#     -keyout /etc/ldap/tls/ldap.my.rigacci.org.pem \ +#     -keyout /etc/ldap/ssl/ldap.my.rigacci.org.pem \ 
-#     -out /etc/ldap/tls/ldap.my.rigacci.org.pem+#     -out /etc/ldap/ssl/ldap.my.rigacci.org.pem
 # #
 # The resulting file (unencrypted otherwise Slapd can't start # The resulting file (unencrypted otherwise Slapd can't start
Line 151: Line 176:
 distinguished_name              = ldap.rigacci.org_distinguished_name distinguished_name              = ldap.rigacci.org_distinguished_name
  
-[ ldap.my.rigacci.org_distinguished_name ]+[ ldap.rigacci.org_distinguished_name ]
 countryName                     = IT countryName                     = IT
 stateOrProvinceName             = Italy stateOrProvinceName             = Italy
Line 157: Line 182:
 organizationName                = Rigacci.Org organizationName                = Rigacci.Org
 organizationalUnitName          = Information and Communications Technology organizationalUnitName          = Information and Communications Technology
-commonName                      = ldap.my.rigacci.org+commonName                      = ldap.rigacci.org
 emailAddress                    = webmaster@rigacci.org emailAddress                    = webmaster@rigacci.org
 </file> </file>
Line 166: Line 191:
  
 <file> <file>
-olcTLSCertificateFile: /etc/ldap/tls/ldap.my.rigacci.org.pem +olcTLSCertificateFile: /etc/ldap/ssl/ldap.rigacci.org.pem 
-olcTLSCertificateKeyFile: /etc/ldap/tls/ldap.my.rigacci.org.pem+olcTLSCertificateKeyFile: /etc/ldap/ssl/ldap.rigacci.org.pem
 </file> </file>
  
Line 201: Line 226:
  
 Catturando i pacchetti con **''tcpdump''** sull'interfaccia ''lo'' si verifica che la trasmissione dati sia cifrata. Catturando i pacchetti con **''tcpdump''** sull'interfaccia ''lo'' si verifica che la trasmissione dati sia cifrata.
 +
 +===== Cambio password =====
 +
 +Per modificare la password di un record LDAP esiste l'**RFC 3062** e l'apposito tool **''ldappasswd''**. Con l'opzione **''%%-D%%''** si specifica le credenziali per il collegamento, con **''%%-S%%''** si attiva la modalità interattiva, l'utente a cui cambiare la password è indicato come ultimo parametro:
 +
 +<code>
 +ldappasswd -x -D "cn=admin,dc=rigacci,dc=org" -W -h host.rigacci.org -S "cn=user,dc=rigacci,dc=org"
 +</code>
 +
doc/appunti/linux/sa/sldap.txt · Last modified: 2014/12/25 16:26 by niccolo