[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico] [volume] [parte]


Capitolo 385.   Introduzione a SMB con GNU/Linux

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.

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

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

385.3   Servente SMB

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

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

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.

385.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, oppure dal supervisore dei servizi di rete (capitolo 135).

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.

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

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

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

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

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

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

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

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

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

385.4.1   $ smbclient

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

Alcune opzioni

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

Esempi

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.

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

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.

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

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

Figura 385.1. La directory pubblica amministrata da Samba, dal punto di vista di MS-Windows 95/98/NT/2000.

figure/a2-win95-samba-directory-condivisa

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.

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

385.5.2   Problemi con i router

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.

385.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 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.
#======================================================================

385.7   Montare una risorsa di condivisione dei file nel file system GNU/Linux

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.

385.7.1   $ 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/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.

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

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.

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

385.8   Riferimenti

Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org

1) Samba   GNU GPL

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]