[inizio] [indice generale] [precedente] [successivo] [indice analitico] [contributi]


272. SMB

Questo capitolo nasce da esperienze dell'autore fatte molto tempo fa, e molti esempi mostrati sono poco attenti ai problemi legati alla sicurezza. In tal senso, 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. 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 filesystem standard di GNU/Linux.

272.1 Nomi NetBIOS

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 di un servizio ha il formato seguente:

\\<servente>\<servizio>

Il nome del servente e quello del servizio non tengono conto della differenza tra lettere maiuscole e minuscole.

Per esempio, `\\TIZIO\VARIE' rappresenta il servizio `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.

272.2 Trasporto TCP/IP

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

272.3 Servente SMB

Un servente SMB (o NetBIOS) permette di offrire la condivisione di parte del proprio filesystem, 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 seguenti.

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 di `inetd'. Nel primo caso, possono essere avviati nel modo seguente:

smbd -D

nmbd -D

Se invece si intende utilizzare il controllo di `inetd', 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

272.3.1 # 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 particolare distribuzione GNU/Linux che si utilizza, potrebbe essere avviato direttamente dalla procedura di inizializzazione (Init), oppure dal supervisore `inetd' ( 95.2.1).

Alcune opzioni

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

272.3.2 # smbd

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 (Init), oppure dal supervisore `inetd' ( 95.2.1).

Alcune opzioni

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

272.3.3 Utente generico

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 password, 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. *1*

272.3.4 Directory condivisa

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 filesystem 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

272.3.5 Coda di stampa

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

272.3.6 /etc/smb.conf

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
[global]

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' ( 272.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.

[public]

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.

[lp]

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.

272.3.7 Verifica del funzionamento

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

272.3.8 Nome del servente secondo NetBIOS

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 questo assunto non deve essere considerato la regola; infatti, questo nome può essere cambiato.

272.3.9 $ smbstatus

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.

Esempi

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

272.4 Cliente SMB

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.

272.4.1 $ smbclient

smbclient <servente-e-servizio> [<password>] [<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 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 del servizio a cui ci si è connessi (in questo caso è la radice).

L'indicazione del servente e del servizio deve essere fatto nella forma consueta.

\\<servente>\<servizio>
Alcune opzioni

-P

Inizia una connessione a un servizio di stampa, invece che al solito servizio di condivisione di file.

-L <host>

Permette di ottenere la lista dei servizi ottenibili da un determinato elaboratore. 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, 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.

Esempi

smbclient -L dinkel.brot.dg

Richiede, e ottiene, l'elenco dei servizi SMB disponibili nell'elaboratore `dinkel.brot.dg'.

smbclient '\\mais\c'

Attiva una connessione con il servizio di condivisione file `c' dell'elaboratore identificato dal protocollo NetBIOS con il nome `mais'. Non avendo indicato esplicitamente la password, questa viene richiesta prima di presentare l'invito di `smbclient': se per questo servizio non c'è, 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 il servizio di condivisione della stampante `stampa' dell'elaboratore identificato dal protocollo NetBIOS con il nome `mais'. Non avendo indicato esplicitamente la password, questa viene richiesta prima di presentare l'invito di `smbclient': se per questo servizio non c'è, basta lasciarla in bianco e premere [Invio].

smbclient '\\mais\stampa' "" -P -c "print ./lettera"

Come nell'esempio precedente, attiva una connessione con il servizio di condivisione della stampante `stampa', ma indica già la password, 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.

272.4.2 Verificare il funzionamento di un servente Samba

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]

I nomi dell'elaboratore e del servizio 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.

Si osservi l'uso degli apici singoli. L'indicazione dell'elaboratore e della directory è fatta di due barre oblique inverse, seguite dal nome dell'elaboratore, seguito da una barra obliqua inversa, seguita dal nome dell'oggetto condiviso. Se fossero stati utilizzati gli apici doppi, con la shell Bash o altra simile, le barre oblique avrebbero dovuto essere raddoppiate.

In base all'esempio di configurazione presentato all'inizio di questo capitolo, il risultato dovrebbe essere il 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 password: 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'.

272.5 Connessione con una rete NetBIOS-TCP/IP

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. *2*

Di conseguenza, si potrà interagire con sistemi MS-Windows 95/98/NT, 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 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 al servizio `C'.

smbclient '\\ROGGEN\C'

Dal lato dell'elaboratore `roggen.brot.dg' sul quale è in funzione MS-Windows 95/98, è 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.

217.jpg

Figura 272.1: La directory pubblica amministrata da Samba, dal punto di vista di MS-Windows 95/98.

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 272.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 password, 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.

272.5.1 Cliente MS-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 quest'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'.

272.5.2 Problemi con i router

Quando si utilizzano clienti NetBIOS come MS-Windows 95/98 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 tipico cliente effettua un'interrogazione circolare (broadcast) per il servente che offre un particolare servizio NetBIOS. 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 clienti di GNU/Linux, come `smbclient' e `smbmount' (quest'ultimo viene descritto più avanti), offrono la possibilità di indicare esplicitamente l'indirizzo del nodo che funge da servente NetBIOS. In questo modo, questi clienti riescono ad attraversare anche i router.

272.6 Stampa

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 particolare stampante remota. Per farlo, viene creato un file temporaneo nella directory personale dell'utente che lo utilizza, e con l'occasione, lo si trasforma. 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.

#!/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.
#======================================================================

272.7 Mount

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, e per il montaggio si deve utilizzare il programma `smbmount'.

272.7.1 Kernel

Per poter montare un filesystem di rete ottenuto da un servizio NetBIOS, occorre predisporre il kernel nella sezione dedicata appunto ai filesystem gestiti.

Di solito, conviene attivare anche la gestione del raggiro del problema delle prime versioni di MS-Windows 95.

272.7.2 $ smbmount

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>/<nome>[/<directory>]

In questo modo si indica il servente e il nome del servizio, 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 4755 e appartenere all'utente `root'.

Alcune opzioni

-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, e questa opzione permette di farlo.

-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 filesystem che viene montato. Infatti, trattandosi di un filesystem 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'.

Esempi

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.

272.7.3 $ smbumount

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

272.8 Riferimenti

---------------------------

Appunti Linux 2000.04.12 --- Copyright © 1997-2000 Daniele Giacomini --  daniele @ pluto.linux.it


1.) Per esempio, potrebbe essere abbinato a un gruppo omonimo `guestpc', o simile.

2.) 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 ad assegnare almeno l'indicazione degli indirizzi IP e delle 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.


[inizio] [indice generale] [precedente] [successivo] [indice analitico] [contributi]