<<O>>  Difference Topic UnaPagina (r1.1 - 17 Jul 2004 - SandroDentella)
Line: 1 to 1
Added:
>
>
META TOPICPARENT UnaPagina

Problematica

Quando abbiamo promosso il progetto ISI, le nostre scuole si trovavano, chi piu', chi meno, essenzialmente nella seguente situazione:
  • esistenza di uno o piu' cablaggi indipendenti per segreteria e aule d'informatica
  • situazione impiantistica completamente disomogenea tra i vari edifici della stessa istituzione scolastica (Istituti composti da piu' edifici o addirittura da sedi poste a distanza geografica)
  • tipologie di rete differenti (sia peer che client-server)
  • nessun cablaggio strutturalmente concepito per il lavoro organizzativo necessario all'attivita' didattica, o per il lavoro di staff o per compiti di supporto alle decisioni
  • qualche macchina a disposizione di preside, docenti e altro personale solitamente non facenti parte di alcuna rete
  • accesso internet limitato
  • indisponibilita` di strumentazione informatica nelle aule
  • gestione degli utenti e della sicurezza limitata se non del tutto assente

A fronte di questa situazione di fatto e stante le indicazioni e le riflessioni "organizzative" delineate nel Rapporto del Gruppo di Lavoro per le infrastrutture informatiche delle scuole lombarde, abbiamo pensato che valesse la pena lavorare, per quanto riguarda il piano infrastrutturale, al fine di:

  • estendere i cablaggi esistenti a tutti i locali significativi per la vita della scuola, sia, quindi, i laboratori o le aule appositamente dedicati, sia tutti i locali di solito a disposizione dei docenti per le attivita` di organizzazione della didattica, sia gli Uffici (segreteria, presidenza) o altri locali adibiti all'erogazione di servizi (biblioteca, bidellerie)
  • estendere il cablaggio a tutti gli edifici in cui si articolano le nostre scuole (posa di tratte in fibra ottica laddove possibile, o collegamenti di tipo VPN, per le sedi staccate o per i plessi troppo lontani)
  • omogeneizzare le tipologie di rete con eliminazione di tutti i segmenti peer e l'adozione di un unico modello client-server
  • estendere l'accesso internet a tutte le postazioni disponibili
  • adottare un solido modello di sicurezza sia per la protezione della rete da attacchi esterni (firewall) sia per il controllo del traffico interno e dell'accesso alle risorse disponibili (autenticazione di tutti gli utenti)
  • sperimentare l'informatica in aula mediante l'adozione di estensioni wireless e di laboratori mobili
  • migliorare efficenza e sicurezza attraverso l'adozione di dispositivi (switch managed) che consentono la creazione e la gestione di reti virtuali (VLAN) dedicate (alla didattica, all'organizzazione, agli Uffici), per cui la rete interna viene ad essere non una semplice LAN ma una vera e propria intranet (reti distinte interconnesse)
  • adottare in generale tutti i protocolli e le soluzioni architetturali proprie di internet
  • sviluppare quanto necessario all'amministrazione remota di tutti gli apparati attivi (in effetti in questo momento, le scuole di ReteIsi collaborano all'amministrazione degli apparati funzionanti in ogni sede, fornendosi mutua assistenza).
  • realizzare il programma sopra delineato utilizzando esclusivamente tecnologie open source col doppio scopo sia di eliminare i problemi connessi con licenze d'uso proprietarie (costi e reati penali), sia di semplificare i meccanismi amministrativi connessi con la scelta, il reperimento, il testing e l'adozione di questa o quella soluzione software.
  • elaborare infine le soluzioni adottate in una forma tale da permetterne la replicazione presso altre Scuole interessate ad attivare servizi analoghi a quelli disponibile sulle nostre infrastrutture.

Architettura

Di seguito viene descritto il modello fondamentale adottato in ognuna delle scuole che partecipano a ReteIsi, variazioni allo schema base, necessarie, per risolvere situazioni locali, sono descritte nelle pagine relative a ciascuna Scuola. Fare click sugli elementi sensibili della mappa per le spiegazioni relative.
Lo schema mostra gli elementi essenziali del modello di intranet scolastica che il progetto ISI propone. I punti che ci preme segnalare sono essenzialmente i seguenti:

  • e' prevista la completa integrazione di tutti i segmenti lan presenti nella sede principale (o la posa dei relativi cablaggi)
  • e' prevista la replicazione della struttura (eventualmente in modo piu' semplice) presso le sedi staccate o i plessi periferici, la connessione degli stessi alla intranet d'Istituto e' assicurata tramite connessioni VPN
  • e' prevista l'articolazione della rete in una molteplicita` di sottoreti virtuali (VLAN) al fine di assicurare, oltre alla protezione da traffico indesiderato, un migliore utilizzo della banda disponibile
  • e' evitato in ogni caso l'accesso diretto a Internet che avviene attraverso la mediazione di un firewall su cui sono attivati i servizi necessari alla protezione da attacchi esterni ma anche tutto cio' che e' necessario per monitoreare e filtrare il traffico da e verso Internet consentendo il pieno controllo degli accessi
  • e' prevista la piena interoperabilita' Linux-Windows nel modo seguente:
    • a Linux sono affidate le sottoreti di staff e dei laboratori, l'autenticazione degli utenti (sia linux che windows) tutte le funzionalita' di file server, i servizi di firewalling e di gestione delle VLAN, il networking, il routing e tutti i servizi Internet (web server, mail server), nonche' la gestione di tutti i router adsl anche con funzionalita' di bilanciamento del carico
    • a Windows 2000 server e' affidata la completa gestione della Segreteria, cio' e' reso necessario dall'adozione di SISSI in rete quale gestionale principale (purtroppo! perche' avremmo preferito e auspichiamo un SISSI open source)
    • tutti i client hanno al momento Windows (9x/2k/XP) come sistema operativo standard; necessita' didattiche, funzionali e/o di semplice curiosita' e autoformazione spingono verso l'implementazione di sistemi dual-boot linux/win o comunque verso l'adozione anche di desktop Linux remoti

-- MassimoMancini - 20 Nov 2021

ArgoLinux è un progetto basato su Debian con caratteristiche che abbiamo trovato adatte alle nostre esigenze, in particolare:

  • installazione e replica semplificata
  • funzionamento da cdrom con salvataggio della configurazione su floppy: in questo modo è facile implementare un servizio di firewall sicuro e di immediato ripristino
  • semplicità della gestione dei runlevel e della configurazione di startup dei servizi (Argo adotta il sistema di boot del progetto Gibralthar)
  • facilità di configurazione del firewall
  • facilità di creazione di moduli Webmin ad hoc (Argo adotta una versione di Webmin che supporta la scrittura di moduli in PHP)

Queste caratteristiche non alterano la compatibilità con la distribuzione ufficiale che è, al momento, la Debian Woody (kernel 2.4.24), di cui possono perciò essere adottati tutti i pacchetti esistenti. Sono garantite pertanto tutte quelle le caratteristiche che fanno di Debian una delle distribuzione più stabili, sicure e meglio supportate in circolazione.

Requisiti hardware

L'installazione di Argolinux non richiede un computer particolarmente potente di per sè, dipende da cosa intendete farci. Facciamo alcuni esempi:

Un firewall:

Per realizzare un potente firewall da interporre tra il router ADSL e la rete locale in modo da evitare attacchi indesiderati da internet, e nel contempo consentire l'accesso da remoto ai server e agli apparati di rete, è sufficiente una macchina con le seguenti caratteristiche:
  • CPU pentium 2 (in teoria dovrebbe essere possibile anche con macchine pentium ma il kernel è ottimizzato per pentium2 e superiori)
  • RAM 32 mb sono stati sufficienti a gestire un firewall con 3 schede di rete 10/100 mbps (una per la lan e le altre per due router collegati a differenti linee adsl)
  • HD 1 Gb dovrebbe essere più che sufficiente (I servizi offerti da una configurazione normale comprendono anche Dhcp e DNS server, VPN per il collegamento con i plessi non raggiungibili altrimenti)
Questa è ovviamente una configurazione minima. Sarebbe meglio avere un po' più di Ram a disposizione, per esempio 128 mb sono ottimali. Anche un disco fisso più capiente sarebbe opportuno. In una delle nostre scuole il disco di un firewall su cui girava anche Squid e Sarg (generatore di report di Squid) si è riempito proprio a causa dei log in pochi mesi. Un disco da 10 gb si rivela in questi casi più indicato.

Un file server:

Per realizzare un file server è opportuno utilizzare una macchina più potente, sia come processore, che soprattutto come Ram e capacità di memorizzazione.
Le macchine acquistate per il progetto ISI hanno le seguenti caratteristiche:
  • CPU Pentium 4 2,4 gHz
  • RAM 1 gB ddr
  • HD n.2 dischi da 80 gB in mirroring software
  • device di backup: masterizzatore DVD-ram
  • scheda di rete gigabit
Tutto questo è largamente sufficiente per gestire una rete di 100-200 client con vari servizi, oltre al file server, e in particolare:
  • PDC per autenticazione utenti tramite Ldap e Samba
  • Web, Ftp e mail server
  • proxy

Sorgenti apt per i pacchetti del progetto ISI

Il seguente e' il contenuto del file /etc/apt/sources.list

# DIST
deb-src http://ftp.de.debian.org/debian testing main contrib non-free
deb http://ftp.de.debian.org/debian woody main contrib non-free
deb http://ftp.de.debian.org/debian-non-US testing/non-US main contrib non-free
# SECURITY
deb http://security.debian.org/ woody/updates main contrib non-free
# BEE SIDE REPOSITORY
deb http://debian.bee-side.org:8080 woody main extra isi
# SARACENO REPOSITORY
deb http://lan.saraceno.org/isirep/debian woody main isi contrib

Altre fonti apt non ufficiali Debian

# XFREE4.3
deb ftp://linux.upsa.es/pub/XFREE4.3/ ./
# KDE
deb http://download.kde.org/stable/3.1.4/Debian stable main

AVVISO: quanto segue si riferisce alla versione di CLONE denominata ISICLONE scaricabile dai nostri repository con il comando apt-get install isi-clone

CLONE

Il trasferimento di ArgoLinux da cdrom (o dall'hd attivo) a hd è basato su uno script apposito (clone o isiclone, la versione a cui fa riferimento questo articolo) e su un file di configurazione che descrive il partizionamento del disco di destinazione e le operazioni desiderate (nel seguito chiameremo questo file DISCO_DESCR). Nel caso più semplice, la sequenza di operazioni è la seguente:
  1. avviare ArgoLinux da cdrom
  2. # cd /etc/clone
  3. # cp example/DISCO_DESCR . (dove DISCO_DESCR è uno dei file di esempio disponibili nella dir example e che andrà adattato alle proprie esigenze)
  4. # emacs DISCO_DESCR si effettueranno le modifiche volute
  5. # clone DISCO_DESCR il sistema verrà trasferito su hd
Pertanto, nel caso in cui, uno dei file DISCO_DESCR di esempio facesse al proprio caso, tutta l´operazione si riduce ad un unico comando. In realtà le cose non saranno così immediate, ma occorrera`, specie nel caso di installazione in presenza di altri sistemi operativi, ispezionare il disco rigido bersaglio, eventualmente liberare spazio, modificare il DISCO_DESCR più somigliante alle nostre necessità, tutte operazioni comunque che possono essere eseguite con semplicità.

