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
doc:appunti:linux:sa:sldap [2011/10/14 12:25] – [Creazione di un indice] niccolodoc:appunti:linux:sa:sldap [2014/12/25 16:26] (current) – [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.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.rigacci.org.pem \ 
-#     -out /etc/ldap/tls/ldap.my.rigacci.org.pem+#     -out /etc/ldap/ssl/ldap.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.1318587909.txt.gz · Last modified: 2011/10/14 12:25 by niccolo