{"id":316,"date":"2017-10-09T22:58:24","date_gmt":"2017-10-09T21:58:24","guid":{"rendered":"http:\/\/eppesuigoccas.homedns.org\/wordpress\/?p=316"},"modified":"2017-10-10T07:10:29","modified_gmt":"2017-10-10T06:10:29","slug":"creare-un-nuova-directory-in-ldap-con-la-nuova-configurazione-in-etcldapslapd-d","status":"publish","type":"post","link":"https:\/\/blog.sguazz.it\/index.php\/archives\/316","title":{"rendered":"Creare un nuova directory in LDAP con la nuova configurazione in \/etc\/ldap\/slapd.d"},"content":{"rendered":"<p>Quando si installa il pacchetto slapd, si configura una directory, generalmente chiamata <em>dc=nodomain<\/em>. Da quel punto in poi, tutta la modifica alla configurazione pu\u00f2 essere fatta con un client LDAP, oppure si pu\u00f2 operare direttamente con i file. Vediamo questa seconda via.<\/p>\n<p>La prima cosa da considerare \u00e8 che una directory LDAP viene memorizzata in una directory del <em>file system<\/em> tramite vari file che contengono dati e indici. Il sistema pi\u00f9 vecchio di memorizzazione \u00e8 quello chiamato bdb (Oracle Berkeley DB), ma ne esistono anche altri quali hdb (hierarchical Berkeley DB), mdb (Memory-Mapped DB) e sql. Ce ne sono anche altri, ma non sono generici. Scartiamo l&#8217;ultimo della lista, sql, poich\u00e9 si tratta di uno strumento che permette solo di leggere dati, senza poterli modificare. Scartiamo anche il primo e il secondo, bdb e hdb, che sono ormai vetusti e addirittura sconsigliati per l&#8217;uso. Ci rimane sostanzialmente mdb.<!--more--><\/p>\n<p>In Debian, per avere informazioni su mdb dobbiamo usare il comando \u00abman slapd-mdb\u00bb, difatti tutti i sistemi di memorizzazione indicati sopra sono definiti <em>backend<\/em> che slapd utilizza per lo strato di persistenza.<\/p>\n<p>Oltre ad un meccanismo per memorizzare i dati, una directory LDAP ha anche un sistema di autorizzazioni: ci sono le credenziali di un utente che fa da supervisore alla directory, ci sono dei controlli per permettere solo ad alcuni di memorizzare certi attributi. Tipicamente, il supervisore pu\u00f2 cambiare la password di chiunque, ciascuno pu\u00f2 cambiare solo la propria, gli accessi anonimi possono usare la password solo per tentare l&#8217;accesso.<\/p>\n<p>Infine c&#8217;\u00e8 la caratteristica principale di una directory: il suo nome. Normalmente un nome \u00e8 chiamato <em>Base DN<\/em> ed \u00e8 composto da uno o pi\u00f9 componenti di tipo <em>DC<\/em>. Ad esempio <em>DC=azienda, DC=com<\/em>, il che implica che gli oggetti di primo livello nella nostra directory LDAP saranno chiamati con quella estensione, come in OU<em>=utenti, DC=azienda, DC=com<\/em>, oppure <em>CN=manager, DC=azienda, DC=com<\/em>, o<em> uid=Francesco Stoppani, DC=azienda, DC=com<\/em>. (Nella terminologia di LDAP, CN \u00e8 <em>common name<\/em>, OU \u00e8\u00a0<em>organizationl unit name<\/em>, mentre un DC \u00e8 un <em>domain component<\/em>, UID \u00e8 <em>user identification<\/em>.)<\/p>\n<p>Per configurare una directory LDAP \u00e8 quindi necessario stabilire quale nome darle, quale modalit\u00e0 di memorizzazione utilizzare, come impostare le autorizzazioni, quali credenziali usare per il supervisore. Nel nostro caso, decidiamo di voler definire una directory LDAP chiamata <em>DC=azienda, DC=com<\/em>, di avere un supervisore chiamato <em>CN=manager<\/em> e password \u00abslpnss\u00bb (come password uso le consonanti del titolo del sonetto <em><span style=\"text-decoration: underline;\">Solo e pensoso<\/span><\/em> di Petrarca), per la persistenza uso Memory-Mapped DB e memorizzo tutto in <em>\/var\/lib\/ldap-azienda.com<\/em>.<\/p>\n<p>Per prima cosa va creata la directory nella quale memorizzare il tutto, <em>\/var\/lib\/ldap-azienda.com<\/em>, e assegnare i diritti corretti in modo che sia di propriet\u00e0 dell&#8217;utenza che esegue il server LDAP, normalmente <em>openldap<\/em>. Possiamo verificare quale sia questa utenza nel file di configurazione di slapd, con il comando \u00abgrep ^SLAPD_USER= \/etc\/default\/slapd\u00bb.<\/p>\n<pre># mkdir \/var\/lib\/ldap-azienda.com\r\n# chown openldap:openldap \/var\/lib\/ldap-azienda.com<\/pre>\n<p>Poi ci spostiamo nella directory della configurazione di slapd, <em>\/etc\/ldap\/slapd.d\/cn=config<\/em>, e definiamo un file per la configurazione della persistenza. In questa directory i file vanno tutti numerati a seconda del tipo, che nel nostro caso \u00e8 <em>olcBackend<\/em>, quindi vediamo quali altri file ci sono gi\u00e0 con nomi simili:<\/p>\n<pre># cd \/etc\/ldap\/slapd.d\/cn=config\r\n# ls -l olcBackend*\r\n-rw------- 1 openldap openldap 414 ott 9 16:47 olcBackend={0}mdb.ldif<\/pre>\n<p>Di norma questo file c&#8217;\u00e8 gi\u00e0, poich\u00e9 viene generato all&#8217;istallazione di slapd. In caso negativo andrebbe creato cos\u00ec:<\/p>\n<pre>dn: olcBackend={0}mdb\r\nobjectClass: olcBackendConfig\r\nolcBackend: {0}mdb\r\nstructuralObjectClass: olcBackendConfig<\/pre>\n<p>Nota importante: tutti i nomi dei file in questa directory devono avere estensione \u00abldif\u00bb.<\/p>\n<p>Nel caso che ci sia gi\u00e0 un file <em>backend<\/em> che usa il numero sequenziale 0 e che non definisce mdb, si dovrebbe usare il numero 1 sia per nominare questo file che nelle righe che iniziano con <em>dn<\/em> e con <em>olcBackend<\/em>. Il nuovo file sarebbe chiamato <em>olcBackend={1}mdb.ldif<\/em> e conterrebbe:<\/p>\n<pre>dn: olcBackend={1}mdb\r\nobjectClass: olcBackendConfig\r\nolcBackend: {1}mdb\r\nstructuralObjectClass: olcBackendConfig<\/pre>\n<p>Poi va definita la directory vera e propria, in un file di tipo olcDatabase. Vediamo quali gi\u00e0 ci sono:<\/p>\n<pre># ls -l olcDa*\r\n-rw------- 1 openldap openldap 543 ott 9 16:47 olcDatabase={0}config.ldif\r\n-rw------- 1 openldap openldap 657 ott 9 16:47 olcDatabase={-1}frontend.ldif\r\n-rw------- 1 openldap openldap 1326 ott 9 17:24 olcDatabase={1}mdb.ldif<\/pre>\n<p>e creiamo quello che si chiama con il numero 2, <em>olcDatabase={2}mdb.ldif<\/em>,\u00a0 e che conterr\u00e0:<\/p>\n<pre># BDB definition for example.com\r\ndn: olcDatabase={2}mdb\r\nobjectClass: olcDatabaseConfig\r\nobjectClass: olcMdbConfig\r\nolcDatabase: {2}mdb\r\nolcSuffix: dc=azienda,dc=com\r\nolcDbDirectory: \/var\/lib\/ldap-azienda.com\r\nolcRootDN: cn=manager,dc=azienda,dc=com\r\nolcRootPW: e1NTSEF9OXJZdDVyTy9uaU5PN2FvUkhxUEVCZkVIVWFwM3ViSng=\r\nolcDbIndex: objectClass eq\r\nolcDbIndex: uidNumber,gidNumber eq\r\nolcDbIndex: loginShell eq\r\nolcDbIndex: uid,cn eq,sub\r\nolcDbIndex: memberUid eq,sub\r\nolcDbIndex: member,uniqueMember eq\r\nolcDbIndex: sambaSID eq\r\nolcDbIndex: sambaPrimaryGroupSID eq\r\nolcDbIndex: sambaGroupType eq\r\nolcDbIndex: sambaSIDList eq\r\nolcDbIndex: sambaDomainName eq\r\nolcDbIndex: default sub,eqolcAccess: to attrs=userPassword\r\n  by self write\r\n  by anonymous auth\r\n  by dn.base=\"cn=manager,dc=azienda,dc=com\" write\r\n  by * none\r\nolcAccess: to *\r\n  by self write\r\n  by dn.base=\"cn=manager,dc=azienda,dc=com\" write\r\n  by * read<\/pre>\n<p>Nota: la parola dopo il numero tra parentesi graffe, nel nome del file, non \u00e8 un nome qualsiasi, ma deve essere il tipo di <em>backend<\/em> scelto per la persistenza.<\/p>\n<p>Nota: la password \u00e8 una codifica base64 di una cifratura SSHA. Per ottenere la password cifrata si deve convertirla secondo SSHA e memorizzare sia il <em>salt<\/em> che il valore cifrato in una sola stringa, come mostrato <a href=\"http:\/\/www.openldap.org\/faq\/data\/cache\/347.html\">qui<\/a>.<\/p>\n<p>Una volta terminato con queste modifiche, \u00e8 sufficiente riavviare il server LDAP perch\u00e9 siano attive. Il comando per riavviare \u00e8:<\/p>\n<pre># systemctl restart slapd.service<\/pre>\n<p>che non dovrebbe dare nessun output, vale a dire che tutto \u00e8 andato bene. Se invece c&#8217;\u00e8 qualche errore nella configurazione, oppure nei diritti sul file system, ci sar\u00e0 un errore criptico. Per capire esattamente cosa sia successo \u00e8 possibile avviare slapd con l&#8217;opzione di debug e un parametro che indica il lvello di informazione richiesta, ad esempio<\/p>\n<pre>\/usr\/sbin\/slapd -d 3<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Quando si installa il pacchetto slapd, si configura una directory, generalmente chiamata dc=nodomain. Da quel punto in poi, tutta la modifica alla configurazione pu\u00f2 essere fatta con un client LDAP, oppure si pu\u00f2 operare direttamente con i file. Vediamo questa seconda via. La prima cosa da considerare \u00e8 che una directory LDAP viene memorizzata in [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,3,11,10],"tags":[],"class_list":["post-316","post","type-post","status-publish","format-standard","hentry","category-sysadmin","category-computer","category-debian","category-open-source"],"_links":{"self":[{"href":"https:\/\/blog.sguazz.it\/index.php\/wp-json\/wp\/v2\/posts\/316","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.sguazz.it\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.sguazz.it\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.sguazz.it\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.sguazz.it\/index.php\/wp-json\/wp\/v2\/comments?post=316"}],"version-history":[{"count":10,"href":"https:\/\/blog.sguazz.it\/index.php\/wp-json\/wp\/v2\/posts\/316\/revisions"}],"predecessor-version":[{"id":326,"href":"https:\/\/blog.sguazz.it\/index.php\/wp-json\/wp\/v2\/posts\/316\/revisions\/326"}],"wp:attachment":[{"href":"https:\/\/blog.sguazz.it\/index.php\/wp-json\/wp\/v2\/media?parent=316"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.sguazz.it\/index.php\/wp-json\/wp\/v2\/categories?post=316"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.sguazz.it\/index.php\/wp-json\/wp\/v2\/tags?post=316"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}