Small Business Server (Italiano)/LDAP Server
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.
Contents
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 wikipedia. 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 OpenLDAP) 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 sito di riferimento 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
sudoedit /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' hash MD5 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 DNS 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 fastidioso baco di udev (o di nsswitch, non saprei) creiamo due file che poi scambieramo al boot (vedi più avanti). Prima il file che non utilizza ldap :
sudoedit /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:
sudoedit /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 fastidioso bug 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 :
sudoedit /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:
sudoedit /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.
sudoedit /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). Inutile dirvi che commenti e precisazioni sono le benvenute, e che spiegazioni dettagliate consultiate l'abbondante documentazione online.
LDAP Client
Terminamo la configurazione di LDAP mettendo a punto la parte client per istruire il server a utilizzare LDAP nella risoluzione delle password degli utenti. :) La parte client si fà editando quattro file di configurazione:
/etc/openldap/ldap.conf
Questo file definisce quale server contattare (URI) e quale struttura dell'albero (BASE)
sudoedit /etc/openldap/ldap.conf
impostiamo i seguenti parametri :
BASE dc=mede, dc=it URI ldap://localhost
nel parametro URI potreste usare anche (se avete correttamente impostato il vostro file /etc/hosts) anche il nome completo :
URI ldap://archi.mede.it
la sostanza non cambia.
/etc/pam_ldap.conf e /etc/nss_ldap.conf
Questi file sono identici e sinceramente il motivo mi sfugge :) indagherò sul motivo, ma comunque accetto dritte. Limitiamoci a renderli identici.
host archi.mede.it base dc=mede,dc=it uri ldap://archi.mede.it/ ldap_version 3 rootbinddn cn=Manager,dc=mede,dc=it scope sub timelimit 5 bind_timelimit 5 nss_reconnect_tries 2 pam_login_attribute uid pam_member_attribute gid pam_password md5 pam_password exop nss_base_passwd dc=mede,dc=it?sub nss_base_shadow dc=mede,dc=it?sub
/etc/ldap.secret
Creiamo questo file e scriviamoci la password (in chiaro) per collegarci al server LDAP nel nostro caso "archimede".
sudoedit /etc/ldap.secret
archimede
e proteggiamolo da occhi indiscreti.
sudo chmod 600 /etc/ldap.secret
Avvio del servizio
Bene, dovremmo aver finito (per ora) la parte ldap del nostro server e dovremmo poter avviare il servizio senza errori
sudo /erc/rc.d/slapd start
per vedere se funziona provate a lanciare il comando :
ldapsearch -x
se non ottenete errori ma una lista (vuota) LDIF siete a cavallo e potete inserirlo nella vostra riga DAEMON in /etc/rc.conf in modo che il servizio parta ad ogni avvio:
DAEMONS=(... ... ... ... ... slapd ... ... ...)
Per ora così come è stato fatto openLDAP non server a niente :D, in quanto non ci sono utenti nel suo database, ma appena configureremo il file server con Samba ci ritorneremo su.