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/13 13:07] – [Creazione di un indice] niccolodoc:appunti:linux:sa:sldap [2014/12/25 16:26] (current) – [Configurazione TLS] niccolo
Line 26: Line 26:
 </file> </file>
  
 +===== Inizializzazione o restore di un database =====
 +
 +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/''**.
 +
 +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>
 +/etc/init.d/slapd stop
 +slapadd -b 'dc=rigacci,dc=org' < slapcat_dump.ldif
 +/etc/init.d/slapd start
 +</code>
 +
 +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 ===== ===== Creazione di un indice =====
  
Line 39: 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 119: 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 126: 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 140: 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 146: 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 155: 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>
  
 cioè (avendo fermato ''slapd'') basta aggiungere le due righe in **''/etc/ldap/slapd.d/cn=config.ldif''**. 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): Avendo attivato ''ldaps'' si potrebbe chiudere all'esterno il protocollo ''ldap'', mettendo in **''/etc/default/slapd''** (impedendo peró anche ldap StartTLS):
Line 168: Line 203:
 </file> </file>
  
 +Questi i protocolli e i meccanismi di trasporto supportati da OpenLDAP:
 +
 +^ URL            ^ Protocol       ^ Transport     ^
 +| %%ldap:///%%   | LDAP           | TCP port 389  |
 +| %%ldaps:///%%  | LDAP over SSL  | TCP port 636  |
 +| %%ldapi:///%%  | LDAP           | IPC (Unix-domain socket)  |
 ==== Test ==== ==== Test ====
  
Line 185: 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.1318504058.txt.gz · Last modified: 2011/10/13 13:07 by niccolo