SI FACCIA COMUNQUE MOLTA ATTENZIONE: TUTTE LE OPERAZIONI DI PARTIZIONAMENTO DI UN DISCO SONO DISTRUTTIVE

Tipologie di installazione

Le tipologie di installazione permesse da clone sono le seguenti
  1. SCRATCH: ArgoLinux è l´unico sistema operativo presente, il bootstrap è eseguito da GRUB installato sull´MBR. Nel caso di installazione RAID questa è l´unica tipologia prevista.

  1. COMBINATA: Argolinux coesiste con altri sistemi operativi (anche precedentemente installati). Si può decidere se affidare a GRUB sia il boot che il multiboot, GRUB può anche essere omesso del tutto.

  1. MULTIBOOT: Argolinux coesiste con altri sistemi operativi (anche precedentemente installati). GRUB è installato in una partizione apposita come bootmanager e nella partizione corrispondente al mount point /boot come bootloader di ArgoLinux. Le funzionalità di bootmanager di GRUB dovranno/potranno poi essere ulteriormente configurate dipendentemente dai sistemi operativi che devono essere avviati; clone tenta comunque di rilevare i sistemi operativi presenti e di preparare un menu di multiboot adatto che potrà poi essere facilmente modificato.

Il file di configurazione di CLONE e l'installazione base (non RAID)

Qesto file, a cui abbiamo fatto riferimento come DISCO_DESCR, ma che può avere nome qualunque, è un normale file di testo contenente i valori delle variabili che specificano il comportamento di clone. Nella dir /etc/clone/example troverete vari esempi. Di seguito è spiegato in dettaglio un tipico DISCO_DESCR.

Attenzione: il sistema distingue tra MAIUSCOLE e minuscole


ZAP_ALLPART=0
PARTITIONING=1
FORMATTING=1
GRUB_MODE="MULTIBOOT"
LIVE=1
Disk=/dev/ide/host0/bus0/target0/lun0
extra_disk=/disc
extra_part="/part"
DESCR="
mnt_p     fmt   fs              dim     part_n  overwrite opt
/mboot    1     ext2            8       3       1
/boot     1     ext2            50      5       1
swap      1     swap            256     6       1
/         1     reiserfs        2000    7       1
/usr      1     reiserfs        2000    8       1
/var      1     reiserfs        1000    9       1
/home     1     reiserfs        fill    10      1
"

Il file qui sopra pilota una installazione multiboot (ecco perchè è stato incluso il punto di mount /mboot, che per una installazione normale NON deve esserci) su un disco che ospita già due sistemi operativi nelle prime due partizioni (o comunque risulta possedere due partizioni che devono essere preservate). Ma vediamo il senso delle righe per noi significative.

ZAP_ALLPART assume i valori 0 (no) oppure 1 (si), se posta a 0 le partizioni esistenti sono preservate, ArgoLinux verrà trasferito solo se sul disco è disponibile abbastanza spazio non partizionato consecutivo, se posta a 1, tutte le partizioni esistenti saranno distrutte (prestare quindi molta attenzione).

PARTITIONING assume i valori 0 (no) oppure 1 (si), se posta a 0 nessuna partizione descritta verrà creata, il che significa che esse devono essere già presenti sul disco; se posta a 1, saranno create le partizioni richieste.

FORMATTING assume i valori 0 (no) oppure 1 (si), ha senso solo in caso di PARTIZIONING=0, e serve ad ordinare a clone di formattare (1) o non formattare (0) le partizioni indicate utilizzando il file system desiderato.

GRUB_MODE assume i valori MBR (default), MULTIBOOT, DISK, NOGRUB.
MBR produce l´installazione di grub sull´MBR con funzionalità di bootmanager/bootloader.
MULTIBOOT produce una installazione multiboot autonoma di grub.
DISK installa grub solo con funzionalità di bootloader per il sistema linux che si va ad installare, non scrive nulla nell´MBR e quindi bisognerà disporre di un altro bootmanager per avviare il sistema (o i sistemi).
NOGRUB impedisce del tutto l´installazione di grub, in questo caso ci auguriamo sappiate come installare i necessari bootmanager e bootloader.

LIVE, normalmente posta a 1, dice che ArgoLinux verrà trasferito da cdrom o dal disco rigido attivo (duplicazione del sistema attivo su un secondo hard disk)

EXTRA_DIRS, normalmente non definita, ma utile nel caso di duplicazione dell'hd attivo nel caso in cui questo contenga sotto / anche dirs create dall'utente (quindi fuori standard) che si vuole duplicare (es. EXTRA_DIRS="/qui /quo /qua")

Disk, il nome del disco (secondo il formato /dev) così come rilevato da ArgoLinux, è chiaro che questa informazione deve essere corretta pena il fallimento dell´installazione. Il nome /dev dei dischi presenti nella macchina può essere determinato con il seguente comando: # ls -l /dev/hd* | grep disc

che, ad esempio, potrebbe dare il risultato seguente

lr-xr-xr-x  1  root  root  32 mar 17 04:36 /dev/hda -> ide/host0/bus0/target0/lun0/disc
lr-xr-xr-x  1  root  root  32 mar 17 04:36 /dev/hdc -> ide/host0/bus1/target0/lun0/disc
lr-xr-xr-x  1  root  root  32 mar 17 04:36 /dev/hdd -> ide/host0/bus1/target1/lun0/disc
da cui si vede che sono presenti 3 dischi rigidi /dev/hda, /dev/hdc, /dev/hdd il cui nome lungo è /dev/ide/host0.....

extra_disk / extra_part sono variabili ad uso interno, da lasciare quindi così come sono.

DESCR descrive la struttura effettiva dei filesystem che si vogliono creare sul disco. Si tratta di una tabella di 7 colonne il cui significato è evidentemente il seguente:

mnt_p nome del mount point: sono indispensabili perlomeno /boot, /, swap ; nel caso di una installazione multiboot è richiesto anche /mboot.

fmt se =1 la partizione verrà formattata con il file system del tipo dichiarato

fs fyle system con cui formattare la partizione

dim dimensione, in MByte, dello spazio assegnato alla partizione; per l´ultima partizione potrà essere indicato fill che allocherà tutto lo spazio rimanente.

part_n il numero della partizione. Le partizioni primarie sono numerate da 1 a 4, le successive saranno partizioni logiche contenute in una partizione estesa creata automaticamente (si ricordi che una partizione estesa altro non è che una partizione primaria e quindi contribuisce al numero massimo (4) di partizioni primarie ammesse per disco. Prestare molta attenzione: la numerazione delle partizioni deve essere giusta, specie in presenza di partizioni da preservare. Per conoscere il partizionamento esistente di un disco si può usare il seguente comando:

# parted -s /dev/hd print dove /dev/hd potrebbe essere /dev/hda o, come nell'esempio, /dev/hdd.

Si ottiene qualcosa di simile a questo:

Disk geometry for /dev/ide/host0/bus1/target1/lun0/disc: 0.000-19541.320 megabytes
Disk label type: msdos
Minor    Start       End     Type      Filesystem  Flags
1          0.031  13201.853  extended
5          0.062     31.376  logical   ext2
6         31.408    415.744  logical   reiserfs
7        415.775    800.112  logical   linux-swap
8        800.143   3663.259  logical   reiserfs
9       3663.290   6526.406  logical   reiserfs
10      6526.437  12244.855  logical   reiserfs
11     12244.887  13201.853  logical   reiserfs
2      14535.374  19539.997  primary   FAT         lba
da cui si vede che sul disco sono presenti 3 partizioni primarie: la 1 all´inizio del disco, la 2 in fondo, la 3 invisibile in quanto trattasi della partizione estesa che contiele 5,6,7,8,9,10,11 logiche). Nel caso mostrato, l´unico buco libero rimasto è quello tra la logica 11 e la primaria 2 (di dimensione 14535.374-13201.853=1333.521 Mb)

overwrite se =0 la partizione non viene toccata

opt le opzioni da attribuire al punto di mount, quelle, per intenderci, che ritroveremo in /etc/fstab.

Installazione di un sistema base RAID1 (mirroring)

Ecco un tipico esempio di DISCO_DESCR per un sistema raid1 (due dischi identici)
ZAP_ALLPART=1
RAID=1
PARTITIONING=1
FORMATTING=1
LIVE=1
GRUB_FLOPPY=1
Disk=/dev/ide/host2/bus0/target0/lun0
extra_disk=/disc
extra_part="/part"
RAID1=/dev/ide/host2/bus1/target0/lun0/disc
DESCR="
mnt_p     fmt   fs              dim     part_n  overwrite opt
/boot     1     ext2            24      1       0         raid
swap      1     swap            512     5       1         raid
/         1     reiserfs        4000    6       1         raid
/free     1     reiserfs        4000    7       1         raid
/home     1     reiserfs        fill    8       0         raid
"

