[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico] [volume] [parte]
Un servente Samba si basa su due demoni:(1)
smbd che fornisce i servizi di condivisione di file stampanti per i clienti SMB (che possono essere macchine MS-Windows o altre macchine GNU/Linux) e si occupa della gestione delle sessioni di comunicazione e delle autenticazioni necessarie all'accesso alle risorse che vengono offerte in condivisione dal servente; il demone avvia una copia di se stesso per ogni richiesta di servizio da soddisfare;
nmbd che gestisce la distribuzione dell'elenco delle risorse condivise alle altre macchine della rete, può mantenere la lista delle risorse condivise (scansione della rete) ed eventualmente risolvere i nomi NetBIOS della rete (servente WINS);
Entrambi i demoni smbd e nmbd possono essere attivati in modo autonomo, o gestiti dal supervisore dei servizi di rete (come Xinetd); qui viene presa in esame solo la prima alternativa che è di gran lunga la più praticata e anche quella predefinita in molte distribuzioni GNU/Linux.
In quasi tutte le distribuzioni si trovano infatti degli script preconfezionati per l'attivazione e la disattivazione di determinati servizi; nel caso della Red Hat si attivano entrambi i demoni con il comando:
#
/etc/rc.d/init.d/smb start
e si disattivano con il comando:
#
/etc/rc.d/init.d/smb stop
ci sono poi anche i comandi:
#
/etc/rc.d/init.d/smb restart
e
#
/etc/rc.d/init.d/smb status
il cui significato dovrebbe essere ovvio.
La configurazione di un servente Samba si basa su di un file di testo; nella distribuzione Red Hat (ma anche per altre) è /etc/samba/smb.conf
.
Solitamente viene fornito preconfezionato e commentato, con una configurazione di base già pronta all'uso; ovviamente è possibile intervenire sul file per adattare il comportamento del servente alle proprie esigenze.
Prima di esaminare la struttura del file e i parametri principali di configurazione è opportuno sottolineare alcuni importanti aspetti generali:
È indifferente usare maiuscole o minuscole a meno che tale uso non vada a interferire con le regole del sistema operativo sottostante. Se ad esempio si indica il percorso di una directory condivisa su una macchina GNU/Linux con l'opzione (che verrà descritta più avanti) PATH=/USR/LOCAL, Samba non ha alcun problema ad accettare la direttiva ma al momento di collegarsi alla risorsa fallisce in quanto in GNU/Linux quella directory al 99 % non esiste, mentre esiste /usr/local/
. È quindi consigliabile l'uso delle minuscole.
Le righe di commento iniziano con i simboli ; oppure #.
Il carattere di continuazione riga è \.
Alcune direttive di configurazione di Samba, per ragioni di compatibilità, sono ridondanti; per questo motivo uno stesso risultato si può ottenere in modi diversi.
Per rendere effettive le variazioni fatte al file di configurazione non è necessario riavviare i demoni di Samba in quanto il file viene riletto automaticamente ogni 60 s; se si vuole forzare la rilettura basta impartire il comando: kill -SIGHUP n dove n è il numero del processo corrispondente al demone smbd in funzione (per individuarlo si può eseguire ps afx | grep smbd). Occorre comunque notare che non tutti i cambiamenti alla configurazioni vengono necessariamente attuati subito; in particolare le variazioni della configurazione di risorse condivise rimangono congelate finché c'è qualche utente connesso a tali risorse.
Il file di configurazione è suddiviso in sezioni i cui nomi sono racchiusi tra parentesi quadrate.
Ogni sezione corrisponde a una risorsa condivisa a eccezione della sezione global usata per le configurazioni globali. Altre sezioni con un ruolo un po' particolare sono homes e printers.
In essa si impostano le informazioni che condizionano tutto il sistema ed eventualmente quei parametri che se non specificati vengono assunti in modo predefinito, ad esempio il nome del gruppo di lavoro (workgroup).
In essa si regolano i parametri di configurazione delle directory personali degli utenti che si collegano al servente Samba.
Consente di impostare le caratteristiche della condivisione di tutte le stampanti installate nella macchina GNU/Linux senza dover definire una condivisione separata per ognuna di esse.
All'interno del file di configurazione è possibile usare alcune variabili il cui nome viene sostituito dal rispettivo valore quando il file di configurazione viene utilizzato dai demoni smbd e nmbd.
Segue una lista delle variabili più importanti con una breve descrizione:
È la sezione che appare in tutte le configurazioni di Samba, anche se non è obbligatoria. Le opzioni in essa contenute vengono applicate a tutte le altre sezioni.
Viene mostrato un esempio comprendente alcune direttive di uso comune suddivise in blocchi in base alla funzione svolta e intervallate da brevi descrizioni del loro significato:
[global] # # identificazione del servente # workgroup = INF netbios name = pippo server string = Samba Server |
La voce più importante è workgroup che assegna a Samba il dominio o il gruppo di appartenenza. Occorre assegnarla correttamente, pena conflitti nella rete paritetica (peer-to-peer).
La voce netbios name è di utilizzo meno frequente e serve ad assegnare al servente Samba un nome NetBIOS a piacere. Il nome NetBIOS viene infatti assegnato in modo definito pari a quello ottenuto dal DNS. Ad esempio se il nome DNS del servente fosse muscolis.inf.besta
il nome NetBIOS sarebbe muscolis. Uno dei casi in cui è utile poter impostare un nome NetBIOS diverso da quello predefinito è quello in cui la rete è suddivisa in due o più domini DNS diversi; in questo caso potrebbe infatti anche esistere una macchina con nome muscolis.mat.besta
che verrebbe quindi ad avere lo stesso nome NetBIOS. Ovviamente il valore di netbios name deve essere assegnato seguendo le regole dei nomi NetBIOS (unica stringa senza punti contenente i simboli alfabetici maiuscoli e minuscoli le cifre e i simboli !, @, #, $, %, ^, &, (, ), -, ' e ~).
Con server string si assegna semplicemente la descrizione dell'elaboratore servente.
# # opzioni di rete # hosts allow = 192.168.1. localhost hosts deny = 172.16.244.254 interfaces = 192.168.1.1/24 172.16.244.1/16 bind interfaces only = yes |
Le direttive Host allow e host deny servono rispettivamente a specificare quali nodi possono e non possono accedere alle risorse condivise dal servente Samba. L'indicazione può essere fatta tramite il nome del nodo, il nome di dominio, il numero IP, il numero della sottorete. Nell'esempio viene concesso l'accesso a tutte le macchine della sottorete 192.168.1.* e al localhost
(è opportuno che l'accesso a localhost
sia sempre concesso pena possibili malfunzionamenti della scansione delle risorse del servente) e viene negato alla macchina con indirizzo 192.168.1.3. Possono anche essere usate le parole chiave ALL, per designare qualsiasi elaboratore, e EXCEPT per indicare un'eccezione a una regola (ad esempio host allow 192.168.1. EXCEPT 192.168.1.3). Si deve inoltre notare che in caso di assenza delle direttive host allow e host deny, l'accesso è concesso a tutti in modo predefinito. Infine si tenga presente che tali direttive possono essere inserite anche in specifiche condivisioni ma con grado di priorità inferiore rispetto a quanto specificato nella sezione global.
La direttiva interfaces è utile in caso il servente Samba risieda in più di una sottorete. Se sull'elaboratore sono presenti più interfacce di rete, in modo predefinito, Samba si mette in ascolto di richieste provenienti dagli indirizzi di rete corrispondenti alla rete della prima interfaccia che trova (di solito eth0). Per fare in modo che invece risponda alle richieste provenienti da più sottoreti si deve impostare questa opzione. Nell'esempio Samba si pone in ascolto dalle sottoreti 192.168.1.* e 172.16.*.* (si può usare anche una notazione con maschera di rete: 192.168.1.1/255.255.255.0 172.16.244.1/255.255.0.0).
Ponendo bind interfaces only = yes (l'alternativa è ovviamente no oppure si può evitare di inserire questa opzione), si forza il servente a rispondere soltanto alle sottoreti corrispondenti alle interfacce indicate in interfaces. In tal caso si deve inserire tra le interfacce anche 127.0.0.1 per permettere al programma smbpasswd di potersi collegare al localhost
e funzionare correttamente.
# # opzioni per la stampa # printing = bsd printcap name = /etc/printcap load printers = yes |
La direttiva printing permette di specificare il sistema di stampa in uso nel servente; per i sistemi GNU/Linux il valore da indicare è di solito bsd, l'alternativa più diffusa è sysv.
Le altre due opzioni permettono di caricare automaticamente tutte le stampanti configurate nel sistema senza descriverle singolarmente, indicando a tale scopo il percorso del file printcap contenente la definizione di tali stampanti. La loro configurazione relativamente a Samba viene poi indicata nell'apposita sezione printers descritta più avanti.
# # opzioni per il log # log file = /var/log/samba/%m.log max log size = 100 log level = 3 |
La direttiva log file permette di indicare il file delle registrazioni per gli eventi Samba; tale file può essere unico oppure, come nell'esempio, diverso per ogni cliente che si collega al servente (il nome del file sarà nome_host.log
). Altra possibilità è quella di avere un file di registrazioni per ogni utente usando opportunamente la variabile %U o %u.
Con max log size si specifica la grandezza in kibibyte del file delle registrazioni, raggiunta la quale il file stesso viene rinominato con estensione .old
e reinizializzato; il file .old
eventualmente già esistente viene cancellato. Il valore predefinito di questo parametro è 5 000; il valore zero significa nessun limite di ampiezza (scelta non consigliabile per evitare una crescita abnorme del file o dei file delle registrazioni).
La direttiva log level indica il livello di dettaglio dei messaggi annotati nel registro; il valore predefinito è zero e corrisponde a nessun messaggio. Aumentando questo valore si hanno messaggi sempre più dettagliati; è comunque sconsigliabile un livello superiore a 3.
# # opzioni per l'accesso alle condivisioni # encrypt password = yes null password = yes guest account = utentesmb security = share # in alternativa ; security = user ; security = server ; security = domain # altri parametri nel caso di security = user ; smb passwd file = /etc/samba/smbpasswd ; username map = /etc/samba/smbusers # altri parametri nel caso di security = server o domain ; password server = SERVER_NT |
La direttiva encrypt password = yes è praticamente obbligatoria se il servente Samba deve «convivere» con macchine equipaggiate con sistemi operativi MS-Windows 98/NT o più recenti che usano le parole d'ordine cifrate.
La direttiva null password = yes permette di avere utenti Samba con parola d'ordine nulla (il valore predefinito è no.)
La direttiva guest account indica il nome di un utente generico al quale può essere consentito l'accesso alle condivisioni (da usare nel caso di security = share, come dettagliato più avanti). Tale utente deve essere definito nel sistema GNU/Linux senza directory personale e senza shell, aggiungendo al file /etc/passwd
la riga:
utentesmb::499:499:utente generico samba:/dev/null:/dev/null. |
Il valore predefinito è nobody.
Il parametro security è di importanza fondamentale e richiede una trattazione leggermente più ampia.
Con l'impostazione security = share si ha il controllo di accesso a livello di condivisione: il cliente che vuole accedere a una risorsa invia ogni volta una parola d'ordine e nessun nominativo-utente. Samba tenta di dedurre il nominativo-utente dalla direttiva valid users eventualmente inserita nella sezione di condivisione di quella risorsa (come illustrato in seguito), oppure dal nome dell'elaboratore cliente, o, in caso di insuccesso, da quanto indicato con il parametro guest account (questo solo se fra i parametri di condivisione è indicato guest ok = yes e guest only = yes).
Questo livello di sicurezza si usa, soprattutto nel caso di utenti MS-Windows e GNU/Linux non coincidenti, per condividere porzioni di file system quando si ha interesse a far sì che tutti gli utenti abbiano gli stessi diritti sui file condivisi (con l'impostazione guest account = utentesmb il «proprietario» delle risorse condivise sarà sempre l'utente GNU/Linux utentesmb qualunque sia il nominativo dell'utente MS-Windows che si connette).
Con l'impostazione security = user, che è quella predefinita, si ha il controllo di accesso a livello di utente: il cliente che vuole accedere a una risorsa invia al momento della connessione una coppia utente-parola d'ordine in base alla quale avviene l'autenticazione da parte del servente. Se la connessione viene accettata il cliente può accedere a tutte le risorse condivise senza doversi autenticare nuovamente a ogni accesso.
Il controllo delle utenze viene effettuato dal servente Samba in base al contenuto del file dei suoi utenti che solitamente è /etc/samba/smbpasswd
(si può cambiare il nome del file o il percorso tramite il parametro smb passwd file =).
Gli utenti Samba vengono aggiunti con il comando smbpasswd illustrato in un paragrafo successivo.
È di fondamentale importanza notare che comunque il nome utente Samba deve coincidere con il nome di un utente definito nel sistema GNU/Linux, in quanto quest'ultimo deve essere sempre in grado di assegnare un proprietario «valido» agli eventuali file creati o copiati dall'utente conneso all'interno della risorsa condivisa.
Questa esigenza può costituire un problema, ad esempio per la limitazione a otto caratteri dei nominativi-utente di GNU/Linux, che viene in parte superato grazie all'uso di un file di corrispondenza tra utenti GNU/Linux e utenti MS-Windows, il cui nome è indicato con la direttiva username map =. Un valore abbastanza comune di tale parametro è /etc/samba/smbusers
. Tale file conterrà delle righe così formate:
nome_linux = nome_smb_1 nome_smb_2...
Per ovvi motivi di sicurezza, entrambi i file smbusers
e smbpasswd
, devono essere accessibili sia in scrittura che in lettura dal solo utente root.
Con l'impostazione security = server si ha lo stesso controllo di accesso visto nel caso di user con la differenza che l'utenza viene controllata su un servente esterno (solitamente un PDC MS-Windows) il cui nome (NetBIOS) viene indicato con la direttiva password server =.
Con l'impostazione security = domain si ha ancora lo stesso controllo di accesso visto nel caso di user, ma questa volta il servente Samba va a inserirsi in un dominio MS-Windows NT/2000.
Per ottenere questo risultato occorre fermare i demoni di Samba, quindi aggiungere il servente Samba al dominio NT sul PDC usando il server manager di MS-Windows NT oppure a una active directory sul servente MS-Windows 2000 con la MMC (Microsoft management console) attraverso lo strumento «Utenti e computer di Active Directory». A questo punto si deve eseguire il comando:
smbpasswd -j nome_dominio -r nome_server -Unome_utente%parola_d'ordine
Il nome_dominio deve essere lo stesso indicato nella direttiva workgroup di smb.conf
; il nome_server deve coincidere con il valore di password server; nome_utente e relativa parola_d'ordine devono rappresentare un'utenza con privilegi sufficienti ad aggiungere un'utenza nuova nella macchina MS-Windows NT/2000.
Ultimate queste operazioni occorre naturalmente riavviare il servizio Samba.
Il vantaggio principale dell'impostazione domain rispetto a quella server consiste nel fatto che il PDC risulta meno carico, in quanto non è più necessaria una connessione di rete permanente tra esso e il servente Samba. Quest'ultimo infatti effettua una chiamata RPC (Remote procedure call) solo al momento dell'autenticazione e non necessita di essere costantemente connesso al PDC come avviene nel caso del livello di sicurezza server.
Per concludere occorre notare che comunque anche con questo tipo di impostazione (come pure per quella server) è necessario tenere allineati gli elenchi degli utenti dal lato MS-Windows e dal lato GNU/Linux (il motivo è stato illustrato nel paragrafo del livello user). Ci sono però due direttive della sezione global che permettono di automatizzare l'aggiornamento degli utenti GNU/Linux:
add user = script_1 %u
delete user = script_2 %u
La prima entra in azione quando, a seguito di una connessione di un cliente MS-Windows, Samba si rivolge al servente di dominio per l'autenticazione con esito positivo ma l'utente GNU/Linux corrispondente non esiste; ovviamente lo script script_1 deve essere scritto in modo adeguato affinché crei l'utente ricevendolo come parametro dalla variabile %u.
In modo speculare si usa l'altra direttiva che entra in azione quando, a seguito di una connessione di un cliente MS-Windows, Samba si rivolge al servente di dominio per l'autenticazione con esito negativo ma il corrispondente utente GNU/Linux esiste; in questo caso script_2 deve provvedere a cancellare l'utente in questione.
Una sezione indicante una risorsa condivisa può avere un nome a piacere purché sempre racchiuso tra parentesi quadrate.
Vengono adesso illustrati alcuni esempi allo scopo di descrivere almeno le direttive più importanti:
# # condivisione 1: una directory accessibile solo a certi utenti # [Pagine WWW] comment = Dir per le pagine web browseable = yes public = no path = /var/www writable = yes valid users = utente1 utente2 |
La direttiva comment serve ad associare una descrizione alla risorsa condivisa.
L'opzione browseable permette di rendere visibile o no la risorsa agli utenti che si connettono al servente.
public è un sinonimo di guest ok; in questo esempio non si vuole che la risorsa sia accessibile per l'utente generico.
path permette di indicare il percorso della risorsa sul sistema GNU/Linux.
writable serve a concedere o negare l'accesso in scrittura (un sinonimo è writeable.
valid users indica quali sono gli utenti che possono accedere alla risorsa. È anche possibile indicare gruppi di utenti GNU/Linux con la sintassi +nome_gruppo e gruppi di utenti NIS (ovviamente deve essere presente in rete un servente NIS) con la sintassi &nome_gruppo e anche entrambi con la sintassi +&nome_gruppo o &+nome_gruppo, o ancora @nome_gruppo.
# # condivisione 2: una directory pubblica = accessibile a tutti # [public] comment = Dir pubblica browseable = yes guest ok = yes path = /usr/local/public writable = yes |
# # condivisione 3: una directory pubblica = accessibile a tutti in cui tutti # gli utenti possano creare, modificare, cancellare tutti i file # [temp] comment = Dir pubblica plus browseable = yes guest ok = yes guest only = yes path = /tmp writable = yes |
La differenza tra le due condivisioni è molto sottile ma anche interessante. La presenza di guest ok = yes permette le connessioni anonime; eventuali file creati o copiati nella directory sarebbero di proprietà dell'utente indicato in guest account in caso di accesso anonimo, oppure dell'utente effettivo in caso esso fosse registrato in GNU/Linux. Se è presente anche guest only = yes invece il proprietario è sempre l'utente fittizio ospite anche nel caso l'utente collegato fosse riconosciuto regolarmente da GNU/Linux; in questo caso quindi tutti gli utenti possono fare tutte le operazioni con qualsiasi file presente nella directory condivisa.
Un modo alternativo per ottenere lo stesso risultato è quello di usare la direttiva force user = nome_utente; in questo modo Samba assegna lo stesso nominativo-utente a chiunque si connetta alla risorsa.
# # condivisione 4: un cd-rom # [cd] comment = CD-ROM preexec = mount /mnt/cdrom postexec = umount /mnt/cdrom browseable = yes public = yes path = /mnt/cdrom writable = no |
Il significato delle impostazioni è ovvio compreso quello delle due opzioni preexec e postexec. In caso si tema che possano connettersi utenti sprovvisti dei privilegi per montare e smontare il CD, si possono sostituire le due direttive rispettivamente con root preexec e root postexec che svolgono lo stesso compito ma con i privilegi dell'utente root.
# # condivisione 5: una directory privata con permessi preimpostati # [privata] comment = Dir privata browseable = yes path = /usr/local/private writable = no public = no write list = pippo pluto create mask = 0644 directory mask = 0644 |
In questo esempio nella directory non sarebbe possibile scrivere, ma la presenza della direttiva write list permette di impostare permessi di scrittura, per gli utenti indicati, indipendentemente da quanto specificato negli altri parametri. Si deve però notare che i permessi impostati a livello di sistema su quella risorsa hanno sempre il sopravvento su quanto specificato nel file di configurazione di Samba (in altre parole, se /usr/local/private
è di proprietà dell'utente root e i permessi sono impostati a 6008, gli altri utenti non possono né leggere né scrivere alcunché in quella directory condivisa).
Le ultime due direttive, infine, servono a indicare i permessi con cui verranno creati file e directory all'interno della risorsa condivisa; il valore predefinito è 07558
Altre direttive importanti sono:
admin users = tizio follow symlinks = no |
Con la prima si indica che l'utente tizio ha gli stessi privilegi dell'utente root sulla condivisione e quindi non risente di eventuali limitazioni dovute ai permessi sui file; con la seconda si impedisce che vengano seguiti i collegamenti simbolici evitando che chi accede alla condivisione possa accedere anche a file che si trovano all'esterno di questa.
La sezione homes viene utilizzata affinché ogni utente possa avere accesso a una propria directory personale sul servente Samba che potrà anche coincidere con la directory personale GNU/Linux di quell'utente. Un esempio di definizione può essere il seguente:
# # directory personali degli utenti # [homes] comment = directory home browseable = no writable = yes path = usr/local/samba/%S |
Qui è importante l'impostazione che impedisce la scansione della risorsa in modo che essa non appaia con il nome homes a tutti gli utenti.
La presenza di path serve a fare in modo che questa directory non coincida con quella GNU/Linux dell'utente (cosa che sarebbe l'impostazione predefinita).
La logica di funzionamento è la seguente: quando l'utente si connette, se l'utenza è accettata, viene creata dal servente Samba una condivisione con le caratteristiche specificate nella sezione homes ma con un nome uguale a quello dell'utente connesso.
Con questa sezione si impostano i parametri di configurazione di tutte le stampanti definite nel sistema GNU/Linux a patto che nella sezione global siano state inserite le direttive seguenti:
load printers = yes printcap name = /etc/printcap |
L'alternativa, che consiste nel definire le varie stampanti come singole risorse condivise, non viene presa in esame in questa sede.
Un esempio di configurazione per le stampanti è il seguente:
# # Stampanti # [printers] comment = stampanti path = /var/spool/samba browseable = no printable = yes public = yes writable = no |
Qui occorre notare che il parametro path serve a impostare una directory per la coda di stampa, diversa da /tmp/
che è quella predefinita.
Altra direttiva da segnalare è printable con la quale si attiva la coda di stampa.
Un primo strumento molto utile è testparm con il quale si verifica la correttezza sintattica delle impostazioni scritte nel file smb.conf
.
Il comando da eseguire è:
#
testparm /etc/samba/smb.conf
si ottiene una risposta suddivisa in due parti: prima il resoconto del controllo sintattico del file di configurazione, poi l'elenco delle risorse condivise descritte in esso.
Altro programma di fondamentale importanza è smbpasswd, già visto in precedenza a proposito della connessione di Samba a un dominio MS-Windows NT, ma che si usa principalmente per definire utenti e parole d'ordine relative. La sintassi in questo caso è:
smbpasswd [-a] [-x] [nominativo]
L'opzione -a permette di inserire un nuovo utente e poi di definirne la parole d'ordine; l'opzione -x permette invece di eliminarlo; se non si indica alcuna opzione si esegue solo il cambio della parole d'ordine per l'utente. Il nominativo-utente che si può inserire alla fine della riga di comando è quello sul quale il comando opera (se non viene indicato, si fa riferimento in modo predefinito all'utente GNU/Linux che esegue il comando).
Altro strumento utile è lo script smbadduser che permette di definire un nuovo utente Samba e contemporaneamente l'associazione con utenti GNU/Linux corrispondenti. La sintassi è:
smbadduser utente_linux:utente_smb [utente_linux:utente_smb]...
In pratica questo comando aggiorna i file smbpasswd
e smbusers
, permettendo di definire la parola d'ordine per i nuovi utenti Samba.
Infine può essere molto utile anche il comando smbstatus per avere un rapporto (con l'opzione -d anche dettagliato) delle connessioni Samba attive.
1) Un demone è un programma di servizio costantemente in esecuzione e pronto a rispondere a richieste a esso rivolte da altri processi in esecuzione localmente o da una posizione remota
Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome servente_samba.html
[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico]