La documentazione è come il sesso; quando è ben fatta è davvero ben fatta, altrimenti... è meglio che niente.

— Dick Brandon

ArchLinux Small Business Server (4) - LDAP server

http://www.stenoweb.it/files/blog/archlogo.png Ora si entra nel vivo, si comincia ad installare e configurare i servizi sulla nostra box ancora "vuota". Iniziamo con LDAP che useremo come servizio di autenticazione per i nostri utenti e servizi. E qualche problema comincia ad affiorare. :)

LDAP Server

Introduzione

Il server LDAP è essenzialmente un database gerarchico che viene utilizzato per la memorizzazione dei dati degli utenti, e di tutto quanto si desideri gestire tramite una base dati condivisibile via rete tra più sistemi. Per maggiori informazioni potete leggere la definizione che ne da .
Perchè installiamo questo servizio ? Per la sua grande versatilità e comodità. La recente normativa sulla privacy impone (tra le altre cose) di cambiare periodicamente la password degli utenti. Oltretutto ogni utente deve poter cambiare la propria password in modo autonomo. Non vorrete mica ogni volta aggiornare manualmente prima la password nel pc, poi della condivisione poi della mail, poi ...
Installando un server LDAP (nel nostro caso ) abbiamo la possibilità di centralizzare tutto (o quasi). Cambiando la password nel pc dell'utente questa verrà salvata nell'albero LDAP e tutti i servizi saranno sincronizzati.
Signori e Signore ecco il Single Signon , il santo graal di ogni amministratore di rete :).

Installazione

Preleviamo ed installiamo i pacchetti che ci servono :

sudo pacman -S openldap openldap-clients nss_ldap pam_ldap

pacman provvederà ad installare eventuali dipendenze.

Configurazione del Server

OpenLDAP è un progetto complesso, qui non fornirò nessuna informazione "supplementare" a questo servizio, come sempre date una occhiata al per maggiori informazioni.
Iniziamo con la parte server :

/etc/openldap/slapd.conf

La parte server di openLDAP và configurata editando una serie di file, per primo il file /etc/openldap/slapd.conf

sudo nano /etc/openldap/slapd.conf

che facciamo diventare così :
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
allow bind_v2
password-hash {md5}
pidfile /var/run/slapd.pid
argsfile /var/run/slapd.args
database bdb
suffix "dc=mede,dc=it"
rootdn "cn=Manager,dc=mede,dc=it"
#Per la password usa il comando
#slappasswd -h {MD5} -s passwordstring
#e copia il risultato
rootpw {MD5}En3fj26GwP2ni1HHJHe1KA==
directory /var/lib/openldap/openldap-data
index objectClass eq
index uid eq

Attenzione al parametro rootpw : la stringa che vedete corrisponde all' della password che ho deciso, nel mio caso archimede, che ho ottenuto così:
slappasswd -h {MD5} -s archimede

decidete la vostra password e mettetela come parametro di rootpw.

/etc/nsswitch.conf

Il file del Network Services Switch /etc/nsswitch.conf determina l'ordine delle ricerche effettuate quando viene richiesta una certa informazione, proprio come il file /ets/host.conf che determina il modo in cui effettuare le ricerche degli host. Per esempio la riga:

hosts: files dns ldap

specifica che le funzioni di ricerca degli host dovrebbero prima guardare nel file locale /etc/hosts, di seguito fare una richiesta al servizio dei nomi di dominio ed infine utilizzare il server ldap. A quel punto, se nessuna corrispondenza è stata trovata, viene riportato un errore. Questo file deve essere leggibile da ogni utente!
Dobbiamo istruire nsswitch al fine di fargli usare il nostro server LDAP per la risoluzione perlomeno delle password.
Per ovviare ad un (o di nsswitch, non saprei) creiamo due file che poi scambieramo al boot (vedi più avanti).
Prima il file che non utilizza ldap :
sudo nano /etc/nsswitch.file

che diventa :
#Begin /etc/nsswitch.conf
passwd: files
group: files
shadow: files
publickey: files
netmasks: files
bootparams: files
automount: files
sendmailvars: files
hosts: files dns
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: db files
#End /etc/nsswitch.conf

e poi il file che invece lo utilizza:
sudo nano /etc/nsswitch.ldap

che diventa :
#Begin /etc/nsswitch.conf
passwd: files ldap
group: files ldap
shadow: files ldap
publickey: files
netmasks: files
bootparams: files
automount: files
sendmailvars: files
hosts: files dns
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: db files

netmasks: files
bootparams: files
publickey: files
automount: files
aliases: files
sendmailvars: files

#End /etc/nsswitch.conf

/etc/rc.sysinit

Per ovviare al menzionato sopra che fà bloccare il nostro server al boot durante l'avvio di udev, applichiamo un (non molto bello) workaround che per lo meno mi permette di non buttare tutto alle ortiche.
Prima editiamo il nostro file menu.lst di grub per montare il file system in scrittura al boot :

sudo nano /boot/grub/menu.lst

e cambiamo la riga kernel sostituendo "ro" (read only) con "rw" (read write).
#(0) Arch Linux
title Arch Linux
root (hd0,0)
kernel /vmlinuz26 root=/dev/sda3 rw
initrd /kernel26.img

Ora editiamo il file di inizializzazione:
sudo nano /etc/rc.sysinit