il significato delle variabili è quello precedentemente descritto con la differenza seguente:

RAID posto a 1 dice a clone che deve prepararsi a preparare un sistema RAID

Disk è il disco principale nella solita notazione (notare l´assenza di /disc alla fine)

RAID1 è il disco su cui si effettua il mirroring (notare la presenza di /disc alla fine)

la configurazione raid verrà ottenuta automaticamente specificando in corrispondenza delle partizioni sottoposte a mirroring l´opzione *raid * nell´ultima colonna della variabile DESCR. Si possono avere contemporaneamente sia partizioni raid che partizioni non raid. Si consiglia di impostare il raid anche per la partizione di swap.

Grub

ArgoLinux utilizza GRUB sia come bootloader che come bootmanager. Chiariamo intanto il significato dei termini: il bootloader è il programma che avvia il sistema operativo, il bootmanager è il programma che consente all´utente di scegliere il sistema operativo da avviare. GRUB è in grado, in modo molto flessibile, di svolgere entrambe le funzioni. Su ogni disco esistono posizioni specifiche destinate ad accogliere tali programmi: si tratta del primo settore del disco, il cosiddetto Master Boot Record o MBR e il primo settore di ogni partizione, il Partition Boot Sector o PBS. Se GRUB viene installato sul MBR sarà in grado di avviare un s.o. linux direttamente o per tramite di un altro bootloader installato nella partizione associata al mount point /boot di quella partizione. Se GRUB è installato solo sul PBR dovrà essere a sua volta attivato da un boot manager sul MBR. Una descrizione dettagliata del processo di boot e dell´utilizzo di GRUB, può essere trovata qui. GRUB è anche in grado di avviare tutti i sistemi windows lanciando (chainloader) i rispettivi bootloader che Windows stesso installa sui PBS delle rispettive partizioni.

Installazione di un sistema multiboot

Prenderemo in considerazione due tipi di scenario:
  • avete a disposizione un disco non partizionato (o comunque cancellabile) e volete installare WinXP, Win98 e ArgoLinux
  • avete a disposizione una macchina sul cui unico disco è installato WinXP in unica partizione che occupa tutto lo spazio disponibile.

