IL PACCHETTO ISI-LDAP
Un server ldap fornisce un fondamentale servizio di autenticazione centralizzata andando a sostituire la tipica molteplicità di database e meccanismi di autenticazione normalmente presenti su un sistema linux. Il server ldap è responsabile, ad esempio, dell'autenticazione degli utenti linux, di quelli windows via Samba, autorizza l'accesso internet via Squid e conserva tutti i dati significativi degli utenti in modo ben piu' ricco e completo di quanto non possono fare i tradizionali servizi linux basati su passwd e smbpasswd.
La configurazione di
Openldap e il suo interfacciamento con servizi quali
Samba e
Squid è generalmente piuttosto complicata, siamo perciò orgogliosi di presentare il pacchetto
ISI-LDAP che, per le sue caratteristiche autoconfiguranti e per le utilities che lo accompagnano, rende veloce e semplice una operazione generalmente complessa e cruciale per tutta l'architettura di una intranet di qualunque tipo.
Il sistema di pre/post installazione del pacchetto Debian
ISI-LDAP, è stato predisposto per installare automaticamente e preconfigurare anche i pacchetti strettamente correlati Samba, atd, pam e migrationtools. Da un punto di vista funzionale quindi e partendo da una macchina nuda, in pochissimo tempo e confermando semplicemente le opzioni di default proposte, si ottiene:
- l'installazione e la configurazione del server ldap (slapd)
- l'installazione e la configurazione minima di samba che usera' il demone slapd come autenticatore
- la migrazione automatica di tutti gli account linux (tranne root) sull'albero ldap
P.S.= è utile prima di inserire gli utenti, inserire nella cartella /etc/skel/ tutto ciò che si desidera faccia parte della home di ciascun utente. Per far sì che sia semplificato il salvataggio dei profili degli utenti windows, noi abbiamo creato in /etc/skel/ due cartelle nascoste (.w98_profile e .wxp_profile). Durante in processo di creazione degli utenti, in ciascuna home verranno quindi create le due cartelle nascoste (il . iniziale significa che sono nascoste), dove verranno salvati rispettivamente i profili Windows 98 e Windows Xp. Vedi i dettagli nella pagina della
configurazione dei client.
Installazione
Per installare il pacchetto basta dare il comando
apt-get install isi-ldap e confermare.
Verranno sottoposte le opzioni avanti descritte, accettando i default proposti, si ottiene un sistema funzionante già pronto per il caricamento degli utenti.
Popolazione dell'albero ldap e generazione del file system
Il caricamento iniziale dell'albero ldap avviene per mezzo del comando
# ldap_addusers [[-G] [-L]|-GL] file_utenti
in cui
- l'opzione -G abilita la creazione di home directory posizionate come /home/gruppo_principale/utente, in assenza di questa opzione il path sarà semplicemente /home/utente
- l'opzione -L abilita la creazione di home directory posizionate come /home/iniziale_nome_utente/utente (opzione LETTERHOME di /etc/useradd.conf)
le due opzioni possono essere combinate.
- e' un file ascii-delimitato (campi separati da virgole e delimitati da "") contenente tutti gli utenti e avente il seguente formato:
"user_name" , "cognome e nome" , "lista gruppi (separati da SPAZIO, il primo gruppo è quello PRINCIPALE", "password"
esempio: "pippo","Rossi Mario","ALUNNI GEO1A","miapass"
Programmi di utilità
Per i dettagli si rimanda alle relative pagine man (o all'help del comando: comando -h).
ldap_updusers: automatizza completamente l'aggiornamento degli utenti da un anno all'altro
ldap_prepusers: produce un file di aggiornamento utente da un report di SISSI (*)
ldap_checkclassi: confronta il db ldap a fronte del file utenti controllando i gruppi classe
ldap_checkfield: controlla il valore di un campo ldap
ldap_putattr: assegna un valore al campo ldap di un utente
ldap_nousers: lista gli utenti del gruppo ldap che non sono presenti nel file utenti
ldap_saveall: salva il db ldap
ldap_restall: recupera il db ldap salvato
ldap_addusers: aggiunge utenti al db ldap leggendoli da un file oppure, omettendo il file, in modo interattivo direttamente da tastiera.
ldap_adduser: aggiunge un utente ad db ldap
ldap_passwd: cambia la password dell'utente
ldap_addgroup: aggiunge un gruppo al db ldap
ldap_deluser: cancella l'utente dal db ldap, opera anche sui gruppi o sugli utenti letti da un file
ldap_getattr: legge il dato ldap indicato relativo all'utente indicato
ldap_groupcat: restituisce la lista degli utenti di un gruppo
ldap_quota: assegna la quota disco a tutti gli utenti di un gruppo
ldap_alulink: scrive nella cartella di ciascuna classe una sottocartella 'alulink' in cui inserisce i link simbolici alle cartelle home degli alunni della classe stessa (per facilitare il ritrovamento di queste da parte dei docenti)
le utilities successive hanno senso in relazione al sistema di cartelle gestite da samba.
alu_setclasse: registra nel db ldap, nel campo utente
departmentNumber, la classe frequentata dall'alunno, per tutti gli alunni
home_setclasse: utilizzato da una direttiva di smb.conf durante il processo di logon; serve per generare la connessione dell'utente alla cartella della propria classe, che sarà raggiungibile attraverso
Risorse del computer,
unita' L
home_setperm: setta i permessi delle cartelle personali del gruppo indicato e del relativo contenuto. Aggiorna il contenuto delle home sulla base del modello in /etc/skel.
home_du: genera un report sullo spazio disco occupato dalle home degli utenti di un gruppo
html_setindex: personalizza la homepage di default dell'utente ospitata in public_html, qualora sia stata attivata tale funzionalità.
ldap_pwexpired: utilizzata internamente da samba/ldap_passwd, dichiara scaduta una password (purtroppo reagiscono alla sua azione solo i client xp)
ldap_pwmaxage: utilizzata internamente da samba/ldap_passwd, ripristina la durata della password dell'utente
In conclusione
Concludiamo con quanto è necessario digitare in una console di root su macchina su cui è stato appena installato ArgoLinux, per trasformarla in un PDC samba/ldap pronta a gestire la nostra rete d'istituto.
I prerequisiti sono:
- è stato preparato (in /root) il file degli utenti, chiamiamolo lista-utenti (noi, ad esempio, lo costruiamo con excel e lo esportiamo come file csv pronto all'uso - da agosto 2004 abbiamo reso disponibile una procedura migliore - vedi avanti )
- è stata creata la cartella /home/classi e le sottocartelle /home/classi/nome-classe con nome-classe uguale a al nome del gruppo classe utilizzato nel file lista-utenti
# apt-get update
# apt-get install isi-ldap (confermare tutte le opzioni, bisognerà solo scrivere per TRE volte la stessa password)
# ldap_addusers -G _lista-utenti_
# alu_setclasse
# ldap_quota /home alunni 10000 15000 0 0
# ldap_alulink
nel caso in cui le cartelle personali vengano riempite con un precedente contenuto migrato da altro filesystem (ad esempio in seguito a una migrazione windows-linux), si potranno settare i permessi sulle home e sul relativo contenuto utilizzando in comando:
# home_setperm <gruppo>
Questo comando si preoccupa anche di aggiornare le home con il contenuto di /etc/skel (se più recente).
a questo punto non resta che perfezionare la configurazione di samba, modificando opportunamente /etc/samba/smb.conf e configurare le stampanti (se si possiedono stampanti di rete, la cosa richiede l'utilizzo del pacchetto CUPS)
Se durante l'anno....
Se durante l'anno dovrete aggiungere uno studente, potete farlo in due modi:
- in modo interattivo eseguendo ldap_addusers senza parametri e rispondendo alle domande
- costruendo il file utenti col formato precedentemente descritto ed eseguendo ldap_addusers -G file_utenti
Subito dopo si potra' aggiornare la cartella
/home/classi/classe/alulink eseguendo
ldap_alulink classe
L'anno dopo....
Le operazioni che si dovranno fare sono:
- cancellazione degli utenti che non ci sono più (es. studenti che non frequenteranno più)
- aggiunta dei nuovi utenti (es. nuovi studenti)
- modifica dei dati, eventualmente delle password (fortemente consigliato) e dell'appartenenza ai gruppi per gli utenti che rimangono attivi
Gli script del pacchetto
isi-ldap rendono tutte le operazioni quasi automatiche. Ecco come procedere...
Preparazione del file utenti
Il file utenti è un normalissimo file di testo (con fine riga di tipo unix), composto da cinque (5) campi di cui i primi tre (3) obbligatori:
USERID , NOMINATIVO, GRUPPI, [COD.FISCALE], [PASSWORD (fortemente sconsigliato)]
il campo NOMINATIVO è generalmente composto da nome e cognome separati da spazio o, meglio, concatenati con _
il campo GRUPPI è composto dal
gruppo principale, dalla
classe e da qualunque altro gruppo separati da spazio.
Per preparare questo file si può procedere in tre modi:
- modificare il file utilizzato per il caricamento dei dati dell´anno precedente (si aggiungono a mano i nuovi studenti, e quelli da cancellare si marcano iniziano la riga con un segno - (meno). Si aggiunge il cod.fiscale come quarto campo o lo si omette inserendo ,,. Per quanto riguarda la password si veda sotto all'apposito titolo.
- usare il comando ldap_fileusers per produrre la lista degli utenti esistenti per poi modificarla come al punto precedente.
- produrre il file di tutti gli studenti estraendolo direttamente da Open Sissi ed elaborandolo con il comando ldap_prepusers, sottoponendo questo file al comando ldap_updusers tutte le operazioni di cancellazione, aggiunta, modifica e ridefinizione dei gruppi, memorizzazione della classe e del codice fiscale nel db ldap saranno svolte in automatico.
Estrazione dei dati con Open Sissi e uso di ldap_prepusers
Open Sissi è il programma di utilità compreso nel pacchetto
SISSI in rete messo a disposizione di tutte le scuole italiane dal MIUR per la gestione delle segreterie scolastiche (e non solo). Per quanto ci riguarda, siamo interessati alla capacità di
Open Sissi di produrre un file con i dati degli studenti estraendoli dal db Sql gestito da SISSI.
La funzionalità da utilizzare è, dal menù di Open Sissi,
Utilità, Report dinamici, che ci metterà in condizione di comporre un report con i campi desiderati (per noi, oltre a nome, cognome, data di nascita, anche codice fiscale, corso, anno di corso e sezione).
Open Sissi produce il report in formato Excel che viene richiamato automaticamente (non sembra ci sia la possibilità di avere un semplice salvataggio del report, quindi bisogna che sulla macchina su cui gira Open Sissi ci sia anche Excel - incredibile ma vero).
Ottenuto il foglio Excel con i nostri dati semplicemente lo si salverà in formato
CVS (OS2-MSDOS).
L´operazione successiva è trasferire questo file sul server linux che ospita il dbldap. Per fissare le idee supponiamo di avere così ottenuto /root/sissi.alunni. A questo punto siamo pronti per procedere alla preparazione del file utenti.
*
ATTENZIONE: bisogna controllare che nel sistema sia installato il pacchetto sysutils, che contiene il necessario per la conversione di un testo con fine riga DOS a un testo con fine riga UNIX. Si proceda così:
- # dpkg -l sysutils per sapere se il pacchetto è correttamente installato. Nel caso che non lo sia lo si installi ordinando
- # apt-get update seguito da
- # apt-get install sysutils - si otterranno così le utilità todos e fromdos, quest´ultima sarà richiamata automaticamente per la conversione del caso.
Se tutto è a posto si potrà ordinare
- *# ldap_prepusers /root/sissi.alunni *
il comando
ldap_prepusers effettua le seguenti operazioni (aammgg è la data del giorno):
- calcola gli userID degli alunni sulla base di una regola personalizzabile (default = a_11caratteri c.f.) il file di configurazione delle regole è /etc/isi/userid-come
- produce i seguenti file (che potranno essere comodamente visualizzati):
1) FILE UPDATE UTENTI : /root/users-upd_aammgg
2) FILE UTENTI DA CANC.: /root/nousers.txt
3) RECORD SCARTATI IN : /root/users-err_aammgg
4) FILE CODICI FISCALI : /root/users-fis_aammgg
4) FILE UID RIDEFINITI : /root/users-rid_aammgg
Aggiornamento del db ldap
Una volta che si disponga del file utenti, l'aggiornamento del db ldap è fatta dal comando
ldap_updusers, il cui uso è il seguente
============================================================================
uso : ldap_updusers [-d] [-n] [-p|-P] [-a] [-e|-E] file_dati_utenti
opzioni:
-h questo help
-d stampa i comandi eseguiti ma li esegue ugualmente
-n non esegue i comandi
-s esegue senza conferma
-p cambia la pwd attuale con quella nel campo 5 del file dati
-P n cambia la pwd attuale con pwd casuale di lunghezza
-a tratta gli utenti con uid inesistente come nuovi e li aggiunge
-e tratta gli uid che iniziano con un '-' come utenti da cancellare
verranno cancellate anche le rispettive homedirs
-E come -e solo che le homedirs sono salvate in formato tar.gz
NOTA1: le opzioni -p -P sono incompatibili
NOTA2: gli utenti non riconosciuti o prefissati con meno sono comunque
accumulati nei file /root/users_add.data e /root/users_del.data
NOTA3: classe e codice fiscale saranno memorizzati nei campi ldap
classe -> departmentNumber
codfisc -> employeeNumber
NOTA4: il formato del file utenti è
UID, COGNOME NOME, GRUPPO PRINC. CLASSE|ALTRO, [CODFISC], [PASSWD]
============================================================================
Tipicamente il file_dati_utenti è quello prodotto da ldap_prepusers e cioè
/root/users-upd_aammgg
ldap_updusers,
dopo aver salvato l´ attuale db ldap, confronta il contenuto del db ldap con il file degli utenti precedentemente preparato ed effettua tutte le modifiche necessarie agli utenti esistenti, elimina quelli marcati come cancellandi (via
ldap_deluser automaticamente richiamato), individua gli
utenti nuovi e li passa a
ldap_addusers che si incarica di aggiungerli. Alla fine vengono prodotti i seguenti file:
/root/ldapbak-aammgg - contiene il salvataggio del db ldap (recuperabile con
ldap_restall aammgga)
/root/users-add_aammgg - contiene la lista degli utenti da aggiungere (passata a
ldap_addusers)
/root/users-del_aammgg - contiene la lista degli utenti cancellati
/root/users-pwd_aammgg - contiene la lista di
tutti gli utenti attivi con le password assegnate
/root/users-log_aammgg - contiene il log con i messaggi generati durante l'aggiornamento
/root/nomi.txt - prodotto da
ldap_addusers, contiene l'elenco degli utenti aggiunti con le password assegnate
*
IMPORTANTE:*
ldap_updusers e
ldap_addusers ora sono in grado di salvare la classe e il codice fiscale (sempre che sia disponibile) rispettivamente nei campi ldap
departmentNumber e
employeeNumber. In questo modo viene notevolmente semplificata sia la gestione della classe dellálunno sia la sua identificazione.
Gestione degli userID (a partire da un report Open Sissi)
ldap_prepusers è in grado a partire dai dati SISSI di calcolare lo userID applicando una regola definita dall´utente. Prima di assegnare definitivamente lo UID calcolato all´utente, il codice fiscale dello stesso, viene cercato nel db ldap (sempre che sia stato precedentemente salvato nel campo ldap
employeeNumber), se il codice fiscale viene trovato, allora quell´utente è già noto al sistema e riceverà lo userID precedentemente assegnatogli.
La regola di default per il calcolo dell´uid è la seguente:
prefisso + i primi 11 caratteri del codice fiscale,
il prefisso per gli alunni è
a_. Il default è stato scelto perchè rende difficilissima l´omonimia.
Sono applicabili regole diverse, esse sono descritte da semplici istruzioni perl scritte nel file di configurazione
/etc/isi/userid-come . Lo riportiamo per intero:
# REGOLA PER LA COSTRUZIONE DELLO USERID
# si tratta in pratica di un frammento i codice
# perl che viene interpretato al volo e che puo'
# essere modificato dall'utente senza toccare lo script
# principale ldap_prepusers
# le righe precedute dal segno # sono commenti e possono
# essere inserite dovunque
# le variabili in MAISCOLO sono da considerare note e
# gia' valorizzate con i dati utente.
# Esse sono $COGNOME, $NOME, $CODFISC, $NATOIL
# la data di nascita e' restituita nel formato yymmgg
# la regola di default e'
#
# $UID="a_".substr($CODFISC,0,11)
#
# ed e' quella assunta quando questo file non contiene
# istruzioni eseguibili ( o non esiste, o e vuoto, o tutte
# le righe sono commentate.
# esempio 1 = primi 4 caratteri del cognome
# $UID=substr($COGNOME,0,4);
# esempio 2 = primi 3 caratteri del cognome + primi 3 del nome
# $UID=substr($COGNOME,0,3).substr($NOME,0,3);
# esempio 3 = primi 3 car.cognome + primi 3 del nome + data di nascita
# $UID = substr($COGNOME,0,3).substr($NOME,0,3).$NATOIL;
per attivare una delle regole alternative di esempio basta decommentare la riga corrispondente.
Naturalmente è possibile definire la regola desiderata.
Si tenga presente, nel comporre la regola, che occorre rendere minima la probabilità di omonimia. Nel caso si verifichi tale eventualità , saranno calcolati comunque UID distinti da una numerazione progressiva.
Gestione delle password
Una corretta gestione delle password è cruciale per láffidabilità e la sicurezza del sistema.
A differenza delle prime versioni del pacchetto isi-ldap, adesso sconsigliamo vivamente di iniziare assegnando password temporanee uguali per tutti. La procedura da preferire dovrebbe essere quella che assegna inizialmente all´utente una password casuale (default 8 caratteri) costringendolo a ridefinirla al primo login. Quest´ultima questione purtroppo non viene correttamente gestita da Samba, ma le password casuali sono comunque tali da spingere l´utente a ridefinire la password capitatagli.
Gli script
ldap_updusers e
ldap_addusers possiedono le seguenti opzioni per la gestione delle password:
- -p se si desidera assegnare la password contenuta nel campo 5 del file_utenti
- -P n per generare una password casuale lunga n caratteri
nessuna opzione le password non verranno toccate.
Le password generate dai due script sono salvate rispettivamente nel campo n.5 dei file
/etc/users-pwd_aammgg e
/root/nomi.txt.
Controlli
Per controllare il buon fine delle operazioni sono disponibili i seguenti script:
- ldap_checkclassi file_utenti controlla l`assegnazione dei gruppi classi e la loro composizione.
- ldap_checkfield gruppo campo_ldap visualizza gli utenti del gruppo con il campo ldap richiesto vuoto.