Facoltà di Ingegneria - Sede di Modena Corso di Laurea in Ingegneria Elettronica
Samba, Cups e Netatalk:
condivisione di risorse in ambito Linux
Relatore: Tesi di Laurea di:
Prof.ssa Letizia Leonardi Luca Martinelli
Correlatore:
Ing. Luca Ferrari
Anno Accademico 2003 - 2004
Indice
1 Samba 3
1.1 Introduzione . . . . 3
1.2 Caratteristiche . . . . 7
1.3 Funzionamento: una generica sessione Samba . . . 10
1.3.1 Concetti di Windows Networking . . . 10
1.3.2 File sharing & print sharing . . . 11
1.3.3 Samba Printing . . . 12
1.4 Analisi pacchetti . . . 14
1.4.1 Netbios e Netbeui . . . 15
1.4.2 Autenticazione . . . 18
1.4.3 Dettaglio pacchetti . . . 19
1.5 Esempio di congurazione di Samba . . . 25
1.6 Applicazioni che costituiscono Samba . . . 32
1.7 Evoluzione di Samba: CIFS . . . 37
2 Netatalk 39 2.1 Introduzione . . . 39
2.2 AppleTalk e lo standard ISO/OSI . . . 39
2.2.1 Una implementazione del protocollo Appletalk . . . . 49
2.3 Compilazione e installazione di Netatalk . . . 49
2.4 Congurazione di Netatalk . . . 50
2.4.1 Congurazione di AppleTalk Routing . . . 51
2.4.2 Congurazione di un File Server . . . 54
2.4.3 Principali Utility di Netatalk . . . 57
3 Cups 60 3.1 Introduzione . . . 60
3.1.1 Introduzione a IPP . . . 60
3.2 Concetti generali . . . 62
3.2.1 PostScript . . . 62
3.2.2 RIP . . . 63
3.2.3 Spooler e Demoni di Stampa . . . 64
3.2.4 File PPD . . . 64
1
3.4 Scheduler . . . 66
3.5 Conguration File . . . 66
3.5.1 Congurazione del server HTTP . . . 66
3.5.2 File di congurazione per stampanti . . . 67
3.5.3 Tipologie MIME supportate . . . 71
3.6 CUPS API . . . 71
3.7 Berkeley and System V Commands . . . 74
3.7.1 lpstat . . . 74
3.7.2 lp status . . . 75
3.7.3 lpc status . . . 75
3.7.4 lpq . . . 75
3.7.5 lprm e cancel . . . 75
3.7.6 lpadmin . . . 75
3.7.7 cupsaddsmb . . . 76
3.7.8 lpinfo . . . 76
3.8 Filters . . . 76
3.8.1 foomatic . . . 77
3.8.2 pap . . . 77
3.9 CUPS Imaging . . . 77
3.10 Backends . . . 78
3.10.1 Samba Backend . . . 78
3.11 Network Printing . . . 81
Bibliograa 86
Samba
1.1 Introduzione
Samba e` un progetto fondato nel 1991 da Andrew Tridgell, al quale oggi- giorno contribuiscono attivamente una decina di sviluppatori. Samba è Soft- ware Libero distribuito con licenza GPL [1]. Questo software rende traspar- ente l'integrazione tra Unix e Windows, poichè Samba funziona bene su molte piattaforme (GNU/Linux, Mac Os-X, Solaris, HP-UX, AIX, True64,
*BSD, e altre ancora), implementando un server SMB. SMB è un famoso protocollo di condivisione delle risorse adottato sul nire degli anni Ottanta da molti produttori per fornire funzionalità di condivisione di le, directory e stampanti all'interno di una rete locale. Tra questi produttori c'era anche Microsoft, che decise di includere il protocollo all'interno del suo sistema operativo Windows per l'erogazione dei servizi di rete. La scelta si rivelò strategica per la casa di Redmond che raorzò il supporto a SMB in tutte le release successive dei propri sistemi operativi. Oggi SMB è più che mai pre- sente nei sistemi Microsoft anche se recentemente ha cambiato il suo nome in CIFS (Common Internet File System)[2].
Un Protocollo onnipresente Come conseguenza naturale dell'adozione di SMB da parte di Microsoft, attualmente esistono svariati milioni di com- puter Windows che fanno uso di questo protocollo, creando così uno standard di fatto per i servizi di condivisione delle risorse. Ogni volta che si clicca sul- l'icona di Risorse di Rete oppure ogni volta che si lancia una stampa su una unità condivisa da Windows, si sta in qualche modo utilizzando il protocollo SMB. Nonostante la presenza quasi esclusiva in ambito Windows, SMB è un protocollo aperto e non un sistema chiuso sotto la proprietà di Microsoft.
Qualunque produttore o gruppo di sviluppo può implementarlo per fornire servizi di condivisione su qualunque sistema e piattaforma, garantendo una piena compatibilità Windows. Questo è proprio quello che fa il progetto Samba: fornire servizi di condivisione per accedere in maniera trasparente
3
go tempo ma si può certamente aermare che la diusione più rilevante di Samba si ha con la versione 2.2 nella piattaforma Linux. Il successo è stato dato dalla credibilità del sistema operativo stesso e dall'allettante possibilità di replicare quasi completamente le funzionalità di un server Windows NT4 senza sostenere costi di licenza. Installando Samba in un le server era pos- sibile risparmiare subito circa mille euro di licenza Windows Server più tutte le CAL[3]
1richieste per ogni client che accede ai servizi centralizzati. Un vantaggio non indierente per piccole e medie imprese, organizzazioni senza scopo di lucro ed enti governativi.
Panoramica di Samba 2.2 La versione 2.2 di Samba funziona grazie a due demoni generalmente attivati in fase di avvio dal sistema operativo. Si tratta di smbd e di nmbd. Il primo provvede alle funzioni di autenticazione e di condivisione delle risorse. Il secondo implementa invece i servizi di risoluzione dei nomi, compreso WINS (Windows Internet Naming Service)
2e le funzioni di browsing necessarie per l'elenco dei computer in Risorse di Rete. Non bisogna infatti dimenticare che questo elenco non è dinamico e neppure aggiornato in tempo reale, ma è piuttosto mantenuto da un comput- er sulla rete. Questo a intervalli regolari provvede ad aggiornare l'elenco in base a un algoritmo ben denito. I client fanno riferimento a questo elenco per visualizzare l'elenco dei membri della rete locale. E' per questo motivo che non sempre si riesce a vedere in rete un computer appena acceso o si trovano ancora in elenco computer che risultano invece spenti già da diversi minuti. I demoni smbd e nmbd svolgono nel complesso la totalità delle fun- zioni presenti in Samba 2, garantendo un comportamento simile a quello di un server Windows NT4. Samba 2.2 può svolgere funzioni di workgroup o di PDC, può autenticare gli utenti in modalità debole compatibile Windows 9x, può autenticare in modalità NT, supporta la browsing list e gestisce in buona misura i criteri di sistema, come verrà spiegato in seguito. Il Primary Domain Controller (PDC) è il server che mantiene un database di tutte le password (SAM)
3: quando un client cerca di accedere alle risorse di un serv- er, quest'ultimo verica sul PDC se login e password fornite sono valide. Se questo accade al client viene permesso l'accesso alle risorse richieste e fornito un token di autenticazione con cui automaticamente riesce ad accedere ad altre risorse accessibili. Il database delle password viene automaticamente copiato ad uno o più Backup Domain Controller (BDC) eventualmente pre-
1
Nei modelli di licensing Windows Server è necessaria una licenza Server per ogni copia del software server installata, oltre a una licenza CAL (Client Access License) per ogni utente o dispositivo che accede o utilizza il software server.
2
Il servizio che nelle reti Microsoft viene utilizzato per la traduzione dei nomi in indirizzi.
3
Security Account Manager: sistema per la memorizzazione delle password e dati
account utente in un dominio Microsoft
senti nella rete i quali possono essere utilizzati per autenticare i client nel caso in cui il PDC risulti inaccessibile. Sul server si possono poi congurare un numero arbitrario di condivisioni e creare tutti i presupposti per l'erogazione di cartelle pubbliche e di home directory, tutte protette con diritti a livello di utente. Quanto basta insomma per sostituire un server NT4 in molte situazione reali. La congurazione e la manutenzione del sistema Samba avviene, secondo la tradizione Unix, tramite le testuali da editare man- ualmente. Esistono comunque strumenti graci per semplicare la gestione di Samba. Tra questi è interessante Swat, un front-end Web per l'ammin- istrazione del sistema, che verrà analizzato in seguito. Pur essendo molto funzionale, Samba 2.2 è comunque privo di alcune caratteristiche importan- ti. Non è per esempio contemplato il ruolo di BDC, non sono supportate le relazioni di ducia tra server Windows e server Samba e non è possibile amministrare la lista degli utenti e dei gruppi usando il tool di gestione di Windows NT4. Il divario si è poi allargato, dal momento che Microsoft non si è fossilizzata sulle caratteristiche di Windows NT4, ma ha incrementato piuttosto la rosa di funzionalità di rete nelle successive release di Windows 2000 Server e Windows Server 2003.
La versione corrente: Samba 3 Gli equilibri sono stati nuovamente ripristinati con Samba 3, rilasciato nel settembre 2003. Questa versione ha colmato un elevato numero di carenze, guadagnando nuovamente terreno sull'oerta Microsoft e tornando nuovamente a essere un'alternativa interes- sante. Il progetto è stato in seguito aggiornato no all'attuale 3.0.8. Queste release successive hanno comunque avuto solo ruoli correttivi nei confronti di bug strutturali o di falle di sicurezza[4]. Con questa versione delle suite Samba è stata aggiunta una funizionalità importante il supporto per Active Directory
4. Si tratta della possibilità di unirsi come membro a una strut- tura ADS (Active Directory Service) preesistente, con la facoltà di autenti- care utenti tramite il protocollo Kerberos e di utilizzare LDAP (Lightweight Directory Access Protocol)
5per la memorizzazione delle informazioni di rete.
Tutto questo è un notevole passo in avanti, ma permangono alcuni limi- ti rilevanti. Occorre innanzitutto spiegare che i protocolli che regolano il funzionamento dei domini Windows non sono in realtà aperti, ma sono un segreto industriale ben custodito da Microsoft, e quindi non esiste quindi alcuna documentazione tecnica liberamente disponibile. Gli sviluppatori di Samba non possono fare altro che compiere esperimenti sui domini ed esam- inare il traco di rete per cercare di dedurre il comportamento dei protocolli.
Si tratta di un estenuante lavoro di reverse engineering.
4
Active Directory Service: il servizio di directory Microsoft. Network Directory è una struttura organizzativa delle le risorse all'interno di una rete (utenti, autenticazioni, condivisioni, stampanti) gestita in modo centralizzato[5].
5
LDAP è un insieme di speciche per un protocollo client-server per ottenere
memorizzare informazioni centralizzate come Network Directory[6].
completamente l'ambiente di Active Directory, in Samba 3 sono state svilup- pate anche le caratteristiche di dominio NT4. La scelta è derivata dalla seguente motivazione: esiste ancora una percentuale elevata di utenti NT4 Server, addirittura superiore alle previsioni di Microsoft, ed è bene fornire supporto a questa categoria di utilizzatori. Bisogna considerare che la mag- gior parte delle PMI (Piccole e Media Industrie) non ha bisogno di tutte le caratteristiche evolute di rete introdotte a partire da Windows 2000 Server.
Un ambiente aperto, senza costi di licenza e in grado di emulare Windows NT4 Server è già più che suciente per una consistente fetta di mercato.
Samba 3 permette di migrare completamente un ambiente NT4 Server man- tenendo le informazioni sugli utenti e sui gruppi, in questo processo vengono preservati anche i SID (Single Identier), gli identicatori unici Windows di sicurezza per gli oggetti gestiti sul server. Grazie a questa capacità i client potranno essere integrati in maniera trasparente e senza alcun lavoro sup- plementare. E' supportato sia il ruolo di PDC (presente già da tempo) che quello di BDC, una novità per Samba. I tool di amministrazione presenti su Windows possono essere usati per amministrare questo ambiente, rendendo più semplice la gestione da parte dello sta tecnico.
I domini creati con Samba non sono isolati, ma possono istituire relazioni di ducia con controller di dominio basati su Windows. Questa era una delle carenze più sentite in Samba 2.2, in quanto l'assenza delle trust impediva l'uso di Samba in realtà complesse dotate di molti domini. I nomi delle risorse possono essere composti ora in maniera più cosmopolita grazie all'inclusione di unicode: esiste ora piena facoltà di avere nomi realmente internazionali con alfabeti non occidentali. E' inne degna di nota la scelta di introdurre un comando net ispirato all'omonimo comando Windows per l'esecuzione di un gran numero di funzioni di rete. L'obiettivo dichiarato è quello di sostituire progressivamente la miriade di utility e comandi di supporto a Samba con le opzioni incorporate all'interno dell'unico comando net. Si tratta di una scelta interessante, che permette di semplicare la gestione del sistema con un numero limitato di istruzioni da linea di comando.
Samba 3 può essere a tutti gli eetti considerato una implementazione lib- era e gratuita del protocollo SMB/CIFS, con esso, una macchina GNU/Linux, può accedere alle risorse condivise di un elaboratore MS-Windows ma anche mettere a disposizione proprie risorse a clienti MS-Windows o GNU/Linux.
Più in dettaglio ecco quali sono i servizi oerti da Samba: :
• server per orire la condivisione di le system e stampanti;
• client per l'accesso a risorse NetBIOS su macchine Unix, MS-Windows, Novell remote;
• master browser (sia locale che di dominio);
• server WINS (Windows internet name service);
• server per l'autenticazione di clienti di un dominio MS-Windows.
1.2 Caratteristiche
Le caratteristiche principali oerte da Samba sono:
Integrazione In molti scenari sono utilizzati ambienti eterogenei con serv- er e client di diversa natura. E spesso è necessario far dialogare questi sistemi.
Molto spesso inoltre i client sono Windows, mentre i server sono di dieren- ti tipologie Unix, Novell, NT eccetera. Samba permette di integrare server GNU/Linux, BSD, o Unix (e altri) in una rete in cui si deve convivere con client MS Windows senza dover installare software aggiuntivo sui client. Il server Samba viene percepito come un server Windows NT e consente di condividere le e stampanti su una rete Windows senza troppi sforzi. Samba è inoltre ottimo come server di stampa, accopiato a CUPS o lpr permette anche un sistema essibile e avanzato di accounting delle stampe, ad esem- pio consentendo a macchine Windows di utilizzare stampanti installate su macchine *niX o viceversa a macchinue *niX di stampare su risorse collegate a sistemi Windows.
Costo Samba viene utilizzato spesso per permettere ai client Windows di
vedere i le residenti su sistemi tipo *niX e permettere in questo modo alle piattaforme Windows di interoperare con le piattaforme server. Samba viene però anche sempre più utilizzato in sostituzione di File Server NT o Novell in quanto permette di ridurre sensibilmente i costi di licenza per l'accesso dei client e ottenere un'alta adabilità del servizio. Infatti molti sistemi le server/print server/domain controller proprietari richiedono oltre al paga- mento di una licenza d'uso per il server in sè, anche di licenze di connessione per ogni client che deve utilizzare tale server (CAL). Molte aziende possono permettersi di impiegare un server basato sull'accoppiata Linux/Samba, in quanto le eettive necessità centralizzate sono generalmente limitate. Non bisogna dimenticare che gran parte dei server NT o 2000 vengono utilizzati solamente per le loro funzionalità di le server. In pratica si sfrutta il sistema come contenitore centralizzato dove salvare i documenti di lavoro e le cartelle personali degli utenti, impiegando poi un sistema di storage per eseguire il salvataggio di tutta l'informazione aziendale in un colpo solo.
Queste funzionalità sono estremamente preziose per la miriade di PMI che popolano lo scenario industriale italiano, anche se in n dei conti si tratta di necessità tecnologiche molto semplici [9].
L'economicità di un sistema GNU/Linux riguarda soprattutto i requisiti
hardware richiesti: GNU/Linux gira anche su hardware cosiddetto ob-
soleto. Ciò si traduce in un risparmio economico poichè non sono neces-
sari frequenti aggiornamenti hardware. È stimato, infatti, che la vita me-
dows richiede in media il raddoppio delle risorse hardware di versione in versione)[10].
Flessibilità Samba facilita le operazioni di consolidazione di più servizi su un singolo server. E' possibile anche congurare più istanze di Samba su un server che abbia più interfacce di rete. Non solo, Samba è già predisposto per IP failover
6, ed è estremamente essibile e dotato di un numero eccezionale di opzioni con cui ottimizzare il proprio server e congurarlo per fare le cose come più aggradano. Inoltre già dalla versione 2.2, Samba supporta dierenti sistemi di autenticazione e salvataggio dei dati degli utenti. Si possono mantenere gli account degli utenti sul classico le smbpasswd, o sul più modermo ldap o tdbsam. Non dimentichiamo inoltre winbind un demone che permette di utilizzare sulla macchina *nix gli utenti impostati su di un dominio NT.
Prestazioni Le attuali versioni di Samba sono un ottimo sostituto per un server Windows che fornisce condivisione di le e stampanti. Come di- mostrano i test comaparativi tra Samba e Windows 2000 server eettuati da PCmag [8]e Hp [7]. Il test è stato eetuato su 3 diversi diversi tipi di hardware:
fascia bassa Micron ClientPro XLU Pentium II/233 128MB Ram fascia media Dell Dimension XPS T550 550 Mhz PIII 256 MB Ram fascia alta Dell Dimension 4100, 1Ghz p3 512 Mb Ram
Tutte le macchine erano equipaggiate con HardDisk Ide e schede rete 3Com 3C905C. Per i test è stata utilizzata la suite di test Netbench 7.02, conguran- do 30 client per generare suciente traco di rete. Su entrambe le macchine Windows e Linux sono stati eliminati i servizi non necessari (server web serve ftp) inoltre sulla macchina Linux è stato ricompilato il kernel per eliminare i moduli non necessari. Sui due tipi di sistema non sono state eseguite parti- colari ottimizzazioni benchè entrambi possiedano di default impostazioni che permettono una buona gestione del cahing dei le. Anche causa del compor- tamento più aggressivo di Samba per quanto riguarda il caching dei le si può notare come nel graco del tempo medio di risposta (gura 1.2) a parità di hardware ora prestazioni migliori del concorrente. Nell'altro graco (gura 1.1) possiamo notare che servendo pochi client Samba e Windows presentino valori di throughput praticamente uguali mentre al crescere del numero di Host samba fornisce prestazioni migliori.
6
Se un server non risponde più alle richieste, può essere rimpiazzato da un altro che ne
acquisisce l'Ip, il tutto in maniera trasparente rispetto agli altri servizi di rete.
Figura 1.1: Troughput
Figura 1.2: Response time
In questo paragrafo verrà analizzato il funzionamento di una generica ses- sione Samba e verranno introdotti alcuni concetti fondamentali di Windows Networking utili a comprendere il funzionamento della sessione stessa.
1.3.1 Concetti di Windows Networking
Nella sua forma più semplice il sitema di Windows Naming è basato su un modello di tipo broadcast. Un sistema che vuole partecipare ad una network Windows dionde il suo nome Netbios a tutti gli altri host della subnet in cui è inserito. Se nessun altro sistema si oppone il nome è associato alla macchina e si può procedere al suo utilizzo.
Per identicare un sistema dal nome, il nome richiesto è mandato in broadcast per tutta la rete e il sistema che possiede il nome è l'unico a rispondere.
Samba è in grado di fornire e partecipare a questi servizi sia per quanto riguarda registrazione del nome sulla rete che per la ricerca di altri nomi.
NetBios Name Service è fornito dal componente nmbd, che permette ad una
*nix box di registrare il suo nome ed essere riconosciuta dai sistemi Windows.
La suite Samba include anche l'utility nmblookup che ha funzionalità simili a quelle che nslookup ore per il Domain Naming Service. Grazie a questo compontente si può ricavare l'indirizzo associato ad un nome netbios.
Ogni sistema Windows può avere più di un nome Netbios associato. Un nome identica l'host, un'altro nome può essere associato all'utente loggato sul sitema.
Il sistema di registrazione dei nomi tramite broadcast funziona su reti piccole e su una singola subnet, ma genera molto traco e non è scalabile.
Il browsing di una rete permette ad un utente di vedere i nomi degli host sulla rete. Per fare ciò, l'host in questione deve aver ricevuto e memorizzato tutte le corrispondenze dei nomi della rete e host connessi.
Per questo motivo sono stati classicati gli host in master browser e name server. Per supportare il browsing della rete si usano i master browser, che mantengono in cache le informazioni di broadcast degli altri sistemi. Quando un sistema vuole visitare le Risorse di rete non fa altro che interrogare il master browser, senza generare traco superuo. Il master browser è scelto tramite un processo di elezione. Se il master browser è riavviato o risulta non disponibile, si ha un elezione tra le workstation rimanenti per il ruolo di master browser. Samba può essere usato come master browser in una sessione di Windows networking, puo essere congurato sia per forzare una elezione di un browser sia per partecipare ad essa.
L'utilizzo di un master browser dipende dall'archittetura della rete infatti
è noto che il broadcast non funziona attraverso router e subnet dierenti.
Per funzionare attraverso router, il servizio di name service ha bisogno di un name server dedicato detto WINS.
Il Windows Internet Naming Service (WINS) [11] serve a trasformare i nomi dei computer in indirizzi IP per l'instradamento e la consegna dei pacchetti. WINS è studiato per arontare il problema dell'individuazione di risorse di rete in ambiente TCP/IP attraverso la congurazione e il man- tenimento automatici delle tabelle di mappatura dei nomi NetBIOS e degli indirizzi IP, svolgendo insieme funzioni elementari come impedire la dupli- cazione di nomi in rete. WINS è un servizio complemetntare per il DHCP e possiede una strumentazione completa e centralizzata per l'amministrazione e la congurazione di server WINS, tabelle nomi statiche e informazioni di duplicazione.
Anche se nella rete è attivo un servizio Wins, i client continuerano a interrogare il master browser. Quest'ultimo si rivolgerà al server Wins per la risoluzione dei nomi, ripsondendo alle richieste dei client.
Samba può quindi essere impostato per usare un Wins server pre-esistente, può essere integrato in una rete Microsoft come una normale workstation, senza assolvere funzioni speciali. Samba alternativamente può anche fun- zionare in sostituzione di un server Wins, tutti i vantaggi descritti per l'af-
dabilità di GNU/Linux come master browser valgono anche se si utilizza come server wins.
1.3.2 File sharing & print sharing
La maggior parte dei modelli di le sharing che sono oerti nei sistemi Win- dows sono disponibili con Samba. Grazie al supporto di linux per le home directory, queste utlime possono essere esportate e accessibili dai client Win- dows, gli utenti che si loggano al sistema hanno accesso alla loro directo- ry privata. Le condivisioni di Windows hanno principalmente due tipi di controllo di accesso:
• livello condivisione: a ogni disco, cartella, le o stampante condivisa viene assegnata una password
• livello utente: ad ogni risorsa condivisa si può assegnare un elenco di utenti che vi possono accedere
Samba supporta entrambi i tipi di controllo di accesso, l'utente non nota quindi nessuna dierenza rispetto a un server Windows e non necessita di alcun software aggiuntivo da installare sui client.
Samba ore inoltre l'abilità di memorizzare i proli degli utenti all'interno
delle condivisioni, grazie a ciò un utente può cambiare workstation e avere
con lui le stesse impostazioni e preferenze (desktop, menu, ecc.).
Oltre che alla condivisione di le Samba, può essere usato per la condivisione delle risorse di stampa. Samba fornisce quindi l'accesso alle macchine Win- dows delle stampanti Unix. Alcuni sistemi Windows devono inoltre essere in grado di scaricare i driver di stampa dal server che condivide la stampante.
Tutto ciò può essere fatto senza lavoro aggiuntivo dell'utente ma con un piccolo setup iniziale. Se il sistema di stampa *niX è aggiunto ad alcuni pac- chetti di stampa postscript (come Ghostscript) allora è possibile per i sistemi Windows usufruire di servizi che altrimenti non avrebbero a disposizione.
Per gli utenti unix che vogliono stampare su macchine Windows è a disposizione l'utility smbprint, questa può essere chiamata dall'utente o usata come ltro.
Cenni sulla stampa Windows
Windows in origine fu sviluppato per un utilizzo da parte di un singolo utente, ciò signica che per prima venne sviluppata una printig API (Apli- cation Program Interface) locale. Sucessivamente venne progrettato un pro- tocollo per fornire un sistema di stampa remoto tramite la API locale. In- dubbiamente la stampa Windows è molto più semplice da usare per utenti e programmatori ma presenta alcuni problemi.
Ci sono pricipalmente quattro diversi modi per stampare in Windows:
1. Printing spooling path;
2. Win 3.X printing system;
3. Win 9X point-and-print path (RAP calls);
4. Windows NT/2000/XP printign system (DCE/RPC ).
Printing spooling path Questo è il sistema di stampa in origine utiliz- zado dal DOS, il cui meccanismo consiste nell'aprire una periferica (LPT ad esempio) e inviare al suo interno dei dati. Questo sistema di stampa può essere utilizzato da remoto tramite SMBsplopen, fornendo però solo un rudimentale supporto per il monitoraggio della coda di stampa. Tramite il printing spooling path non è introdotto il concetto di driver nel sistema operativo, ciascun applicativo utilizza un driver a se stante per l'uso della periferica.
Windows 3.x printing system Windows 3.x è stata la prima versione di
Windows ad avere incorporato il concetto di driver indipendenti dall'appli-
cazione. Questi driver devono essere installati su ciascun client (il concetto
di client che scarica automaticamente i driver fu introdotto con win9x), og- gigiorno la creazione delle virtual printer (code di stampa) tramite API è alla base delle applicazioni Windows.
Windows 9x printing system Windows 9x ha la capacità di scaricare au- tomaticamente al momento del setup i le del driver per una stampante colle- gata. I client Windows 9x usano le chiamate RPC (Remote Procedure Call) per ottenere le informazioni sul driver da scaricare, questo include il percor- so da cui prelevare i driver, e le informazioni sulla stampante (nome, col- locazione,commenti ecc). Rispetto all'implementazionde delle printing API di Windows 3.1 sono state aggiunte nuove funzionalità che consentono un maggiore controllo delle code di stampa (come pausa, cancellazione, pulizia coda di stampa).
Windows NT/2000/XP printing system Windows NT/2000/XP han- no un metodo di stampa completamente dierente, dalle precedenti versioni.
• delle chiamate SMB aprono la connessione alla condivisione \\SPOOLSS creando una pipe;
• delle chiamate DCE/RPC sono eettuate alla pipe SPOOLSS per aprire la connessione alla stampante, creare nuova stampante, aggiungerne i driver.
Tramite questa implementazione tutto ciò che può essere fatto localmente utilizzando le chiamate alle Printing API, può essere eseguito da remoto. Il tallone di achille di questa struttura è il sistema di spooling (notoriamente instabile) al quale arrivano le chiamate delle API[15].
Tutte le comunicazioni di stampa eettuate usando DCE/RPC funzio- nano tramite protocollo SMB e seguono il seguente schema:
1. un Print Job è inviato nella coda di stampa;
2. dei dati vengono inseriti nel Job;
3. viene avviato il lavoro di stampa.
Implementazione della stampa Windows in Samba
Per essere competitivo con l'ambiente Windows sul piano della stampa, Sam- ba deve implementare tutti e quattro i sistemi sopra elencati. Ecco elencate alcune della maggiori dicoltà nell'implementazione di questa struttura.
• l'impelementazione DCE/RPC è terribilmente complessa;
dati formattati non correttamente oppure dati inattesi, va irrimedia- bilmente in crash;
• in Win NT4.x i driver venivano utilizzati in Kernel mode, in Windows 2000 vengono utilizzati in User Mode;
• non c'è protezione dalle race condition, ossia se due amministratori installano dei driver contemporaneamente ciascuno può fare danno all'altro.
Per far fronte alle problematiche sopra esposte, venne creata una sezione dedicata nel progetto Samba chiamata Samba Printer Code la quale ore alcune caratteristiche molto interessanti:
• fornisce la possibilità di download dei driver;
• fornisce possibilità di immagazzinamento remoto per dati di stampa;
• consente il mapping tra le stampanti Windows le code di stampa Unix.
Samba Printer Code utilizza un database interno tdb (technical database) per la memorizzazione delle informazione quali ad esmpio la capacità della stampante. Conseguentemente ad ogni arrivo di job nella coda di stampa una nuova entry è aggiunta nel database. Il passo sucessivo del processo di stampa consiste nel memorizzare i dai all'interno di un le temporaneo. Per rilevare lo stato della stampante le macchine Windows eseguono il polling, se venisse creata un istanza di lpq sulla macchina unix per ogni richies- ta si otterrebbe una notevole diminuzione delle prestazioni. Memorizzando nel database tdb le informazioni sull'ultimo stato della coda si può evitare l'esecuzione di numerosi lpq sostituendoli con interrogazioni alla base dati.
Purtroppo allo stato attuale dello sviluppo solo CUPS implementa ap- pieno le chiamate API, gli altri si limitano a nascondere sotto le interfacce i classici strumenti (lpq, lprm, lpc).
Per concludere la trattazione della stampa tramite Samba ecco alcuni dei principali obiettivi che gli sviluppatori si sono posti:
• migliorare e arricchire le Unix printig API;
• migliorare i driver per le stampanti inkjet, (le stampanti con emulazione postscript sono supportate abbastanza bene).
1.4 Analisi pacchetti
In questo paragrafo verranno analizzate le principali caratteristiche dei pro-
tocolli Smb, Netbios e Tcp/Ip e la loro collocazione all'interno dello stack
Figura 1.3: stack tcp e posizione protocollo smb
del modello protocollare TCP/IP (g1.3)sui quali si basa il funzionamento di Samba.
1.4.1 Netbios e Netbeui
I protocolli NetBIOS ed NetBEUI [13] sono stati sviluppati rispettivamente nel 1983, dalla Sytek per IBM, e nel 1985 da IBM stessa. Ancora oggi restano molto diusi nei sistemi Microsoft, in virtù dei loro pregi nell'ambito delle reti locali.
Con l'introduzione di Token Ring, IBM nel 1985 denì delle estensioni a NetBios (NetBIOS Extended User Interface NetBEUI) che permettevano di appoggiarsi ad un data-link 802.2 (Token Ring o Ethernet). Microsoft ha in- iziato ad usare NetBEUI come protocollo di rete su Windows for Workgroup (Windows 3.1) e poi su tutte le versioni successive ma, al contempo, con la diusione di Novell IPX e di IP, si è iniziato a veicolare NetBios anche su IPX e IP, oltre che su altri protocolli.
All'epoca, l'obiettivo era infatti quello di creare un protocollo su misura per le LAN di dimensioni contenute (no a circa 200 nodi), quindi doveva essere piccolo, semplice, veloce e doveva permettere di assegnare nomi umani alle risorse, invece dei complessi indirizzi usati dal TCP/IP. Inoltre NetBIOS è stato progettato perchè usasse intensamente i broadcast (messaggi uno a tutti), piuttosto che interrogare un'entità centralizzata.
In questa logica, un computer che in seguito all'accensione voglia regis-
trarsi con il proprio nome NetBIOS come nuovo nodo, deve inviare appositi
messaggi broadcast per farsi accettare come nuovo nodo attivo. Se il nome è
già usato, il precedente possessore di quel nome deve inviare un messaggio di
risposta per respingere la scelta. Se invece un computer vuole localizzare un
nodo preesistente, invierà ancora altri broadcast nel tentativo di contattare
quello specico nodo. Il computer remoto è sempre tenuto a rispondere ai
computer potranno comunicare senza usare broadcast.
Per essere più precisi, l'implementazione del NetBEUI nei sistemi Mi- crosoft dierisce dalle ultime versioni del NetBEUI standard (NetBEUI 3.0) per alcuni aspetti, pur preservandone la compatibilità. Ad esempio, il Net- BEUI di Microsoft, chiamato NBF (NetBIOS Frame), presenta alcune miglior- ie rispetto al protocollo standard, ed invece di interfacciarsi con i livelli supe- riori tramite il consueto NetBIOS, utilizza un'altra interfaccia più essibile, chiamata TDI, Transport Driver Interface, cioè interfaccia del dispositivo di trasporto.
I nomi usati da NetBIOS sono fatti di 16 caratteri alfanumerici e possono essere di due tipi:
• nomi unici: possono essere usati per identicare al più una sola risorsa in rete
• nomi di gruppo: che invece si associano a più nomi unici
In ambiente Windows, un nome unico può individuare un computer della rete, un utente loggato su un sistema della rete, sia anche un servizio oerto da un computer (una certa applicazione o una funzionalità particolare).
Dato che NetBIOS non dispone dei numeri di porte, come quelle del TCP/IP, per poter identicare queste funzionalità viene riservato il sedicesimo carat- tere, che diventa un susso e quindi limita il nome a soli 15 caratteri. Le comunicazioni sono di tre tipi: sessioni, datagrammi, broadcast. Le sessioni si usano per scambiare con un altro nodo rilevanti quantità di dati con rile- vamento e correzione d'errore. I datagrammi per inviare ad uno o più nodi (quando il destinatario è un gruppo) messaggi di dimensioni modeste ma senza dover stabilire una sessione. I broadcast inne, si usano per comuni- care messaggi di dimensioni modeste a tutti i nodi in ascolto. In sessione è possibile inviare no a 64 Kbyte di dati per messaggio. Con i datagrammi si è limitati a 512 byte per messaggio ed inoltre non si ha la garanzia che i dati arrivino. Tuttavia, negli ambiti in cui queste limitazioni non costituis- cono un problema insormontabile, lavorare con i datagrammi rimane molto semplice e veloce.
Per distinguere il traco in una stessa rete è stata sviluppata un'apposita funzionalità, chiamata NetBIOS Scope ID. Si tratta di una stringa di carat- teri aggiunta alla ne del nome. Due computer devono avere lo stesso scope ID per comunicare.
I limiti di Netbios over Netbeui La diusione di Internet ha messo
subito in luce quali sono i limiti di NetBIOS e del suo supporto NetBEUI
quando la rete cresce di dimensioni. Tralasciando problemi seri ma non
insormontabili, come il degrado prestazionale sulle WAN legato all'uso dei
broadcast, rimangono tuttavia altri problemi di non facile soluzione: innanz- itutto l'unicità nomi. Dato che due computer non possono usare due nomi uguali nella stessa rete, bisognerebbe trovare un nome diverso per ogni com- puter connesso, cosa non banale in una rete geograca. In secondo luogo, a causa dela non gerarchicità dei nomi, NetBEUI non permette il routing.
Cioè, dato un nome NetBIOS, è impossibile sapere quale sia la strada per raggiungerlo. Il problema in questo caso risiede nel fatto che i nomi NetBIOS non contengono alcuna informazione gerarchica. In principio infatti il Net- BIOS fu pensato per reti semplici e non strutturate a dierenza di TCP/IP.
Quando la rete diventa Internet, è immediato rendersi conto che un indi- rizzo IP sia molto più comodo e molto più versatile di un nome normale.
Un ultimo problema, forse il più importante, è che i router di Internet non permettono il propagarsi dei broadcast, utili al protocollo NetBIOS quando cerca di localizzare un nodo.
Per evitare che il NetBIOS aondasse, tornò molto comodo a Microsoft il fatto di poter abbinare l'interfaccia NetBIOS ad un protocollo molto più
essibile del NetBEUI, come il TCP/IP, e limitando l'impiego del NetBEUI nell'ambito delle reti locali tra sistemi Microsoft. In questo modo ogni mes- saggio elaborato da NetBIOS viene incapsulato in un messaggio TCP/IP, che non sore delle limitazioni di cui parlavamo prima. Chiaramente sor- gono nuove complicazioni in seguito alle quali si ebbe la creazione dei servizi WINS (derivante dal servizio DNS diuso in Internet) e la creazione del le LMHOSTS (derivante da HOSTS)
7.
Netbios over Tcp/Ip Per rendere possibile l'interfacciamento tra Net- BIOS e TCP/IP è necessario che NetBIOS usi i nomi di host, mentre TCP/IP deve usare indirizzi. Ecco che nasce il NetBIOS over TCP/IP, chiamato anche NBT, descritto negli RFC 1001 e 1002 [14]. Esso è in grado di lavorare su reti geograche, basandosi su associazioni tra nomi NetBIOS e indirizzi IP fornitegli dall'esterno.
Iniziamo col dire che i nodi, detti NBT, possono operare seguendo quattro modalità standard:
b-nodi (nodi broadcast) usano broadcast sia per la registrazione che per la risoluzione dei nomi in indirizzi IP. I b-nodi sorono ancora del problema dei broadcast di NetBIOS: se i nodi sono separati da router, non riusciranno a contattarsi.
p-nodi (nodi punto-punto) scoprono l'IP della risorse interrogando con richieste unicast un server WINS noto. WINS, (Windows Internet
7