Il primo scenario è quello semplice, potete procedere così (si suppone un disco da 20Gb):

  • lanciate ArgoLinux da cdrom
  • con cfdisk create 2 partizioni di tipo FAT32 della dimensione voluta, diciamo 6GB.
  • Installate WinXP nella prima partizione scegliendo la formattazione con NTFS
  • Installate Win98 nella seconda partizione. Attenzione, il programma di installazione di Win98 non vi permetterà di scegliere la partizione; procedendo, confermando le scelte proposte, verrà distrutta l´installazione di XP . Seguite invece la procedura seguente:
    • eseguite il boot da CD scegliendo boot con supporto cdrom e poi date i seguenti comandi
    • D:
    • cd \WIN98
    • format c: /s (il MBR verra` sovrascritto, WinXP non sarà più avviabile (poco male, tornerà ad esserlo alla fine)
    • md c:\win98
    • copy . c:\win98
    • togliete il cdrom e riavviate il sistema, vi ritroverete al prompt di DOS C:\>
    • digitate win98\setup
  • rilanciate Argolinux da cdrom e, utilizzando il file DISCO_DESCR illustrato sopra, installate linux in modalità multiboot
  • perfezionate il menu di grub-bootmanager in /mboot/grub/menu.lst

Il secondo scenario, invece, è più complicato perchè vi costringe ad effettuare un resize del filesystem NTFS (sempre che abbiate spazio disponibile), seguito dalla cancellazione e ricreazione della partizione NTFS (ATTENZIONE: si tratta di due operazioni distinte). Per fare questa operazione vi servirà prima ntfresize, un programma open source che serve a questo scopo e che funziona con qualunque versione di Linux (la versione che avrete scaricato è infatti linkata in modo statico). poi fdisk (quello di linux). Comunque ecco le operazioni da fare:

  • scaricare ntfsresize e trasferirlo su un floppy
  • lanciare ArgoLinux da cdrom e spostarsi in una dir scrivibile (ad esempio # cd /etc/clone)
  • copiare dal floppy il tgz di ntfsresize e scompattarlo (naturalmente, se avete già configurato Argolinux per l´accesso internet e salvato la configurazione su floppy, potrete scaricare direttamente ntfsresize con wget http://www.reteisi.org/downloads/ntfsresize-static-1.9.0.tgz)

  • salvare MBR e tavola delle partizioni attuale
    • # sfdisk -d /dev/hda > ./$hda.pt per salvare la tavola delle partizioni
    • # dd if=/dev/hda of=hda.mbr bs=512 count=1 per salvare il MBR

  • effettuare il resize del file system NTFS
    • # ./ntfsresize -i /dev/hda1 (per sapere fino a che punto si può restringere la partizione NTFS posta in /dev/hda1)
    • # ./ntfsresize -n -s 6G /dev/hda1 (per eseguire un test (-n) di resizing (-s) a 6 GByte)
    • # ./ntfsresize -s 6G /dev/hda1 (per eseguire il resizing effettivo a 6 GByte)
  1. effettuare il resize della partizione (ATTENZIONE PERICOLO) utilizzando fdisk, di seguito il dialogo commentato

#fdisk /dev/hda lancio fdisk

Command (m for help): p visualizzo il partizionamento

Disk /dev/hda: 255 heads, 63 sectors, 2481 cylinders
Units = cylinders of 16065 * 512 bytes
   Device Boot    Start       End    Blocks   Id  System
/dev/hda1   *         1      2480  19920568+   7  HPFS/NTFS
Command (m for help): d cancello la partizione NTFS

Partition number (1-4): 1

Command (m for help): n creo una nuova partizione

Command action e extended p primary partition (1-4) p

Partition number (1-4): 1 creo la partizione primaria n.1

First cylinder (1-2481, default 1): 1 stabilisco il cilindro di partenza UGUALE al valore precedente

Last cylinder or +size or +sizeM or +sizeK (1-2481, default 2481): +6000M fisso la nuova dimensione

Command (m for help): t stabilisco il tipo della partizione = 7

Partition number (1-4): 1

Hex code (type L to list codes): 7

Changed system type of partition 1 to 7 (HPFS/NTFS)

Command (m for help): a rendo la partizione avviabile

Partition number (1-4): 1

Command (m for help): p controllo di aver fatto la cosa giusta

Disk /dev/hda: 255 heads, 63 sectors, 2481 cylinders
Units = cylinders of 16065 * 512 bytes
   Device Boot    Start       End    Blocks   Id  System
/dev/hda1   *         1       765   6144831    7  HPFS/NTFS
Command (m for help): w scrivo il nuovo partizionamento

The partition table has been altered!


  • riavviare WinXP, che, se tutto è andato a buon fine, controllerà il disco, registrerà la nuova situazione e dopo un ulteriore riavvio continuerà a funzionare (se questo non succede, qualcosa è andato storto).
  • riavviare Argo da cd, e usare GRUB per nascondere la partizione ntfs:
    • # grub
    • # hide (hd0,0) (la partizione /dev/hda1 per GRUB è (hd0,0) )
    • # quit
  • creare una partizione FAT32 per win98 della dimensione voluta usando, ad esempio, cfdisk
  • procedere come allo scenario precedente (da punto 4 in avanti).

Operazioni post-installazione

Eseguita l´installazione, sarà necessario rivedere i menù di GRUB e controllare che tutti i sistemi operativi presenti vengano correttamente avviati. Li trovate in
  • /boot/grub/menu.lst per tutte le modalità di installazione (GRUB_MODE)
  • /mboot/grub/menu.lst questo file è presente, in aggiunta all´altro solo se è stata richiesta una installazione MULTIBOOT

L´aspetto tipico di questi file è il seguente (nell´esempio /boot è in /dev/hda5 e / in /dev/hda7)

/boot/grub/menu.lst

timeout 0 il boot viene eseguito immediatamente
default 1

title Kernel 2.4.24-std on /dev/ide/host0/bus0/target0/lun0/part7
root (hd0,4)
kernel /bzImage-2.4.24-std root=/dev/ram0 boot=*/dev/ide/host0/bus0/target0/lun0/part7* rw init=/linuxrc
initrd /initrd-2.4.24-std.gz

NOTA: il dispositivo esteso /dev/ide/... può essere sostituito con quello breve, ad esempio

timeout 0
default 1

title Kernel 2.4.24-std on /dev/hda7
root (hd0,4)
kernel /bzImage-2.4.24-std root=/dev/ram0 boot=*/dev/hda7* rw init=/linuxrc
initrd /initrd-2.4.24-std.gz

Ecco invece l´aspetto del menù multiboot che si ottiene in

*/mboot/grub/menu.lst

timeout 10 10 sec di pausa per poter scegliere
default 1 a pausa scaduta viene avviato il primo della lista

title LINUX
rootnoverify (hd0,4)
chainloader +1 tutti i sist.op. sono lanciati da un altro GRUB

title Windows 9x-0
rootnoverify=(hd0,1)
chainloader +1

title WinNT-0
rootnoverify=(hd0,0)
chainloader +1

Questo menù deve essere modificato, nella parte relativa ai sistemi windows, nel modo seguente (ecco perchè in /etc/fstab viene incluso il mount point non standard /mboot)

........... ...........

title WINDOWS-98se il title può essere reso più significativo
hide (hd0,0)
unhide (hd0,1)
rootnoverify=(hd0,1)
chainloader +1
makeactive

title WINDOWS-XP
hide (hd0,1)
unhide (hd0,0)
rootnoverify=(hd0,0)
chainloader +1
makeactive

MKGRUB

Si tratta di una script per produrre un disco di boot. L'uso è banale:
  • inserire un dischetto
  • # mkgrub

il dischetto verrà formattato e vi sarà installato grub in modalità multiboot, in modo che tutti i sistemi operativi presenti su tutti gli hd possano essere avviati. Vengono create anche voci di menù per l´installazione rapida di grub sugli MBR dei dischi rigidi presenti.

In un sistema Debian, la configurazione di base del networking consiste nella corretta predisposizione di almeno seguenti file

/etc/modules
in cui sono dichiarati i moduli del kernel necessari per il funzionamento delle schede di rete
/etc/network/interfaces
dove si dichiarano i nomi delle interfacce di rete, gli indirizzi IP, le vlan (IsiVlan) e il gateway
/etc/mactab
in cui si ridefiniscono i nomi delle interfacce (facoltativo - vedi IsiMactab)

ESEMPI

/etc/modules di una macchina con 3 schede di rete

8021q              # modulo per la gestione delle vlan
3c59x              # driver per una scheda 3com
eepro100           # driver per una scheda intel pro100
8139too            # driver per una scheda RTL3139
ip_nat_ftp         # moduli del kernel per il tracciamento delle 
ip_conntrack_ftp   # connessioni FTP
tun                # modulo per la gestione di tunnel criptati IPSEC/SSH (VPN)

per la gestione di connessioni VPN vedi IsiVpn.

/etc/network/interfaces di una macchina con due schede di rete tipicamente adibita a firewall per tutte le sottereti della intranet

# The loopback interface
# nameif does nothing if you don't have /etc/mactab
auto lo
iface lo inet loopback
      up nameif
# The first network card - this entry was created during the Debian installation
# (network, broadcast and gateway are optional)
auto ext0
iface ext0 inet static
        address 192.168.200.2        # IP della scheda di rete che interfaccia il router ADSL
        netmask 255.255.255.0
        network 192.168.200.0         
        broadcast 192.168.200.255
        gateway 192.168.200.1        # IP interno del router ADSL
auto int0
iface int0 inet static               
        address 192.168.1.1          # IP (vero o fittizio se ci sono VLAN dell'interfaccia
        netmask 255.255.255.0        # verso la rete interna
        network 192.168.1.0
        broadcast 192.168.1.255
        #----------------------------VLANs-----------------------
        up ifconfig int0 0.0.0.0     
        up vconfig set_name_type VLAN_PLUS_VID_NO_PAD
        up vconfig add int0 1
        up vconfig add int0 2
        up vconfig add int0 3
        up vconfig add int0 4
        up vconfig add int0 5
        up ifconfig vlan1 192.168.1.1
        up ifconfig vlan2 192.168.2.1
        up ifconfig vlan3 192.168.3.1
        up ifconfig vlan4 192.168.4.1
        up ifconfig vlan5 192.168.5.1
        down vconfig rem vlan1
        down vconfig rem vlan2
        down vconfig rem vlan3
        down vconfig rem vlan4
        down vconfig rem vlan5
#
# If you want to fire up a ppp0 int0erface (eg.: adsl)
# dsl-provider is the name you gave with pppoeconf
#
# auto ppp0
# iface ppp0 inet ppp
#      provider dsl-provider

Nell'esempio riportato sopra le interfacce sono state ridefinite da eth0, eth1 a ext0, ext1 utilizzando il file di configurazione:

/etc/mactab

int0 00:30:4F:1E:A0:3C
ext0 00:60:08:69:6A:F6
che associa il nome simbolico scelto direttamente al MAC address della scheda rendendo indipendente il nome dallo slot PCI nel quale la scheda stessa è alloggiata (quale scheda sia eth0 e quale eth1 dipendono appunto dal modo in cui quella particolare macchina numera gli slot PCI).

L'aver adottato apparati attivi managed che offrono il supporto 802.1q permette di realizzare con estrema facilità un sistema di sottoreti molto articolato. Queste reti (VLAN) sono, a tutti gli effetti pratici vere e proprie sottoreti completamente isolate le une dalle altre che coesistono sopra un unico cablaggio fisico. Le VLAN sono completamente gestite dagli switch che consentono l'assegnazione delle porte in modo da determinare una segmentazione del cablaggio fisico sottostante. Per quanto riguarda l'architettura della intranet di sede prevediamo perlomeno la seguente articolazione

  • VLAN1 - rete di staff e di amministrazione degli apparati
  • VLAN2 - rete della segreteria
  • VLAN3 - rete dei laboratori

La presenza delle VLAN costituirebbe un ulteriore centro di costo se non avessimo adottato la soluzione linux al problema. Infatti, affinché VLAN diverse possano comunicare fra loro o con un unico server, è necessario interporre un router o disporre di schede di rete che offrano il supporto 802.1q. Fortunatamente Linux mette a disposizione un opportuno modulo del kernel capace di trasformare una linuxbox in un potente apparato con supporto 802.1q. Il tutto a costo zero e con una facilità di installazione veramente disarmante.

Per configurare ArgoLinux per il supporto vlan occorre

  • installare il pacchetto vlan
  • aggiungere il supporto 802.1q al kernel modificando /etc/modules
  • definire le vlan nel file /etc/network/interfaces

In pratica, dopo aver eseguito un accesso come root ed eseguito un preliminare

# apt-get update

per installare il pacchetto vlan

# apt-get install vlan

per aggiungere il supporto 802.1q

editare il file /etc/modules aggiungendo la riga

8021q

ed eseguendo successivamente

# modprobe 8021q

per definire le vlan

editare il file /etc/network/interfaces nel modo seguente (si suppone che la scheda di rete che si interfaccia con le vlan si chiami int0 e risponda all'ip 192.168.1.1 e che si vogliano creare 5 vlan)

auto int0
iface int0 inet static
        address 192.168.1.1
        netmask 
        network 192.168.1.0
        broadcast 192.168.1.255
        #
        up ifconfig int0 0.0.0.0
        up vconfig set_name_type VLAN_PLUS_VID_NO_PAD
        up vconfig add int0 1
        up vconfig add int0 2
        up vconfig add int0 3
        up vconfig add int0 4
        up vconfig add int0 5
        up ifconfig vlan1 192.168.11.1
        up ifconfig vlan2 192.168.12.1
        up ifconfig vlan3 192.168.13.1
        up ifconfig vlan4 192.168.14.1
        up ifconfig vlan5 192.168.15.1
        down vconfig rem vlan1
        down vconfig rem vlan2
        down vconfig rem vlan3
        down vconfig rem vlan4
        down vconfig rem vlan5

come si vede l'ip assegnato alle vlan non ha niente a che fare con quello della scheda. A boot eseguito, ci si ritrovera' magicamente con 5 schede di rete regolarmente funzionanti.

Si tralascia, in questo documenti, come configurare le VPN Qui troverete i file di configurazione del servizio DNS per una intranet scolastica concepita secondo il modello ISI. Il DNS assicurerà la risoluzione dei nomi delle macchine sulla intranet, comprese quelle ad indirizzo dinamico (aggiornamento del DNS via DHCP). Si tenga presente che nelle nostre scuole la segreteria opera in ambiente win2000 server configurato con Active Directory e quindi realizzante un dominio separato. Al momento l´integrazione segreteria resto della intranet è al livello della condivisione dell´accesso internet (magari con l´attivazione della doppia adsl) attraverso un unico firewall e alla connessione permessa solo da client particolari esterne alla sottorete specifica.

Per quanto riguarda i dettagli circa la configurazione di Bind9 si rimanda alla documentazione tecnica disponibile in rete, qui ci si limiterà ad illustrare l'organizzazione e il contenuto dei file di configurazione.

L'architettura della intranet sia la seguente:

  • vlan1 sottorete di staff e di amministrazione
  • vlan2 sottorete di laboratorio (ce ne può essere una per laboratorio)
  • vlan5 sottorete della segreteria (si ipotizza che la segreteria sfrutti, per fondamentali ragioni di sicurezza) il firewall principale per l´accesso internet, si tenga presente inoltre che nel modello isi, la segreteria è integrata nella intranet dell'istituto.

Il server DNS può essere ospitato dovunque, ma nel modello isi tale servizio, insieme al DHCP, è in funzione sulla macchina firewall che, grazie al sistema delle vlan, è attestata su tutte le vlan.

il dominio dns si chiamerà miascuola.lan. Il che significa, ad esempio, che l'url del server web interno sarà www.miascuola.lan

In Debian tutti i file di configurazione necessari si trovano sotto /etc/bind e quelli per noi significativi sono:

/etc/bind/named.conf in cui vengono elencate i forwarders le zone dirette del dominio e quelle inverse /etc/bind/miascuola.lan in cui sono elencate nomi e ip di tutte le macchine sulla rete /etc/bind/rev1 e simili che costituiscono le zone inverse, cioè il meccanismo con cui dall'ip si risale al nome

Ma vediamoli in dettaglio:

/etc/bind/named.conf

Si noti la direttiva forwarders e la direttiva key DHCP_UPDATER. Si ricordi che il valore di quest´ultima deve essere identico a quella dichiarata nel file di configurazione del server dhcp (/etc/dhcp3/dhcpd.conf) altrimenti l'aggiornamento dinamico dei record dns non funzionerà.

//----------------------------------------------------------------------------
// This is the primary configuration file for the BIND DNS server named.
//
// Please read /usr/share/doc/bind9/README.Debian for information on the
// structure of BIND configuration files in Debian, *BEFORE* you customize
// this configuration file.
//----------------------------------------------------------------------------
options {
   directory "/var/cache/bind";
   // If there is a firewall between you and nameservers you want
   // to talk to, you might need to uncomment the query-source
   // directive below.  Previous versions of BIND always asked
   // questions using port 53, but BIND 8.1 and later use an unprivileged
   // port by default.
   // query-source address * port 53;
   // If your ISP provided one or more IP addresses for stable
   // nameservers, you probably want to use them as forwarders.
   // Uncomment the following block, and insert the addresses replacing
   // the all-0's placeholder.
        // i forwarders sono gli ip dei DNS esterni (quelli del vostro provider)
        // qui saranno automaticamente redirette tutte le richieste DNS non soddisfatte
        // all´interno del nostro dominio
   forwarders {
       151.99.125.2;
       194.243.154.62;
   };
   auth-nxdomain no;    # conform to RFC1035
};
// prime the server with knowledge of the root servers
zone "." {
   type hint;
   file "/etc/bind/db.root";
};
// be authoritative for the localhost forward and reverse zones, and for
// broadcast zones as per RFC 1912
zone "localhost" {
   type master;
   file "/etc/bind/db.local";
};
zone "127.in-addr.arpa" {
   type master;
   file "/etc/bind/db.127";
};
zone "0.in-addr.arpa" {
   type master;
   file "/etc/bind/db.0";
};
zone "255.in-addr.arpa" {
   type master;
   file "/etc/bind/db.255";
};
// add entries for other zones below here
// ddns - key
key DHCP_UPDATER {
  algorithm HMAC-MD5.SIG-ALG.REG.INT;
  secret NmfU90eVsfpLk2Ht07R2IQ==;
};
zone "miascuola.lan" {
     type master;
     file "/etc/bind/miascuola.lan";
     allow-update { key DHCP_UPDATER; };
};
// staff - reverse - vlan1
zone "1.168.192.in-addr.arpa" {
     type master;
     file "/etc/bind/rev1";
     allow-update { key DHCP_UPDATER; };
};
// lab - reverse - vlan2
zone "2.168.192.in-addr.arpa" {
     type master;
     file "/etc/bind/rev2";
     allow-update { key DHCP_UPDATER; };
};
// segreteria - reverse - vlan5
zone "5.168.192.in-addr.arpa" {
     type master;
     file "/etc/bind/rev5;
     allow-update { key DHCP_UPDATER; };
};

/etc/bind/miascuola.lan

Sono elencati i server, gli apparati di rete ed eventuali pc con ip statico. Questo file provvede alla fondamentale funzione di risoluzione dei nomi nel corrispondente indirizzo ip. Visualizzando questo file a server in funzione, vi si troveranno dentro anche gli aggiornamenti effettuati dal server dhcp ogni volta che un client si connette alla rete.

fw-scuola = il firewall della scuola, cioè la macchina interposta fra la nostra rete e internet. Il router adsl è direttamente connesso a questa macchina attraverso una delle sue schede di rete (deve averne infatti almeno due, o tante quante sono le sottoreti che si vogliono gestire nel caso non si disponga di dispositivi 802.1q) srv-uno = il server principale (quello che fa anche da PDC)

srv-due = un altro server stp-lx = stampanti laser di rete sw-xxx = switch managed con gestione VLAN (802.1q) rt-adslx = router adsl (potrebbe essercene piu' di uno) xp-xxxxx = client qualificati con ip statico e funzioni amministrative

$ORIGIN .
$TTL 86400      ; 1 day
miascuola.lan           IN SOA  fw-scuola.miascuola.lan. root.miascuola.lan. (
                                1          ; serial
                                28800      ; refresh (8 hours)
                                14400      ; retry (4 hours)
                                3600000    ; expire (5 weeks 6 days 16 hours)
                                86400      ; minimum (1 day)
                                )
                        NS      fw-scuola.miascuola.lan.
fw-scuola               A       192.168.1.1        //sulla vlan1 (sottorete di staff)
srv-uno                 A       192.168.1.2        //sulla vlan1 
srv-due                 A       192.168.1.3        //sulla vlan1 
stp-l1                  A       192.168.1.6        //stampante tcp/ip su vlan1  
sw-uno                  A       192.168.1.21       //switch managed su vlan1 
sw-due                  A       192.168.1.22       //switch managed su vlan1
rt-adsl1                A       192.168.200.2      //router adsl 
www                     CNAME   srv-uno
xp-admin01              A       192.168.1.25       //pc con funzioni particolari
xp-preside              A       192.168.1.26
stp-l2                  A       192.168.2.7        //stanpante tcp/ip su vlan2
srv-segreteria          A       192.168.5.2        //sulla vlan5 (segreteria)

/etc/bind/rev1.lan

File di risoluzione inversa per la vlan1

$ORIGIN .
$TTL 86400      ; 1 day
1.168.192.in-addr.arpa IN SOA  fw-scuola.miascuola.lan. root.miascuola.lan. (
                                1          ; serial
                                28800      ; refresh (8 hours)
                                14400      ; retry (4 hours)
                                3600000    ; expire (5 weeks 6 days 16 hours)
                                86400      ; minimum (1 day)
                                )
                        NS      fw-scuola.miascuola.lan.
1                       PTR     fw-miascuola.miascuola.lan.
2                       PTR     srv-uno.miascuola.lan.
3                       PTR     srv-due.miascuola.lan.
6                       PTR     stp-l1.miascuola.lan.
10                      PTR     xp-preside.miascuola.lan.
11                      PTR     xp-admin01.miascuola.lan.
21                      PTR     sw-rag.miascuola.lan.
22                      PTR     sw-due.miascuola.lan.

/etc/bind/rev2.lan

$ORIGIN .
$TTL 86400      ; 1 day
2.168.192.in-addr.arpa      IN SOA  fw-scuola.miascuola.lan. root.miascuola.lan. (
                                1          ; serial
                                28800      ; refresh (8 hours)
                                14400      ; retry (4 hours)
                                3600000    ; expire (5 weeks 6 days 16 hours)
                                86400      ; minimum (1 day)
                                )
                        NS      fw-scuola.miascuola.lan.
1                       PTR     fw-scuola.miascuola.lan.
7                       PTR     stp-l2.miascuola.lan.

/etc/bind/rev5.lan

$TTL 86400      ; 1 day
5.168.192.in-addr.arpa     IN SOA  fw-scuola.miascuola.lan. root.miascuola.lan. (
                                1                  ; serial
                                28800      ; refresh (8 hours)
                                14400      ; retry (4 hours)
                                3600000    ; expire (5 weeks 6 days 16 hours)
                                86400      ; minimum (1 day)
                                )
                        NS              fw-scuola.miascuola.lan.
1                       PTR             fw-scuola.miascuola.lan.
2                       PTR             srv-segreteria.miascuola.lan.

Note: Included topic Reteisi.isiDhcp does not exist yet

Concetti generali

La gestione degli utenti che proponiamo appoggia sulle seguenti regole:
  • per poter usare uno qualunque dei PC connessi alla rete scolastica bisogna possedere un account valido
  • ogni utente autorizzato dispone di un account personale permanente
  • l'utente e' responsabile della corretta conservazione dei dati dell'account (username e password)
  • e' limitata al minimo indispensabile l'accensione di account collettivi (es. account per consentire l'accesso alla rete ai partecipanti un corso, quando essi siano soggetti esterni alla scuola)
  • ogni utente appartiene a uno dei seguenti gruppi principali
    • ADMINS - gli amministratori del sistema
    • ALUNNI - gli studenti e in generale qualunque utente poco privilegiato. Ogni studente appartiene inoltre ad un gruppo classe.
    • DOCENTI - i docenti
    • ATA - il personale ATA
  • ogni utente autorizzato dispone di uno spazio personale (home directory) sul server a cui viene automaticamente connesso al momento dell'ingresso nel sistema (logon). Esistono inoltre ulteriori aree disco a disposizione degli utenti, principalmente:
    • una cartella di classe a disposizione degli studenti di una stessa classe
      • all'interno di ogni cartella di classe e' presente la cartella speciale alulink contenente i link simbolici alle home degli studenti della classe, questo semplifica grandemente l'accesso dell'insegnante al lavoro dei suoi alunni.
    • una cartella pubblica a disposizione di tutti gli utenti per lo scambio di file

I permessi e i privilegi sono assegnati in modo tale che si abbiano le seguenti funzionalita'

  • lo studente accede in lettura/scrittura solo alla propria cartella, alla cartella di classe e a quella di scambio
  • il docente accede in lettura/scrittura solo alla propria cartella, a quelle degli studenti e a quelle di classe

Possibili semplificazioni

L'unica possibile semplificazione, specie in una fase di avvio e di conoscenza del sistema, ci sembra quella di limitare gli account personali ad account di classe (cioe' lo stesso account per tutti gli studenti di una classe). Se cio' puo' essere tollerato in una scuola elementare e/o media (cioe' in situazioni strutturalmente maggiormente presidiate), certamente e' pratica altamente sconsigliabile in un istituto superiore. In generale raccomandiamo comunque, anche come educazione generale alla corretta interazione con un sistema informatico, l'adozione di account personali e permanenti.

-- MassimoMancini - 28 Dec 2021

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).

NEW ldap_updusers: automatizza completamente l'aggiornamento degli utenti da un anno all'altro

NEW ldap_prepusers: produce un file di aggiornamento utente da un report di SISSI (*)

NEW ldap_checkclassi: confronta il db ldap a fronte del file utenti controllando i gruppi classe

NEW ldap_checkfield: controlla il valore di un campo ldap

NEW ldap_putattr: assegna un valore al campo ldap di un utente

NEW ldap_nousers: lista gli utenti del gruppo ldap che non sono presenti nel file utenti

NEW ldap_saveall: salva il db ldap

NEW ldap_restall: recupera il db ldap salvato

UPDATED 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

UPDATED 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:
  1. in modo interattivo eseguendo ldap_addusers senza parametri e rispondendo alle domande
  2. 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....NEW

Le operazioni che si dovranno fare sono:
  1. cancellazione degli utenti che non ci sono più (es. studenti che non frequenteranno più)
  2. aggiunta dei nuovi utenti (es. nuovi studenti)
  3. 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:

  1. 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.
  2. usare il comando ldap_fileusers per produrre la lista degli utenti esistenti per poi modificarla come al punto precedente.
  3. 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
      -x PASS     per impostare la password PASS per tutti gli utenti 
      -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'alunno sia la sua identificazione.

ldap_updusers controlla anche l'esistenza della cartella di classe e della share samba corrispondente, se non le trova le crea. Le share di samba vengono accodate al file /etc/samba/smb_classi.conf: si presuppone che questo file venga automaticamente assunto a far parte della conf di samba per mezzo di una direttiva include nel file di conf principale /etc/samba/smb.conf.

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.

CONFIGURAZIONE DEL PDC SAMBA

Nel seguito e' descritta solo la struttura adottata dal progetto ISI e non viene fatto nessuno sforzo per spiegare le modalita' e i dettagli della configurazione di un PDC realizzato con Samba. I lettori interessati troveranno sull'argomento una abbondantissima ed esauriente letteratura liberamente disponibile in rete.

Gli elementi funzionali per l'implementazione del PDC ISI sono

  • la struttura di cartelle sotto descritta.
  • un samba server installato e funzionante (attualmente e' in uso la versione Debian-stable 2.2.3a-12.4a)
  • un server ldap installato e funzionante per l'autenticazione (per i dettagli vedi IsiLdap)
  • un server Cups per il controllo delle stampanti

La struttura del file system

Il funzionamento del PDC Samba appoggia sulla seguente organizzazione del file system:

/home
tutta la parte file server e' ospitata qui
/home/admins
contiene le homedir degli amministratori (gruppo @admins)
/home/alunni
contiene le homedir degli alunni (gruppo @alunni) create automaticamente dagli script di gestione del server ldap sulla base della "skeleton dir" /etc/skel (vedi in fondo)
/home/ata
contiene le homedir del personale ata (gruppo @ata)
/home/docenti
contiene le homedir dei docenti (gruppo @docenti)

/home/classi
contiene tutte le cartelle di classe il cui nome deve coincidere con quello del gruppo classe. Es. gli studenti della classe 1A geometri, appartengono al gruppo geo1a e hanno una cartella di classe che si chiama geo1a; la cosa si rende necessaria per la connessione automatica dell'alunno alla sua cartella di classe.
Ogni cartella di classe contiene la sottocartella alulink che a sua volta contiene i link simbolici alle home degli alunni appartenenti alla classe. Il formato del link e' nome_cognome.username, i valori sono letti direttamente dal db ldap tramite uno script a cui e' affidata la creazione e il popolamento automatico della cartella.
In questo modo viene enormemente facilitato il lavoro dell'insegnante che voglia recuperare file specifici dalle home dei suoi studenti rendendo inoltre possibili semplici meccanismi di automazione per il recupero e il trasferimento di file specifici.

/home/samba
tutto quel che serve al logon degli utenti

/home/samba/netlogon/
la radice della share [netlogon] che viene assegnata in smb.conf al percorso /home/samba/netlogon/%g in modo che ogni gruppo di utenti abbia la sua share [netlogon] specifica; cio' si rende necessario per il funzionamento delle politiche di sicurezza (config.pol) sui client win98. Non sembra infatti possibile utilizzare un unico file CONFIG.POL contenente le positiche di gruppo, ma occorre predisporre file config.pol diversi per gruppo e contenenti solo quanto relativo all'utente e alla macchina predefinita. Tutte le cartelle qui sotto indicate contengono due file: logon.bat, lo script di logon valido per tutte le architetture client, e config.pol il file delle politiche di sicurezza per i client win98, redatto con l'utilita' poledit.exe

/home/samba/netlogon/admins
share [netlogon] admins
/home/samba/netlogon/alunni
share [netlogon] alunni
/home/samba/netlogon/ata
share [netlogon] ata
/home/samba/netlogon/docenti
share [netlogon] docenti
/home/samba/netlogon/scripts
contiene gli script lato server attivi durante la fase di logon/logoff.

/home/samba/common
radice di file comuni utili per il logon
/home/samba/common/alunni
contiene Desktop e Menu Avvio comuni per gli alunni che si loggano da clien win98
/home/samba/common/ata
come sopra ma per il personale ATA
/home/samba/common/admins
come sopra ma per gli amministratori
/home/samba/common/docenti
come sopra ma per i docenti
/home/samba/common/reg
file di registr per la configurazione dei client win98

La cartella personale dell'utente

Quando un nuovo utente viene aggiunto al sistema, viene automaticamente dotato di una cartella personale contenete quanto necessario sia a un utente linux sia a un utente windows. A parte i file di personalizzazione tradizionali dell'ambiente linux, la cartella personale conterra' le seguenti sottocartelle:

Documenti
verra' collegata automaticamente all'icona Documenti presente sul desktop windows
.wxp_profile
cartella nascosta (inizia col punto) in cui il client WinXP salva il profilo personale dell'utente
.w98_profile
cartella nascosta (inizia col punto) in cui il client Win98 salva il profilo personale dell'utente

Il file di configurazione /etc/samba/smb.conf

[global]
   workgroup = *nome del dominio*
   netbios name = *nome netbios del server*
   server string = %h
   domain logons = Yes
   os level = 254
   preferred master = True
   domain master = True
   dns proxy = No
   wins support = Yes
   domain admin group = root, @admins
   encrypt passwords = Yes
   min passwd length = 3
   obey pam restrictions = Yes
   passwd program = /usr/bin/ldap_passwd %u
   passwd chat = *New*Passwd* %n\n *Verify* %n\n *modifying*
   add user script = /usr/sbin/ldap_adduser -d /dev/null -g 100  -s /bin/false -M %u
   unix password sync = Yes
   log level = 1
   syslog = 0
   log file = /var/log/samba/log.%m
   max log size = 1000
   time server = Yes
   browseable=no
   printcap name = cups
   printing = cups
   logon script = logon.bat
   logon path = \\%L\profiles
   logon drive = H:
   logon home = \\%L\%g\%u\.w98_profile\%a
   ldap server = 127.0.0.1
   ldap port = 389
   ldap suffix = ou=People,dc=isi
   ldap admin dn = cn=admin,dc=isi
   ldap ssl = no
[homes]
   comment = Home Directories
   read only = No
   create mask = 0600
   directory mask = 0700
   browseable = No
[netlogon]
   comment = Network Logon Service
   path = /home/samba/netlogon/%g
   read only = No
   create mask = 0644
   guest ok = Yes
   browseable = No
   root preexec = /home/samba/netlogon/scripts/home_setclasse '%u'
[profiles]
; serve al salvataggio dei roaming profiles xp/wi2k        
   path = /home/%g/%u/.wxp_profile
   read only = No
   create mask = 0600
   directory mask = 0700
   browseable = No
[w98reg]
; contiene i file di registro per la predisposizione del client w98 da parte dello script di logon
   path = /home/samba/common/reg
   read only = No
   create mask = 0644
   browseable = No
[w98cfg]
; contiene le cartelle con Desktop e Menu Avvio comuni a tutti i clien win98
   path = /home/samba/common/%g
   read only = No
   create mask = 0666
   directory mask = 0777
   browseable = No
[scripts]
; contiene gli script lato server gestiti da samba
; vedi ad esempio il root preexec della share [netlogon]
   path = /home/samba/scripts
   valid users = root, @admins
   read only = No
   create mask = 0600
   directory mask = 0700
[printers]
   comment = All Printers
   path = /tmp
   printer admin = root, @admins
   create mask = 0700
   guest ok = Yes
   printable = Yes
   browseable = No
[admins]
   comment = cartella amministratori
   path = /home/admins
   valid users = root, @admins
   read only = No
   browseable = No
[docenti]
   comment = cartella docenti
   path = /home/docenti
   valid users = root, @admins
   read only = No
[ata]
   comment = cartella personale ata
   path = /home/ata
   valid users = root, @admins
   read only = No
[alunni]
   comment = cartella alunni
   path = /home/alunni
   valid users = root, @admins, @docenti
   read only = No
[scambio]
   comment = cartella pubblica di transito
   path = /home/scambio
   read only = No
   create mask = 0777
   directory mask = 0777
[uti]
   comment = cartella contenente programmi di utilita'
   path = /home/apps-utils
   valid users = root, @admins, @docenti
   read only = No
   directory mask = 0777
[apps]
   comment = cartella contenete applicazioni installabili
   path = /home/apps
   admin users = root,@admins
   directory mask = 0777
[classi]
   comment = cartella classi
   path = /home/classi
   read only = No
[geo1a]
   comment = cartella di classe
   path = /home/classi/geo1a
   valid users = @admins, @geo1a, @docenti
   read only = No
   create mask = 0666
   directory mask = 0777
   browseable = No

-- MassimoMancini - 18 Jan 2022

In questo articolo descriveremo una configurazione del firewall di ArgoLinux alla base della sicurezza dall'intrusione e del controllo del traffico verso internet in una intranet scolastica strutturata secondo il modello ISI. In breve

  • una sottorete di staff (tutte le macchine a disposizione dei non-studenti)
  • tante sottoreti quante sono le reti dei laboratori
  • la sottorete delle segreteria
Le macchine attestate sulle varie sottoreti sono organizzate in due classi: quelle a indirizzo statico, apparati di rete, stampanti e pc amministrativi, quelle a indirizzo dinamico (dhcp). Questa suddivisione consente di implementare molto facilmente acl di Squid o eccezioni di firewalling.

Il software coinvolto nell'implementazione dei servizi di sicurezza e' netfilter/iptables per quanto riguarda il filtraggio dei pacchetti e le fondamentali operazione di redirezione del traffico (MASQUERADING, SNAT/DNAT), Squid per quanto riguarda il servizio proxy e DansGuardian per quanto riguarda il filtraggio dei contenuti della navigazione. La configurazione di Squid e DansGuardian è descritta altrove. Qui ci occuperemo di come configurare netfilter/iptables affinchè si abbiano le funzionalità seguenti.

La macchina firewall (FW)

  1. protegge tutte le sottoreti (nel caso d'esempio si tratta di 5 vlan: vlans 1=staff 2,3,4=laboratori 5=segreteria)
  2. ridirige il traffico in ingresso sulla porta 80 al server web principale e quello sulla porta 81 a un server web secondario
  3. ridirige il traffico ssh in ingresso sulla porta 22 a se stesso e quello sulla porta 24 al servizio ssh in ascolto sul server
  4. consente connessioni VPN attraverso la porta 5000
  5. vieta in generale l'uscita diretta su internet attraverso la porta 80,i browser dovranno essere obbligatoriamente configurati per utilizzare un servizio proxy sulla porta 8128 (DansGuardian) o 3128 (Squid) NOTA: DG ascolta di default sulla porta 8080, la ridefinizione è resa necessaria per evitare possibili conflitti con le fonti apt bee.side).
  6. ridirige in generale tutte le richieste internet sulla porta 8128 a cui è attestato DG anche se il browser è configurato per sfruttare il servizio proxy di squid alla porta 3128. In questo modo resta garantito il meccanismo di autenticazione dell'utente svolto da Squid e il controllo sui contenuti del traffico web.
  7. impedisce/consente il traffico tra le vlan (ad esempio isola la vlan5, segreteria, dal resto della rete per quanto riguarda il traffico in ingresso ma consente l'accesso a internet alle macchine della segreteria.

A quanto appena detto si aggiunge la gestione di alcune importanti eccezioni.

  1. ai server (_FIREWALL, _SERVER, _SRV2, _SRV3) viene garantito l´accesso diretto a internet sulla porta 80 bypassando tutti i servizi proxy, questo facilita tutte le operazione di aggiornamento automatico via apt-get e argoupdater (la procedura sistematica di aggiornamento di Argo)
  2. ad alcune macchine qualificate viene garantito il bypass di DG
  3. ad alcune macchine qualificate viene consentito l´accesso alla vlan5 (segreteria), ad es. si vuole che il dirigente scolastico possa scambiare dati direttamente con gli uffici.

Naturalmente il modo in cui avviene l'autenticazione dell'utente e il controllo della navigazione dipende dalle configurazione di Squid e DG che aggiungono due ulteriori strati di controllo.

In ArgoLinux la configurazione del firewall è tutta contenuta nei due file /etc/argo/fw.conf e /etc/argo/fw.add . Eccone il contenuto necessario per realizzare lo scenario sopra descritto.

/etc/argo/fw.conf

### ------VARIABILI---------------
# abilitazione log dei pacchetti scartati
LOG="1"

INT="vlan1 vlan2 vlan3 vlan4 vlan5"
EXT="ext0"

LAN="192.168.1.0/24 192.168.2.0/24 192.168.3.0/24 192.168.4.0/24 192.168.5.0/24"

TCP_DPORTS="22 80 20 21 24 5000"
UDP_DPORTS=""

# Input chains w/ 'tnl' in the name (expr match $name tnl -eq 3) will not
# be considered by 'firewall' script

INPUT_CHAINS="int ext log"
FWD_CHAINS="fwd flog"


FORWARD="1"
# masquerading
IP_MODE=static
# ip dell'interfaccia connessa al router adsl
IP_EXT= 192.168.200.2

# DMZ_ARP=
# EXT_ARP=

# scommentare la riga seguente per il proxy trasparente
# attenzione: il proxy trasparente è incompatibile con
# l'autenticazione via proxy e quindi non viene utilizzato
# PROXY_REDIR_PORT=3128

ICMP_TYPES=" 0 , 3 , 8 , 11 "
# 0 = echo reply
# 3 = dest unreachable
# 8 = echo request
# 11 = time exceeded for datagram

### ------fine----------

Quanto contenuto in fw.conf consente la protezione delle sottoreti e la condivisione dell´accesso internet. Il resto delle regole di firewalling è contenuto nel file /etc/argo/fw.add. Eccone il contenuto (si noti l'organizzazione della configurazione: la definizione di tutte le variabili necessarie, l'implementazione delle regole. In questo modo risulta semplice estendere le funzionalità desiderate):

/etc/argo/fw.add

#### ---------VARIABILI---------
# protocolli
PROTO="tcp udp"

# porte
PORTS="20 21 25 80 110"
P_HTTP="80"
P_HTTP_APT="80 8080"
P_SSH="22"
P_SSH_EXTRA="24"
P_DNS="53"
P_SARG=" 81"
P_CUPS="631"
P_SWAT="901"

# porte squid e dansguardian
P_SQUID="3128"
P_DG="8128"
P_PROXY="3128 8128"

#### server e bypass proxy
LH="127.0.0.1"

_FIREWALL="192.168.1.1"
_SERVER="192.168.1.2"
_SRV2="192.168.1.3"
_SRV3="192.168.1.4"

SERVER_DNS="$_FIREWALL"

NOPROXY1="$_FIREWALL"
NOPROXY2="$_SERVER"
NOPROXY3="$_SRV2"
NOPROXY4="$_SRV3"

# accesso diretto a squid per macchine particolari
# attenzione non e'la stessa cosa di evitare il filtraggio dell'ip

# pc a cui è permesso l'accesso alla vlan della segreteria
NODG01="x.x.x.x"

# ip di pc amministrativi/
ADMIN01="x.x.x.x"

# ip interfaccia esterna
EXT0="192.168.200.2"

# ip interfacce interne (vlans)
_VLAN1="192.168.1.0/24"
_VLAN2="192.168.2.0/24"
_VLAN3="192.168.3.0/24"
_VLAN4="192.168.4.0/24"
_VLAN5="192.168.5.0/24"

# lista delle vlan che possono comunicare tra loro
OK_LANS="vlan1 vlan2 vlan3 vlan4"

#### target ridirezione porte
SRV_SSH="$_SERVER:22"
FW_HTTP="$_FIREWALL:80"


####----------REGOLE------------------

# nat spostato qui da fw.conf per attivazione 2adsl
#iptb -A fwd -o $EXT0 -j ACCEPT
#iptb -t nat -A POSTROUTING -o ext0 -j SNAT --to $EXT0
#iptb -t nat -A POSTROUTING -o ext1 -j SNAT --to $EXT1

# 1 Blocco uscita diretta internet (navigazione solo via proxy)
iptb -I fwd 1 -o $EXT -p tcp --dport $P_HTTP -j bad

# 2 Passaggio libero attraverso la porta 80 per il traffico proveniente dai
# server - necessario per semplificare le operazioni apt
iptb -I fwd 1 -s $NOPROXY1 -o $EXT -p tcp --dport $P_HTTP_APT -j ACCEPT
iptb -I fwd 1 -s $NOPROXY2 -o $EXT -p tcp --dport $P_HTTP_APT -j ACCEPT
iptb -I fwd 1 -s $NOPROXY3 -o $EXT -p tcp --dport $P_HTTP_APT -j ACCEPT
iptb -I fwd 1 -s $NOPROXY4 -o $EXT -p tcp --dport $P_HTTP_APT -j ACCEPT

# 3 nessuna redirezione trasparente su DansGuardian per la segreteria e per
# pc speciali
iptb -t nat -A PREROUTING -s $_VLAN5 -p tcp --dport $P_PROXY -j REDIRECT --to-port $P_SQUID
iptb -t nat -A PREROUTING -s $NODG01 -p tcp --dport $P_PROXY -j REDIRECT --to-port $P_SQUID

# 4 redirezione trasparente su DansGuardian di tutto il resto del traffico
iptb -t nat -A PREROUTING -s !$NOPROXY1 -p tcp --dport $P_PROXY -j REDIRECT --to-port $P_DG
iptb -t nat -A PREROUTING -s !$NOPROXY2 -p tcp --dport $P_PROXY -j REDIRECT --to-port $P_DG
iptb -t nat -A PREROUTING -s !$NOPROXY3 -p tcp --dport $P_PROXY -j REDIRECT --to-port $P_DG
iptb -t nat -A PREROUTING -s !$NOPROXY4 -p tcp --dport $P_PROXY -j REDIRECT --to-port $P_DG

# 5 Configurazione per ridirigere su firewall richiesta SARG
iptb -t nat -A PREROUTING -d $EXT0 -p tcp --dport $P_SARG -j DNAT --to $FW_HTTP
#iptb -A fwd -d $_SERVER -p tcp --dport $PORTS -j ACCEPT

# 6 Configurazione per ridirigere pop3,smtp e http (adsl1)
iptb -t nat -A PREROUTING -d $EXT0 -p tcp --dport $PORTS -j DNAT --to $_SERVER
iptb -A fwd -d $_SERVER -p tcp --dport $PORTS -j ACCEPT

# 7 Configurazione per redirigere bind
iptb -t nat -A PREROUTING -s ! $SERVER_DNS -p $PROTO --dport $P_DNS -j DNAT --to $SERVER_DNS
iptb -A fwd -p $PROTO --dport $P_DNS -j ACCEPT

# 8 Configurazione per ssh diretto su srv-nec
iptb -t nat -A PREROUTING -d $EXT0 -p tcp --dport $P_SSH_EXTRA -j DNAT --to $SRV_SSH
iptb -A fwd -d $_SERVER -p tcp --dport $P_SSH -j ACCEPT

# 9 Configurazione per accesso a PDC
iptb -A fwd -d $_SERVER -j ACCEPT

# 10 Configurazione per traffico tra vlan
iptb -A fwd -i $OK_LANS -o $OK_LANS -j ACCEPT

# 11 autorizzazione traffico macchine qualificate-segreteria
iptb -A fwd -s $ADMIN01 -o vlan5 -j ACCEPT

#--------------------fine--------------------------------

Installazione di Squid

Presupposti:
  • Occorre un computer anche non particolarmente potente: per un utilizzo normale è sufficiente un pentium 2 o celeron con 64 di ram e un disco fisso da 2 gb. Può essere utile più spazio disco se si intende utilizzare squid non solo per il controllo dell'accesso a internet, ma anche per velocizzare l'accesso alle pagine e ridurre il consumo di banda, aumentando la memoria cache per le pagine.
  • Deve essere installato e configurato Argo-linux e il pacchetto isi-ldap. Quest'ultimo, che svolge la funzione di autenticatore degli utenti, può essere installato sulla macchina che fa da proxy (tipicamente il firewall/gateway) oppure su un altro computer (server ldap/samba).

Per installare Squid, se non è già installato, è sufficiente dare il comando root@srv #apt-get install squid. Il comando per attivare il server proxy è root@srv #/etc/init.d/squid start. Per far sì che il proxy venga avviato automaticamente al riavvio del computer, è sufficiente controllare che in /etc/runlevel.conf la riga "30 0,1,6 2,3,4,5 /etc/init.d/squid" non sia commentata.

Configurazione di Squid

La configurazione di squid è contenuta nel file /etc/squid/squid.conf. Si tratta di un file molto lungo, capillarmente documentato ed estremamente configurabile. >Nelle ultime versioni il file è stato snellito: restano solo i comandi principali e sono stati elòiminati tutti i commenti
Qui ci limitiamo a dare indicazioni estremamente concise ed atte solo ad una configurazione minimale, adatta allo scopo che ci prefiggiamo, cioè di far sì che gli utenti della scuola che accedono ad Internet vengano autenticati dal proxy tramite un accesso al database ldap.
  • La prima cosa da configurare è l'IP della macchina che deve essere interrogata per l'autenticazione degli utenti, cioè il server ldap/samba (che può essere la stessa macchina dove gira squid, oppure un'altra).
    Questo si ottiene con la riga "auth_param basic program /usr/lib/squid/ldap_auth -b ou=People,dc=isi xxx.xxx.xxx.xxx (indirizzo Ip del server ldap)".
  • La seconda cosa necessariamente da configurare è la creazione di una access list (acl) che obblighi gli utenti ldap ad autenticarsi per poter accedere a internet.
    Ciò si ottiene con la seguente riga: "acl ldapusers proxy_auth REQUIRED".
  • Se lo si desidera si possono creare altre access list per utenti o macchine che non hanno bisogno di essere filtrati.
Per questo motivo quasi tutto il resto della configurazione può essere lasciato ai valori di default

Visualizzare i reports di Squid con Sarg

Sarg (Squid Analysis Report Generator) è uno strumento che genera pagine web con report che rendono facilmente leggibili i log di Squid. In pratica viene creata una pagina web per ogni utente, con un elenco delle pagine visitate, completo di URL, bytes scaricati, tempi di accesso, etc...
Nella distribuzione Argo-linux Sarg è già previsto e l'unica cosa da fare è modificare leggermente il file di configurazione, che è già funzionale, ma che ha un piccolo errore e salva le pagine web in una directory che non è raggiungibile.
  • Per configurare la cartella di salvataggio dei report corretta, occorre sostituire "output_dir /var/www/html/squid-reports" con "output_dir /var/www/http/squid-reports"
  • Si possono poi configurare moltissimi altri parametri, alcuni esclusivamente estetici, altri utili, per esempio:
    • impostare la lingua italiana con "language Italian"
    • personalizzare il titolo con title "Statistiche degli accessi degli utenti tramite Squid"
    • aggiungere un logo con "logo_image http://localhost/immagine.jpg"
In questo modo è possibile vedere, digitando nel browser l'IP del firewall la pagina dei report sugli accessi al proxy realizzata automaticamente da SARG. Poiché i dati contenuti sono da considerare riservati, è opportuno proteggere l'accesso a queste pagine con la richiesta di una login e relativa password.

Proteggere le pagine web di SARG (e non solo) da accessi indesiderati

Per proteggere le pagine web da accessi indesiderati con evidente rischio di non rispettare il diritto alla privacy, è opportuno utilizzare le funzionalità di Apache, utilizzando il file .htaccess e quello delle password, cioè .htpasswd.
Per attivare questa funzionalità occorre creare un file dal nome .htaccess (attenzione al punto iniziale, che lo rende nascosto). Il file .htaccess funziona come uno script di configurazione, e fornisce ad Apache alcuni dettagli ed opzioni quando un utente viene autenticato. Con un editor di testi si devono inserire le seguenti righe:
AuthUserFile /var/www/http/squid-reports/.htpasswd
AuthGroupFile /dev/null
AuthName "Rapporti di Squid"
AuthType Basic
<Limit GET>
require valid-user
</Limit>
Come si può notare, il file .htaccess è diviso in due sezioni, la prima parte per i dettagli di autenticazione e la seconda parte con i permessi per l'utente:
AuthUserFile /var/www/http/squid-reports/.htpasswd
Nella prima linea è indicato il percorso assoluto al file .htpasswd. Questo file contiene una lista di combinazioni di username e password che Apache userà per verificare tutti i tentativi di login.
AuthGroupFile /dev/null
La seconda linea fa riferimento ad un file per l'autentificazione di gruppi. Questo potrebbe essere utile per separare gli utenti in gruppi distinti, come studenti e insegnanti. Siccome non ne faremo uso, indichiamo /dev/null, in modo tale da "avvisare" Apache che il file non esiste.
AuthName "Rapporti di Squid"
Nella terza linea, indichiamo il nome che vogliamo venga visualizzato dalla finestra del browser quando richiede il login
AuthType Basic
La variabile AuthType imposta il tipo di autenticazione per la richiesta. Dato che stiamo usando una semplice autenticazione via web, la impostiamo su Basic, anche perché viene supportata da tutti i browser. Altri valori possibili sono PGP e Digest.

La seconda sezione del nostro file .htaccess, contiene le richieste e i metodi di risposta a cui gli utenti autenticati hanno accesso. Nel nostro file .htaccess consentiamo agli utenti autorizzati l'accesso a tutte le parti del sito in cui il metodo GET è permesso (in poche parole, gli utenti possono vedere una pagina, ma non possono compilare form etc). Altri limiti includono PUT e POST.
<Limit GET>
...
</Limit>
Tra i due Limit, possiamo inserire una lista di utenti a cui intendiamo concedere l'accesso alle cartelle protette, precendendo l'username con “require user”, ad esempio
require user fabio
require user massimo
In alternativa si può garantire l'accesso a tutti gli utenti con l'esatta accoppiata username/password presenti nel file .htpasswd:
require valid-user 
Arrivati a questo punto non resta che aggiungere utenti alla lista delle persone autorizzate. Questo viene fatto tramite il programma htpasswd, che è molto più semplice del file .htaccess, dato che può essere composto anche da una sola linea. In realtà è composto da una lista di coppie nome/valore, che rappresentano le combinazioni di username/password. Ogni combinazione di username/password è separata da un ritorno a capo e viene usata da Apache per determinare se un utente che tenta di accedere alla directory protetta esiste, e se la password che ha fornito è valida.
Per creare il file .htpasswd, una volta collegato al server web via ssh, occorre portarti nella directory da proteggere.
La sintassi del comando htpasswd è la seguente:
htpasswd [opzioni] [file .htpasswd] [nuovo username]
Digiteremo quindi:
*htpasswd -c /var/www/http/squid-reports/.htpasswd nomeutente*
dove
  • "-c" informa il programma che stiamo creando un nuovo file.
  • /var/www/http/squid-reports/.htpasswd indica il percorso e il nome del file che creiamo
  • nomeutente è il nome dell'utente cui vogliamo dare il permesso di accedere.
In questo modo verrà chiesto di digitare due volte la password che si vuole associare all'utente.
Per aggiungere un altro utente, non sarà più necessario usare il parametro "-c" (che serve a creare il file .htpasswd).

Infine occorre accertarsi che nel proprio file di configurazione del server Apache (/etc/apache/httpd.conf) la direttiva AllowOverride sia settata a All e non a None, altrimenti le direttive presenti nel file .htaccess saranno scartate in favore di quelle presenti nel file di configurazione.

Filtro sui contenuti web

Squid permette di impostare delle politiche di accesso ai siti web, in particolare sugli indirizzi (sia URL che indirizzi IP), che è possibile bloccare, anche se non è possibile impostare dei filtri sul contenuto delle pagine web: per questo è necessario un programma a parte, come per esempio Dans Guardian
Per fare ciò occorre definire delle access list, alle quali poi negare o permettere l'accesso. Un'access list va inserita in /etc/squid.conf e generalmente fa riferimento ad un file di testo esterno nel quale vengono inseriti gli indirizzi da bloccare (ricordo che il file di testo deve avere un indirizzo per riga e che il fine riga deve essere Unix-type).
Esempio di file che contiene gli indirizzi da bloccare:
.lookatmynaughtywife.com
.wifeposter.com
.wifelovers.com
.chickchat.nl
.tienerwebcams.nl
E' possibile trovare su Internet dei file con una serie di indirizzi da bloccare già confezionati, anche se magari non tutti sono aggiornati. Per esempio si può vedere il sito http://www.squidblock.com/, oppure anche Squid and Web Utilities di Pedro Lineu Orso, ed ancora Squid Blocking Files di Jasons Staudenmayer.
Tale file va salvato in una cartella apposita, per esempio /etc/squid/policies/ e ad esso fa riferimento l'access list impostata in squid.conf tramite il comando url_regex, per esempio:
acl porn url_regex "/etc/squid/policies/porn.txt" 
acl mp3 url_regex "/etc/squid/policies/mp3.txt" 
Oltre alla definizione della access list, è necessario indicare a Squid quale comportamento deve tenere quando deve accedere ad un sito in essa contenuto. Tale comportamento si definisce col comando "deny", in questo modo:
http_access deny porn 
http_access deny mp3 
Dopo aver fatto le modifiche al file di configurazione, occorre ovviamente riavviare il servizio con il comando /etc/init.d/squid restart.

Maggiori informazioni si possono trovare sul sito ufficiale di Squid (in inglese), e soprattutto sull'ottimo sito in lingua italiana di Merlino BBS, nella sezione dedicata a Squid.

-- FabioFrittoli - 8 Giugno 2004

-- SandroDentella - 17 Jul 2021

Revision -
Revision r1.1 - 17 Jul 2021 - 10:43 - SandroDentella