Come installare un server LDAP su un router


In questa pagina descriverò come installare un "server LDAP" su un router (Asus RT-AC56U) - useremo alcuni pacchetti di Entware, pertanto fate riferimento a questa pagina su come installare Entware su un router.
Installeremo il "server OpenLDAP" usando i pacchetti Entware.


Come installare il server OpenLDAP

Allo scopo di installare il "server OpenLDAP" con i pacchetti Entware, dobbiamo eseguire il seguente comando :
opkg install openldap-server openldap-utils
Dopo aver fatto questo, creiamo una copia di riserva dei file "/opt/etc/openldap/ldap.conf" e "/opt/etc/openldap/slapd.conf".
Ciò che segue è il contenuto del nuovo file "/opt/etc/openldap/ldap.conf" :

#
# LDAP Defaults
#

# See ldap.conf(5) for details
# This file should be world readable but not world writable.

BASE dc=office,dc=data
URI ldap://192.168.1.4

Fare riferimento a questa pagina per ulteriori dettagli sul file di configurazione "ldap.conf".
Nel suddetto esempio, la base predefinita "dc=office,dc=data" verrà usata in questa pagina, mentre l'indirizzo IP "192.168.1.4" è l'indirizzo del router dover andremo ad installare il "server OpenLDAP".
Abbiamo anche bisogno di creare un nuovo file "/opt/etc/openldap/slapd.conf" :

#
# See slapd.conf(5) for details on configuration options.
# This file should NOT be world readable.
#
include /opt/etc/openldap/schema/core.schema
include /opt/etc/openldap/schema/cosine.schema
include /opt/etc/openldap/schema/inetorgperson.schema

loglevel 296
pidfile /opt/var/run/slapd.pid
argsfile /opt/var/run/slapd.args

############################
# MDB database definitions
############################

database ldif
suffix "ou=Addressbook,dc=office,dc=data"
rootdn "cn=admin,ou=Addressbook,dc=office,dc=data"
#rootpw {SSHA}

# The database directory MUST exist prior to running slapd AND
# should only be accessible by the slapd and slap tools.
# Mode 700 recommended.
directory /opt/var/openldap-data

# Simple ACL granting read access to the world
access to *
by * read

Fare riferimento a questa pagina per ulteriori dettagli sul file di configurazione "slapd.conf".
Da notare che abbiamo incluso l'account amministratore "rootdn", ma senza la password. Io suggerisco di creare una password per l'account amministratore, leggere la seguente sezione "Come impostare una password per l'account amministratore".
Dobbiamo creare la cartella del database prima di avviare il daemon "OpenLDAP", con i seguenti comandi :
mkdir /opt/var/openldap-data
chmod 700 /opt/var/openldap-data

In seguito dobbiamo verificare se il file di configurazione è corretto oppure no :
slapd -T test
Se esso restituisce "config file testing succeeded", allora il file di configurazione è corretto. Altrimenti qualcosa all'interno del file di configurazione è sbagliato.
Per avviare il daemon "OpenLDAP", dobbiamo eseguire il seguente comando :
/opt/etc/init.d/S58slapd start


Come impostare una password per l'account amministratore

Nella precedente sezione abbiamo incluso l'account amministratore "rootdn", ma senza la password. In questa sezione spiegherà brevemente come impostare una password per l'account amministratore.
Creiamo un file script, ad esempio lo chiamiamo "generate.sh", con il seguente contenuto :

#!/bin/sh

PWD="$1"
NUMRAND="$(openssl rand 3)"
SHA1="$(printf "%s%s" "$PWD" "$NUMRAND" | openssl dgst -binary -sha1)"
printf "{SSHA}%s\n" "$(printf "%s%s" "$SHA1" "$NUMRAND" | openssl enc -base64)"

Nello suddetto script, usiamo il comando "openssl". Normalmente un router dovrebbe includere questo comando, ma se non è incluso, possiamo installare un pacchetto Entware con il seguente comando :
opkg install openssl-util
Per generare una password, dobbiamo eseguire lo script, passare la nostra password ad esso, per esempio se vogliamo usare la password "secret" dobbiamo digitare :
./generate.sh secret
Il risultato restituito da questo script è il valore che dovremo mettere dentro il file di configurazione "/opt/etc/openldap/slapd.conf", nella linea "rootpw" dopo "{SSHA}", in questo modo avremo le seguenti linee nel suddetto file di configurazione :

