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/13 13:07] – [Creazione di un indice] niccolodoc:appunti:linux:sa:sldap [2014/12/25 16:24] – [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.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 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.txt · Last modified: 2014/12/25 16:26 by niccolo