andiamo nella sezione di udev dove vedete scritto:
status "Starting UDev Daemon" /etc/start_udev init

e facciamola diventare così:
status "Stopping LDAP authentication" /bin/cp /etc/nsswitch.file /etc/nsswitch.conf
status "Starting UDev Daemon" /etc/start_udev init
status "Starting LDAP authentication" /bin/cp /etc/nsswitch.ldap /etc/nsswitch.conf

come possiamo vedere disabiliamo le modifiche a /etc/nsswitch.conf prima che parta udev e subito dopo le ripristiniamo.
Se qualcuno ha notizia su come si possa far meglio me lo comunichi subito !

PAM

PAM (Pluggable Authentication Modules) è un meccanismo per integrare più schemi di autenticazione a basso livello in un'unica API ad alto livello, permettendo a programmi che necessitino di una forma di autenticazione, di essere scritti indipendentemente dallo schema di autenticazione sottostante utilizzato.
Ora modifichiamo i nostri file di configurazione di PAM per fargli utilizzare anche LDAP. I seguenti file non sono "la verità assoluta" ma nel mio caso funzionano e sono una buona base di partenza. Per maggiorni informazioni rivolgetevi alla documentazione ufficiale. I nomi dei file dovrebbero già far capire a che servizio ci si riferisce. Fate sempre una copia dei vostri file originali prima di applicare le modifiche.

/etc/pam.d/login

auth requisite pam_securetty.so
auth requisite pam_nologin.so
auth sufficient pam_ldap.so
auth required pam_unix.so use_first_pass
auth required pam_tally.so onerr=succeed file=/var/log/faillog
account required pam_access.so
account required pam_time.so
account required pam_unix.so
account sufficient pam_ldap.so
password sufficient pam_ldap.so
session required pam_unix.so
session required pam_env.so
session required pam_motd.so
session required pam_limits.so
session optional pam_mail.so dir=/var/spool/mail standard
session sufficient pam_ldap.so
session optional pam_lastlog.so

/etc/pam.d/shadow

auth sufficient pam_rootok.so
auth required pam_unix.so
auth sufficient pam_ldap.so use_first_pass
account required pam_unix.so
account sufficient pam_ldap.so
session required pam_unix.so
session sufficient pam_ldap.so
password sufficient pam_ldap.so
password required pam_permit.so

/etc/pam.d/passwd

password sufficient pam_ldap.so
password required pam_unix.so shadow nullok

/etc/pam.d/sshd

auth required pam_nologin.so
auth sufficient pam_ldap.so
auth required pam_env.so
auth required pam_unix.so use_first_pass
account sufficient pam_ldap.so
account required pam_unix.so
account required pam_time.so
password required pam_ldap.so
password required pam_unix.so
session required pam_mkhomedir.so skel=/etc/skel/ umask=0022
session required pam_unix_session.so
session sufficient pam_ldap.so
session required pam_limits.so

I file /etc/pam.d/su e /etc/pam.d/sudo preferisco lasciarli come stanno.

/etc/hosts.allow

Per ultima cosa ricordiamoci di abilitare il permesso a contattare il server attraverso il protocollo LDAP, altrimenti (come per sshd) non funzionerà niente.

sudo nano /etc/hosts.allow

e aggiungiamo la riga
slapd : ALL : allow

Database di OpenLDAP

Diamo una configurazione di base al database di OpenLDAP copiando il suo file di esempio che a noi và più che bene:

sudo cp /var/lib/openldap/openldap-data/DB_CONFIG.example /var/lib/openldap/openldap-data/DB_CONFIG

Bene! la parte server è conclusa (o perlomeno io mi fermo qui per il momento). Nella prossima puntata vedremo la parte client e avviaremo il servizio. Inutile dirvi che commenti e precisazioni sono le benvenute, e che spiegazioni dettagliate consultiate l'abbondante documentazione online.

A presto.

Ottimo, volevo giusto mettere su un server ldap+samba per fare qualche prova, aspetto impaziente il resto della guida :D

Il workaround non serve più con le ultime versioni di kernel. Sembra invece ci sia un rallentamento generale credo legato alla configurazione di nss_ldap.conf e un bel [FAIL] sul servizio SLAPD una volta integrati gli schemi post installazione di Samba. (nis.schema)

questa guida è un po' vecchiotta, andrebbe aggiornata ;)

E' un po' che non installo da zero, per il fatto del workaround me ne ero accorto dopo un aggiornamento tempo fà, per il resto che dici controllerò.

Tuttavia è alquanto improbabile che il problema sia in nss_ldap.conf, molto più probabile che il rallentamento sia dovuto al fatto che "fatica" a trovare il server LDAP (risolve l'URI del tuo server ? /etc/hosts a posto ?). Se poi il rallentamento è nel login meglio rivolgere l'attenzione a PAM e ai suoi file di configurazione.

Per quanto riguarda l'errore sui file degli schemi non saprei dirti mi sembra alquanto strano, ma non ho provato ultimamente.

Good luck ! ;)

Ciao a tutti, una domanda imporatantissima, se tento di modificare un file di configurazione una volta installato il sistema, oppure tenpo di eliminare un file..mi nega l'accesso poiche' il fyle system e' in read-only...ho faatto come dite voi, mettendo rw al posto di ro...pero' niente...ho renistallato tutto mettendo rw al posto di ro, e niente..mi potete dare una mano...??

grazie