rootdn "cn=admin,ou=Addressbook,dc=office,dc=data"
rootpw {SSHA}cF/RbPI0zOecojYc30UONVNBF2ke+Bg=

Infine riavviamo il daemon "OpenLDAP" con il comando :
/opt/etc/init.d/S58slapd restart


Come inizializzare il database del server OpenLDAP

Adesso è arrivato il momento di inizializzare il database del "server OpenLDAP", aggiungendo le prime voci su di esso.
La prima voce è la voce radice del database. Creiamo un file radice .LDIF, per esempio lo chiamiamo "start.ldif" con il seguente contenuto :

dn: ou=Addressbook,dc=office,dc=data
objectclass: top
objectclass: organizationalUnit
ou: Addressbook

Inseriamo il suddetto file nel database usando il comando "ldapadd" (potrebbe essere richiesta la password di amministratore) :
ldapadd -x -W -D "cn=admin,ou=Addressbook,dc=office,dc=data" -f start.ldif
Fare riferimento a questa pagina per ulteriori dettagli sul comando "ldapadd".
In seguito inseriamo una nuova voce di esempio nel database, usando un file di esempio .LDIF chiamato "test.ldif" con il seguente contenuto :

dn: cn=Testing,ou=Addressbook,dc=office,dc=data
cn: Testing
givenname: Testing
objectclass: top
objectclass: person
objectclass: organizationalPerson
sn: Testing
telephonenumber: 9999999

Inseriamo il file suddetto nel database usando il comando "ldapadd" (potrebbe essere richiesta la password di amministratore):
ldapadd -x -W -D "cn=admin,ou=Addressbook,dc=office,dc=data" -f test.ldif


Come gestire le voci del database attraverso il server web

In questa sezione descriverò come gestire le voci del database attraverso un server web - prima di fare questo, fare riferimento a questa pagina su come installare un server web.
Per effettuare questo compito, installeremo un'applicazione PHP denominata "ABLdap". Scarichiamo il file compresso e in seguito estraiamo il file compresso direttamente sulla cartella radice del server server, ad esempio nella cartella "/opt/share/www/lighttpd/abldap" (la sottocartella "abldap" deve essere creata prima di estrarre i file).
All'interno della cartella "/opt/share/www/lighttpd/abldap", dobbiamo impostare il file "config.php" allo scopo di usare il nostro database con gli opportuni parametri.
Questo è il contenuto del file "config.php" che dovremo ottenere seguendo i valori inclusi nel file di configurazione del daemon "OpenLDAP" :

<?php

$config['locale'] = 'en_US';

// Insecure connection (LDAP data will be transmitted in clear text)
$config['ldaphost'] = 'localhost';
// Secure connection, using the ldaps protocol.
//$config['ldaphost'] = 'ldaps://127.0.0.1/';

// suffix: starting point for the search, as in ldapsearch -b
$config['suffix'] = 'ou=Addressbook,dc=office,dc=data';

// rootdn: Distinguished Name used to bind to the LDAP directory, as in ldapsearch -D
$config['rootdn'] = 'cn=admin,ou=Addressbook,dc=office,dc=data';

// IF you define the admin password, ABLdap will do an auto-logon.
//$config['rootpw'] = 'MySecret';

?>

Quindi copiamo il file "/opt/share/www/lighttpd/abldap/doc/examples/mozillaabpersonalpha.schema" nella cartella "/opt/etc/openldap/schema/".
In seguito aggiungiamo la linea "include /opt/etc/openldap/schema/mozillaabpersonalpha.schema" nel file di configurazione "/opt/etc/openldap/slapd.conf", in modo da avere :

include /opt/etc/openldap/schema/core.schema
include /opt/etc/openldap/schema/cosine.schema
include /opt/etc/openldap/schema/inetorgperson.schema
include /opt/etc/openldap/schema/mozillaabpersonalpha.schema

Dobbiamo anche installare alcuni moduli PHP per il server web, usando il seguente comando :
opkg install php7-mod-gettext php7-mod-session php7-mod-ldap
E infine possiamo riavviare il server web con il seguente comando :
/opt/etc/init.d/S80lighttpd restart
Apriamo il browser, andiamo nel server web e selezioniamo la sottocartella "abldap". Una pagina PHP apparirà e semplicemente inseriamo la password di amministratore.
Un elenco di voci verrà mostrato dall'applicazione PHP, possiamo aggiungere altre voci al database, modificare una voce o eliminare una voce.