[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico] [volume] [parte]
Questo capitolo nasce da esperienze dell'autore fatte nel 1997 e, oltre che essere obsoleti, gli esempi mostrati ignorano completamente i problemi legati alla sicurezza. In tal senso, eventualmente, questo capitolo può essere utile solo come punto di inizio per lo studio del protocollo SMB. |
SMB, o Session message block, è il protocollo di condivisione di risorse conosciuto normalmente come NetBIOS o LanManager. Il protocollo NetBIOS può utilizzare diversi tipi di protocolli di trasporto: NetBEUI, IPX/SPX e TCP/IP. In pratica, viene incapsulato all'interno di uno di questi.
È importante non confondere NetBIOS con NetBEUI: il primo è il protocollo di condivisione di risorse, il secondo è un protocollo di trasporto. |
GNU/Linux è in grado di offrire servizi NetBIOS attraverso il protocollo di trasporto TCP/IP e questo per mezzo del gruppo di programmi denominato Samba. (1) La limitazione di GNU/Linux nell'utilizzo del trasporto TCP/IP per questo scopo, deve essere tenuta presente nella configurazione degli elaboratori con cui si vuole comunicare attraverso NetBIOS (il trasporto NetBEUI non va bene).
Samba fa ormai parte della maggior parte delle distribuzioni GNU/Linux. In questo capitolo si fa riferimento a una versione di Samba installata attraverso una distribuzione, in modo tale che la collocazione dei file sia conforme alle indicazioni del file system standard di GNU/Linux.
Il protocollo NetBIOS viene usato per la condivisione di risorse. Quando lo si utilizza, è necessario identificare l'elaboratore che offre il servizio e la particolare risorsa desiderata. Sotto questo aspetto, con NetBIOS non si parla di nodi, ma direttamente di serventi, clienti o peer.
Il nome che identifica una risorsa di un servente particolare, ha il formato seguente:
\\servente\risorsa
Il nome del servente e quello della risorsa non tengono conto della differenza tra lettere maiuscole e minuscole.
Per esempio, \\TIZIO\VARIE rappresenta la risorsa VARIE dell'elaboratore TIZIO.
Quando si utilizza un servente SMB, come Samba, all'interno di un sistema Unix, i nomi di dominio utilizzati per il trasporto IP non hanno niente a che vedere con i nomi NetBIOS, anche se normalmente coincidono.
Quando si deve indicare un indirizzo del genere con una shell Unix, si ha quasi sempre la necessità di proteggere le barre oblique inverse da una diversa interpretazione. Lo si vedrà meglio negli esempi descritti più avanti.
Come accennato, Samba comunica con NetBIOS attraverso il protocollo TCP/IP. Per questo, il file /etc/services
deve contenere le righe seguenti.
netbios-ns 137/tcp nbns # NetBIOS Name Service netbios-ns 137/udp nbns netbios-dgm 138/tcp nbdgm # NetBIOS Datagram Service netbios-dgm 138/udp nbdgm netbios-ssn 139/tcp nbssn # NetBIOS session service
Un servente SMB (o NetBIOS) permette di offrire la condivisione di parte del proprio file system, come avviene con il protocollo NFS, e dei propri servizi di stampa. In pratica, esattamente quello che si può fare con MS-Windows 3.11 e con le edizioni successive.
I servizi sono forniti da due demoni: smbd e nmbd. Questi utilizzano il file smb.conf
, collocato normalmente nella directory /etc/
, per la loro configurazione. smbd e nmbd possono essere avviati direttamente dalla procedura di inizializzazione del sistema (Init), oppure possono essere messi sotto il controllo del supervisore dei servizi di rete. Nel primo caso, possono essere avviati nel modo seguente:
#
smbd -D
#
nmbd -D
Se invece si intende utilizzare il controllo del supervisore dei servizi di rete, devono essere presenti le righe seguenti nel file /etc/inetd.conf
.
netbios-ssn stream tcp nowait root /usr/sbin/smbd smbd netbios-ns dgram udp wait root /usr/sbin/nmbd nmbd
nmbd [opzioni]
È il demone del servizio necessario per la gestione del name server netbios, per le connessioni SMB (Samba). A seconda di come è gestita la distribuzione GNU/Linux che si utilizza, potrebbe essere avviato direttamente dalla procedura di inizializzazione del sistema, oppure dal supervisore dei servizi di rete (capitolo 135).
-D
Viene avviato come demone. Se non si usa questa opzione, il programma nmbd funziona in modo normale. Quando si utilizza nmbd in uno script della procedura di inizializzazione del sistema, si utilizza questa opzione.
smbd [opzioni]
È il demone del servizio necessario per ricevere connessioni SMB (Samba). A seconda di come è gestita la particolare distribuzione GNU/Linux che si utilizza, potrebbe essere avviato direttamente dalla procedura di inizializzazione del sistema, oppure dal supervisore dei servizi di rete (capitolo 135).
-D
Viene avviato come demone. Se non si usa questa opzione, il programma smbd funziona in modo normale. Quando si utilizza smbd in uno script della procedura di inizializzazione del sistema, si utilizza questa opzione.
Il protocollo NetBIOS viene usato spesso per condividere dischi e stampanti senza alcun controllo sugli utenti. Perché possa esistere questa possibilità anche con Samba, è necessario definire un utente fittizio che verrà utilizzato come riferimento quando l'accesso avviene per servizi pubblici, o anonimi.
Per questo, conviene aggiungere manualmente al file /etc/passwd
una riga simile a quella seguente:
guestpc::499:100::/dev/null:/dev/null
Come si può vedere, si tratta di un utente senza parola d'ordine, senza directory personale e senza shell.
È bene tenere presente che questa situazione, eventualmente, potrebbe essere pericolosa per la sicurezza del sistema in generale e, comunque, il fatto di mettere a disposizione un accesso del genere manifesta l'intenzione di non curarsi di questi problemi. |
Il nome guestpc è scelto in base al valore predefinito da Samba per questo scopo. In altre situazioni potrebbe anche corrispondere al tipico utente nobody. Il numero usato come UID va scelto in modo che non coincida con altri contenuti all'interno del file /etc/passwd
(a meno che si sappia ciò che si intende fare); per quanto riguarda la scelta del GID (il numero del gruppo), questo dipende dalle particolari strategie adottate nella gestione degli utenti.(2)
Così come si utilizza un utente particolare per gli accessi non controllati, è opportuno predisporre una directory a disposizione di tutti, attribuendole tutti i permessi necessari. Trattandosi di uno spazio nel file system abbinato a un utente, anche se fittizio, è ragionevole collocare i file e le directory da condividere pubblicamente a partire da /home/samba/
.
#
mkdir /home/samba
#
chmod a+rwx /home/samba
Per soddisfare le richieste di stampa, è necessaria la presenza di una coda, costituita da una directory. Normalmente si tratta di /var/spool/samba/
. Anche in questo caso, non si devono porre restrizione nei permessi.
#
mkdir /var/spool/samba
#
chmod a+rwx /var/spool/samba
La configurazione attraverso /etc/smb.conf
è delicata. Negli esempi seguenti si propone il minimo necessario a condividere pubblicamente uno spazio su disco e una stampante. Solitamente, le distribuzioni propongono un file più completo e ben commentato.
; ===================================================================== ; /etc/smb.conf ; ===================================================================== ; [global] allow hosts = 192.168.1.0/255.255.255.0 workgroup = UFFICIO guest account = guestpc printing = bsd printcap name = /etc/printcap [public] comment = directory pubblica path = /home/samba public = yes writable = yes printable = no browseable = yes [lp] comment = stampante pubblica path = /var/spool/samba public = yes writable = no printable = yes browseable = yes
La sezione global è speciale e serve per stabilire i valori predefiniti per tutte le altre sezioni.
allow hosts = indirizzo_ip/maschera
Permette di definire i nodi che possono accedere ai servizi di Samba. In questo caso si concede a tutta la sottorete 192.168.1.0 di accedere.
workgroup = nome_del_gruppo
Permette di definire il nome del gruppo di lavoro. Il valore predefinito, nel caso non sia indicato, dovrebbe essere WORKGROUP a seconda di come è stato compilato il sorgente.
guest account = utente_guest
Permette di definire il nome di un utente generico, al quale è consentito utilizzare i servizi pubblici. Questo utente era stato aggiunto al file /etc/passwd
(385.3.3).
printing = bsd
Assegnando a questa variabile il valore bsd si informa Samba che il sistema di stampa utilizza il programma lpr.
printcap name = file_printcap
Il nome del file /etc/printcap
, completo del percorso.
Si tratta della definizione di un servizio denomianto public creato per permettere l'accesso indiscriminato alla directory /home/samba
.
comment = commento
Si tratta della descrizione del servizio.
path = percorso_della_directory
È il percorso della directory pubblica. Perché possa essere disponibile veramente a tutti, occorre che i suoi permessi di accesso consentano tutte le operazioni a tutti gli utenti.
public = {yes|no}
Permette di definire se si tratta o meno di un servizio pubblico.
writable = {yes|no}
Permette di definire se gli utenti di questo servizio possono accedere anche in scrittura.
printable = {yes|no}
Permette di definire se si tratta di un servizio di stampa. In questo caso, evidentemente no.
Si tratta della definizione di un servizio denomianto lp creato per permettere l'accesso indiscriminato alla stampante omonima (lp) del file /etc/printcap
. In pratica rende pubblica, attraverso Samba, questa stampante.
path = percorso_della_directory
Definisce il percorso della directory che Samba userà per accodare le stampe. Non si deve confondere questa directory con quelle già utilizzate con il sistema di stampa normale, questo perché si deve trattare di una directory accessibile a tutti.
public = {yes|no}
Permette di definire se si tratta o meno di un servizio pubblico.
writable = {yes|no}
Permette di definire se gli utenti di questo servizio possono accedere anche in scrittura. In questo caso no, trattandosi di un servizio di stampa.
printable = {yes|no}
Permette di definire se si tratta di un servizio di stampa.
Per controllare la correttezza sintattica del file di configurazione /etc/smb.conf
si può utilizzare il programma testparm.
$
testparm
[Invio]
Si dovrebbe ottenere un elenco suddiviso in due parti. Segue solo la prima parte.
Load smb config files from /etc/smb.conf Processing section "[public]" Loaded services file OK. Press enter to see a dump of your service definitions
Premendo [Invio] si ottiene il resto delle informazioni che riguardano la configurazione, così come è stata interpretata, completa di tutti i valori predefiniti.
Il passo successivo è quello di controllare che il servizio sia funzionante effettivamente. Se l'elaboratore che si utilizza e sul quale è installato Samba, si chiama dinkel.brot.dg
, si può utilizzare il programma smbclient nel modo seguente:
$
smbclient -L dinkel.brot.dg
[Invio]
Si dovrebbe ottenere il risultato seguente:
Added interface ip=192.168.1.1 bcast=192.168.1.255 nmask=255.255.255.0 Server time is Wed Apr 9 10:47:46 1997 Timezone is UTC+1.0 Domain=[UFFICIO] OS=[Unix] Server=[Samba 1.9.16p11] Server=[dinkel] User=[daniele] Workgroup=[UFFICIO] Domain=[UFFICIO] Sharename Type Comment --------- ---- ------- IPC$ IPC IPC Service (Samba 1.9.16p11) lp Printer stampante pubblica public Disk directory pubblica This machine has a browse list: Server Comment --------- ------- DINKEL Samba 1.9.16p11 This machine has a workgroup list: Workgroup Master --------- ------- UFFICIO DINKEL
Attraverso smbclient è possibile, tra l'altro, conoscere la situazione di un servente SMB. In particolare è importante osservare il nome secondo NetBIOS, ovvero quello indicato come servente. Nell'esempio visto in precedenza si otteneva tra l'altro la riga seguente:
Server=[dinkel] User=[daniele] Workgroup=[UFFICIO] Domain=[UFFICIO]
Ecco che in questo esempio, il nome NetBIOS dell'elaboratore è dinkel. La coincidenza con il nome utilizzato per il trasporto IP è dovuta a Samba che utilizza la parte finale del nome di dominio per questo. Il punto è però che tale assunto non deve essere considerato la regola; infatti, questo nome può essere cambiato.
smbstatus [opzioni]
smbstatus è un programma molto semplice che permette di conoscere le connessioni in corso al servente SMB locale. Di solito non si usano opzioni.
$
smbstatus
[Invio]
Samba version 1.9.16p11 Service uid gid pid machine ---------------------------------------------- public guestpc users 148 roggen (192.168.1.2) Wed Apr 9 15:05:44 1997 No locked files
In questo caso, c'è un solo accesso al servizio pubblico public da parte dell'elaboratore roggen.
Samba consente di accedere a un servente SMB, ovvero a un elaboratore che offre servizi NetBIOS. Ciò viene fatto fondamentalmente attraverso il programma smbclient che si comporta in modo simile a un cliente per FTP, anche se non si tratta proprio della stessa cosa.
smbclient servente_e_servizio [parola_d'ordine] [opzioni]
smbclient -L host
smbclient è il programma attraverso cui è possibile connettersi a un elaboratore che offre servizi NetBIOS attraverso il protocollo TCP/IP. Potrebbe trattarsi di MS-Windows 95/98/NT/2000 o anche di un altro elaboratore GNU/Linux che gestisce un servente SMB con Samba.
In linea di massima, si può vedere questo programma come una sorta di cliente FTP, con la differenza che si può inviare un file anche a un servizio di stampa. In questo senso, il programma offre normalmente un invito attraverso il quale possono essere impartiti dei comandi. Questo invito è smb \>, dove la barra obliqua inversa rappresenta la directory corrente della risorsa a cui ci si è connessi (in questo caso è la radice).
L'indicazione del servente e della risorsa deve essere fatto nella forma consueta.
\\servente\risorsa
-P
Inizia una connessione a una risorsa di stampa, invece che alla solita risorsa di condivisione di file.
-L host
Permette di ottenere la lista delle risorse ottenibili da un elaboratore determinato. In tal caso, l'elaboratore viene identificato attraverso i comuni indirizzi IP o i nomi di dominio.
-c stringa_di_comando
Permette di indicare una stringa di comando da eseguire. In questo modo si evita la modalità interattiva perché si indica tutto quello che si vuole ottenere nella stringa. per indicare più comandi, questi devono essere separati con il punto e virgola (;).
-I host
Permette di definire l'indirizzo (numero IP, oppure il nome di dominio) dell'elaboratore che concede il servizio. Solitamente, l'indirizzo viene ottenuto attraverso una chiamata circolare (broadcast), ma ci sono situazioni in cui questo sistema non può funzionare, per esempio quando si attraversa un router.
$
smbclient -L dinkel.brot.dg
Richiede e ottiene l'elenco delle risorse SMB disponibili nell'elaboratore dinkel.brot.dg
.
$
smbclient '\\mais\c'
Attiva una connessione con la risorsa di condivisione file c dell'elaboratore identificato dal protocollo NetBIOS con il nome mais. Non avendo indicato esplicitamente la parola d'ordine, questa viene richiesta prima di presentare l'invito di smbclient: se per questa risorsa non è prevista, basta lasciarla in bianco e premere [Invio].
$
smbclient '\\mais\c' -I 192.168.1.15
Come nell'esempio precedente, ma viene specificato l'indirizzo IP del servente.
$
smbclient '\\mais\stampa' -P
Attiva una connessione con la risorsa di condivisione della stampante stampa dell'elaboratore identificato dal protocollo NetBIOS con il nome mais. Non avendo indicato esplicitamente la parola d'ordine, questa viene richiesta prima di presentare l'invito di smbclient: se per questa risorsa non è prevista, basta lasciarla in bianco e premere [Invio].
$
smbclient '\\mais\stampa' "" -P -c "print ./lettera"
Come nell'esempio precedente, attiva una connessione con la risorsa di condivisione della stampante stampa, ma indica già la parola d'ordine, corrispondente alla stringa nulla, e il comando da eseguire: print ./lettera. In questo modo, non inizia alcuna sessione interattiva e il programma procede immediatamente all'invio del file ./lettera
per la stampa.
In precedenza si è visto come realizzare un servente SMB attraverso Samba. Per verificarne il funzionamento attraverso il programma smbclient si può tentare un collegamento. Ciò può essere fatto sia dallo stesso elaboratore che offre il servizio che da un altro.
$
smbclient '\\DINKEL\PUBLIC'
[Invio]
Il nome dell'elaboratore e quello della risorsa sono scritti con lettere maiuscole intenzionalmente, non perché ciò sia necessario, ma perché è possibile. Infatti, molti clienti di servizi NetBIOS sono in grado di utilizzare solo nomi composti da lettere maiuscole.
In base all'esempio di configurazione presentato all'inizio di questo capitolo, il risultato dovrebbe essere quello seguente:
Added interface ip=192.168.1.1 bcast=192.168.1.255 nmask=255.255.255.0 Server time is Wed Apr 9 11:00:13 1997 Timezone is UTC+1.0 Password:
Dal momento che si fa riferimento a un servizio pubblico, non si inserisce alcuna parola d'ordine: si preme semplicemente [Invio].
Domain=[UFFICIO] OS=[Unix] Server=[Samba 1.9.16p11] smb: \>
A questo punto, smbclient si comporta come un programma di FTP. Per terminare l'esecuzione di smbclient è sufficiente scrivere il comando quit.
Per poter integrare il proprio elaboratore GNU/Linux, sul quale è appena stato installato Samba, con una rete che utilizza NetBIOS, occorre che i sistemi operativi di questa rete utilizzino il trasporto TCP/IP.(3)
Di conseguenza, si potrà interagire con sistemi MS-Windows 95/98/NT/2000, mentre per MS-Windows 3.11 e per il Dos occorre aggiungere l'estensione al TCP/IP. Per questo scopo si può visitare eventualmente il seguente indirizzo.
<ftp://ftp.microsoft.com/bussys/clients/>
L'esempio seguente mostra l'interrogazione di un elaboratore su cui gira MS-Windows 95/98/NT/2000 che consente la condivisione del disco C:
e della stampante.
$
smbclient -L roggen.brot.dg
[Invio]
Added interface ip=192.168.1.1 bcast=192.168.1.255 nmask=255.255.255.0 Server time is Thu Apr 10 12:50:16 1997 Timezone is UTC+2.0 Server=[ROGGEN] User=[] Workgroup=[UFFICIO] Domain=[UFFICIO] Sharename Type Comment --------- ---- ------- C Disk HP Printer IPC$ IPC Comunicazioni remote tra processi PRINTER$ Disk
Da quello che si vede nell'elenco dei servizi è possibile utilizzare smbclient per accedere alla risorsa C.
$
smbclient '\\ROGGEN\C'
Dal lato dell'elaboratore roggen.brot.dg
sul quale è in funzione MS-Windows 95/98/NT/2000, è possibile utilizzare le risorse di rete per accedere all'elaboratore GNU/Linux (dinkel.brot.dg
), sempre che questo abbia attivato un servente SMB con Samba.
Dal lato dell'elaboratore GNU/Linux è possibile controllare gli accessi attraverso smbstatus.
$
smbstatus
[Invio]
Samba version 1.9.16p11 Service uid gid pid machine ---------------------------------------------- public guestpc users 148 roggen (192.168.1.2) Wed Apr 9 15:05:44 1997 No locked files
Segue il contenuto delle directory pubbliche così come si vede in figura 385.1 dal punto di vista di GNU/Linux.
total 55 -rwxr--r-- 1 guestpc users 49129 Feb 1 1992 dc.com -rwxr--r-- 1 guestpc users 3236 Feb 1 1992 dc.doc -rwxr--r-- 1 guestpc users 476 Feb 6 20:46 dc.ext -rwxr--r-- 1 guestpc users 261 Dec 12 20:40 dc.mnu
Per utilizzare una stampante condivisa in una rete NetBIOS, si può utilizzare ancora smbclient. Per esempio, si vuole stampare il file esempio
nella stampante condivisa con il nome HP dall'elaboratore roggen.
$
smbclient '\\ROGGEN\HP' -P
Dopo la richiesta della parola d'ordine, che supponiamo sia inesistente, si presenta l'invito di smbclient dal quale è possibile dare il comando di stampa.
print file_da_stampare
Quindi si può uscire dalla sessione di lavoro con smbclient utilizzando il comando quit.
Di certo è un'operazione piuttosto laboriosa, inoltre si aggiunge il problema della scalettatura, cioè la necessità di convertire i file di testo Unix in file di testo Dos.
Se si vogliono utilizzare elaboratori MS-Dos per accedere a elaboratori GNU/Linux che condividono dati attraverso Samba, è necessario acquisire il software msclient dal solito indirizzo di Microsoft.
<ftp://ftp.microsoft.com/bussys/clients/>
Nell'elaboratore Dos, una volta decompressi i file in una directory transitoria, si può avviare il programma SETUP.EXE. È necessario solo il protocollo TCP/IP, mentre il NetBEUI è superfluo e serve solo a ridurre ulteriormente la scarsa memoria a disposizione. È anche sufficiente utilizzare il cosiddetto redirector di base.
Solitamente, il cliente Microsoft viene installato in C:\NET
Al suo interno sono disponibili alcuni file di configurazione .INI
, secondo la convenzione normale di MS-Windows. Tutto, o quasi, è configurabile attraverso il programma SETUP.EXE, anche se resta la possibilità di modificare direttamente questi file.
Quello che segue è un esempio del file PROTOCOL.INI
.
[network.setup] version=0x3110 netcard=ms$ne2clone,1,MS$NE2CLONE,1 transport=tcpip,TCPIP lana0=ms$ne2clone,1,tcpip [TCPIP] NBSessions=6 SubNetMask0=255 255 255 0 IPAddress0=192 168 1 10 DisableDHCP=1 DriverName=TCPIP$ BINDINGS=MS$NE2CLONE LANABASE=0 [MS$NE2CLONE] IOBASE=0x300 INTERRUPT=10 DriverName=MS2000$ [protman] DriverName=PROTMAN$ PRIORITY=MS$NDISHLP
È importante osservare il modo con cui viene inserito l'indirizzo IP dell'elaboratore, cioè separando gli ottetti attraverso spazi invece che con il consueto punto. È importante impostare correttamente la maschera di rete e disabilitare il DHCP, DisableDHCP=1, a meno che questo ultimo sia disponibile effettivamente.
Quello che segue è un esempio del file SYSTEM.INI
.
[network] filesharing=no printsharing=no autologon=yes computername=ALFA lanroot=C:\NET username=DANIELE workgroup=UFFICIO reconnect=yes dospophotkey=N lmlogon=0 logondomain=UFFICIO preferredredir=basic autostart=basic maxconnections=8 [network drivers] netcard=ne2000.dos transport=tcpdrv.dos,nemm.dos devdir=C:\NET LoadRMDrivers=yes [386enh] TimerCriticalSection=5000 UniqueDosPSP=TRUE PSPIncrement=2 [Password Lists] *Shares=C:\NET\Shares.PWL DANIELE=C:\NET\DANIELE.PWL
È abbastanza importante che il gruppo di lavoro (workgroup) sia uguale a quello del servizio da raggiungere, anche se non è indispensabile. In questo caso: workgroup=UFFICIO. Inoltre, per risparmiare memoria, è conveniente che sia attivato solo il redirector di base: preferredredir=basic.
Quando si utilizzano clienti NetBIOS come MS-Windows 95/98/NT/2000 o lo stesso MS-Dos, pur avendo la possibilità di indicare l'indirizzo di un router (gateway), normalmente non si riesce ad attraversarlo per accedere a un servizio NetBIOS che si trovi oltre questo.
Ciò dipende dalla normale impossibilità di indicare il nodo di destinazione attraverso la notazione necessaria al protocollo IP. In pratica, il cliente tipico effettua un'interrogazione circolare (broadcast) per il servente che offre un servizio NetBIOS particolare. La risposta si ottiene regolarmente se il servente è connesso nella stessa rete o sottorete, mentre non si ottiene alcuna risposta se questo si trova oltre un router.
I programmi cliente di GNU/Linux, come smbclient e smbmount (il secondo viene descritto più avanti), offrono la possibilità di indicare esplicitamente l'indirizzo del nodo che funge da servente NetBIOS. In tal modo, questi clienti riescono ad attraversare anche i router.
Come si è visto, la stampa attraverso un servizio SMB avviene per mezzo di smbclient. La maggior parte delle distribuzioni GNU/Linux predispone già un sistema di filtri di stampa completo anche della possibilità di stampare presso una stampante remota di tipo SMB.
A titolo di esempio, si può osservare lo script seguente che si occupa di ricevere lo standard input e di inviarlo, tramite smbclient, a una stampante remota particolare. Per farlo, viene creato un file temporaneo nella directory personale dell'utente che lo utilizza, che con l'occasione viene trasformato. In questo esempio, ci si limita a fare in modo che il codice di interruzione di riga corrisponda alla sequenza <CR><LF>, adatta alle stampanti comuni.(4)
#!/bin/bash #====================================================================== # stampa-smb # # Esempio di una sorta di filtro di stampa per utilizzare una stampante # condivisa da un servente SMB. #====================================================================== #====================================================================== # Variabili. #====================================================================== #------------------------------------------------------------------ # Il nome del file temporaneo da utilizzare per la stampa. #------------------------------------------------------------------ STAMPA="$HOME/stampa-smb-$(date +%Y%m%d%H%M%S)" #------------------------------------------------------------------ # Il nome del servizio di stampa SMB. #------------------------------------------------------------------ SMB_PRINT='\\weizen.mehl.dg\lp' #====================================================================== # Inizio. #====================================================================== #------------------------------------------------------------------ # Scarica lo standard input nel file temporaneo, trasformandolo # in un testo «Dos» in cui «newline» corrisponda alla sequenza # <CR><LF>. #------------------------------------------------------------------ cat | unix2dos > $STAMPA #------------------------------------------------------------------ # Invia il file a un servizio di stampa SMB. #------------------------------------------------------------------ smbclient $SMB_PRINT "" -P -c "print $STAMPA" > /dev/null #------------------------------------------------------------------ # Elimina il file transitorio. #------------------------------------------------------------------ rm $STAMPA > /dev/null #====================================================================== # Fine. #======================================================================
Finora si è visto che è possibile accedere a una directory condivisa con il protocollo NetBIOS attraverso il programma smbclient. Ma questo programma non consente di montare quella directory, così come si fa con il protocollo NFS. Per questo occorre predisporre il kernel (nella sezione dedicata ai file system, 29.2.14) e per il montaggio si deve utilizzare il programma smbmount. Nella configurazione del kernel conviene attivare anche la gestione del raggiro del problema delle prime versioni di MS-Windows 95.
smbmount servizio punto_di_innesto [opzioni]
smbmount permette di eseguire il montaggio di una directory offerta in condivisione da un servizio NetBIOS. Il nome del servizio viene indicato in maniera più confacente allo standard Unix, utilizzando barre inclinate normali e non inverse come richiede normalmente NetBIOS. Il servizio ha la sintassi seguente:
//servente/risorsa[/directory]
In questo modo si indica il servente e il nome della risorsa, come al solito, a parte l'uso delle barre normali. Di seguito, si può aggiungere l'indicazione di una directory particolare, discendente da quella di partenza per il servizio indicato.
smbmount può essere utilizzato eventualmente anche da utenti comuni (diversi dall'utente root), ma in tal caso, deve essere attivato il bit SUID (SUID-root). In pratica, deve avere i permessi 47558 e appartenere all'utente root.
-s servente
In alcune circostanze è necessario specificare a parte il nome del servente NetBIOS e questa opzione permette di farlo.
-c cliente
In alcune circostanze è necessario specificare a parte il nome del cliente NetBIOS, cioè di se stessi, attraverso questa opzione.
-U utente
Permette di specificare un nome di utente, per gli scopi di NetBIOS, diverso da quello utilizzato effettivamente nell'elaboratore cliente.
-I host
Permette di definire l'indirizzo (numero IP, oppure il nome di dominio) dell'elaboratore che concede il servizio. Solitamente, questo indirizzo viene ottenuto attraverso una chiamata circolare (broadcast), ma ci sono situazioni in cui questo sistema non può funzionare, per esempio quando si attraversa un router.
-u utente
-g gruppo
Queste due opzioni permettono di definire la proprietà dei file e delle directory del file system che viene montato. Infatti, trattandosi di un file system sprovvisto di tali informazioni, è necessario decidere a chi si vuole fare appartenere il suo contenuto. Se non si utilizzano queste opzioni, tutto è di proprietà dell'utente root.
$
smbmount //W5/C /mnt/dosserver
Esegue il montaggio della directory condivisa dal servente NetBIOS W5 con il nome C, utilizzando come punto di innesto /mnt/dosserver/
. I dati ottenuti (file e directory) risulteranno appartenere all'utente root.
$
smbmount //W5/C /mnt/dosserver -c linux1
Esegue la stessa operazione dell'esempio precedente, ma fa in modo che l'elaboratore locale (il cliente dal quale si esegue il montaggio) venga identificato, ai fini del protocollo NetBIOS, con il nome linux1.
$
smbmount //W5/C /mnt/dosserver -c linux1 -I 192.168.2.15
Come nell'esempio precedente, ma indica esplicitamente l'indirizzo IP del nodo cui corrisponde il nome NetBIOS W5. Ciò permette di superare un eventuale router e comunque evita una richiesta circolare a tutta la rete.
$
smbmount //W5/C /mnt/dosserver -u daniele -g daniele
Come nel primo esempio, ma viene indicato a quale utente e gruppo devono risultare appartenenti i file e le directory.
smbumount punto_di_innesto
smbumount permette agli utenti comuni di smontare una directory offerta in condivisione da un servizio NetBIOS, montata precedentemente con smbmount. Perché ciò possa funzionare, è necessario che questo programma appartenga all'utente root e abbia il bit SUID attivato (SUID-root). In pratica, le stessa situazione richiesta per smbmount.
L'utente root non ha bisogno di utilizzare questo programma; per lui è sufficiente il solito umount.
David Wood, SMB HOWTO
<http://www.linux.org/docs/ldp/howto/HOWTO-INDEX/howtos.html>
daniele @ swlibero.org
2) Per esempio, potrebbe essere abbinato a un gruppo omonimo guestpc, o simile.
3) Di solito, le reti NetBIOS fanno uso del protocollo di trasporto NetBEUI che ha il vantaggio di non richiedere alcuna configurazione. L'utilizzo del trasporto TCP/IP obbliga a indicare gli indirizzi IP e le maschere di rete. Ciò significa che, oltre a dover pianificare i nomi dei serventi o peer, si devono organizzare anche gli indirizzi IP. Di solito, questo particolare viene dimenticato perché non sembra fare parte del protocollo NetBIOS.
4) Qui si intende che il programma unix2dos si comporti come filtro, ricevendo i dati dallo standard input ed emettendo il risultato della sua elaborazione attraverso lo standard output.
Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome introduzione_a_smb_con_gnu_linux.html
[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico]