SAMBA: configurazione lato client
Guida estesa |
Sommario |
Linux
Montare le risorse remote nel filesystem locale
Utilizzando il versatilissimo mount è possibile montare le risorse remote in un punto qualsiasi del proprio filesystem in modo da farle apparire come normalissime cartelle, indistinguibili in tutto e per tutto da quelle locali. Questo risultato può essere ottenuto tramite due diversi suite di eseguibili.
CIFS, Mount e Umount
Ipotesi Preliminari
- Il server su cui gira samba si chiama mioserver
- Alla risorsa remota su mioserver è stato dato il nome di "miacartella" (ricordo che il nome samba può non coincidere con quello Linux).
- L'utente crea autonomamente la cartella
/mnt/samba
sulla propria macchina perché desidera che il contenuto della cartella remota "miacartella" risulti visibile in/mnt/samba
. È IMPORTANTE' che tale cartella sia e rimanga vuota (eccetto evidentemente quando le risorse remote sono montate). - L'utente ha verificato che nella macchina su cui vuole montare le risorse remote samba sia presente il pacchetto
cifs-utils
e, qualora non presente, abbia già provveduto ad installarlo.
Caricare manualmente le risorse remote
Premesso tutto ciò da terminale è sufficiente digitare un comando del tipo:
# mount -t cifs "//mioserver/miacartella" -o user=utente_samba,pass=password_utente_samba,uid=1000,gid=1000,file_mode=0777,dir_mode=0775 "/mnt/samba"
A questo punto, se non sono comparsi messaggi d'errore, in /mnt/samba
dovrebbe essere presente il contenuto di "miacartella".
Il significato del precedente comando è il seguente:
- mount, è come già detto il nome dell'applicativo;
- -t, dice a mount il tipo di filesystem delle risorse che si vuole montare, in questo caso cifs.
- "//mioserver/miacartella", è il percorso della risorsa remota. I doppi apici sono necessari solo se il nome del server o della cartella non è standard, per esempio se contiene degli spazi.
- -o , serve a passare le opzioni:
- - user, definisce l'utente samba;
- - pass, definisce la password dell'utente samba;
- - uid e gid definiscono chi saranno il proprietario e il gruppo proprietario (attraverso i rispettivi ID numerici) delle risorse montate. Evitando di specificare tali parametri è quasi certo cheguest,nosetuids,noperm,rw le risorse risulteranno accessibili in sola lettura a tutti gli utenti normali, poiché per comportamento predefinito il possesso viene attribuito all'utente root e al gruppo root.
- - file_mode e dir_mode permettono di definire schemi di permessi differenti da quello standard, ovvero
0755
, rispettivamente per file e cartelle.
- /mnt/samba, è già stato illustrato nelle ipotesi preliminari. Come sempre i doppi apici sono necessari solo per nomi non standard.
Nel caso di utente guest è sufficiente un comando del tipo:
mount -t cifs "//mioserver/miacartella" -o guest,nosetuids,noperm,rw "/mnt/samba"
dove guest permette di non inserire alcuna password (ovviamente deve essere già stata abilitata un utenza guest sul server).
Caricamento automatico all'avvio
È possibile evitare di dover caricare manualmente ad ogni avvio le risorse remote editando oppurtunamento il file /etc/fstab
, ovvero inserendo un'opportuna riga per ogni risorsa (attenzione che la riga è molto lunga e potrebbe non essere interamente visibile nella finiestra del browser):
//mioserver/miacartella /mnt/samba cifs _netdev,credentials=/percorso_file/credenziali,uid=1000,gid=1000,file_mode=0777,dir_mode=0775 0 0
credentials, definisce il percorso di un file testuale contenente tre righe e necessario per autenticarsi presso il server samba:
username=utente_samba password=password_utente_samba domain=nome_dominio_o_gruppo_samba
_netdev dovrebbe imporre che la risorsa remota venga montata solo dopo aver configurato attivato correttamente l'interfaccia (le interfacce?) di rete, poiché se per caso l'operazione di mount avviene prima che questa sia pronta non verrà montato alcunché (ma sarà poi comunque possibile montare manualmente la risorsa).
Per un utenza di tipo guest è sufficiente una riga simile a questa:
//mioserver/miacartella /mnt/samba cifs _netdev,guest,nosetuids,noperm,rw 0 0
![]() |
ATTENZIONE /etc/fstab mal tollera i nomi e i percorsi non standard, pertanto ove possibile evitare di scegliere nomi delle condivisioni contenenti spazi o altri caratteri speciali. |
Qualora proprio non se ne potesse fare a meno è possibile indicare i caratteri speciali in forma ottale (se tutti o solo alcuni non è dato saperlo); ad esempio una cartella di nome prova &del %
dovrebbe essere indicata come prova\040\046del\040%
; si noti che mentre la "e commerciale" e lo spazio devono essere indicati in forma ottale, il simbolo "percento" può essere indicato normalmente. A quest'indirizzo è disponibile una tabella di conversione per i primi 256 caratteri ASCII.
Smontare le risorse remote
Per terminare l'accesso alle risorse remote dalla macchina in uso è sufficiente digitare sempre come root:
# umount /mnt/samba
SMBFS, Smbmount e Smbumount
Se per un qualche motivo non si può o non si vuole usare il filesystem CIFS è sempre possibile adottare il il più vecchio SMBFS; in tal caso dovrebbe essere sufficiente installare il pacchetto smbfs
perché sia possibile continuare ad usare mount/umount
per connettere e disconnettere le condivisioni windows. La sintassi dei comandi mount
e umount
non cambia, bisogna solo avere l'accortezza di specificare -t smbfs
invece di -t cifs
, nonché consultare il manuale per vedere quali opzioni sono supportate da SMBFS e quali no.
Alternativamente è possibile usare i comandi smbmount
e smbumount
, dalla sintassi molto simile a mount
e umount
. Per montare ad esempio una risorsa di nome shared:
$ smbmount //SERVER/shared /path/del/mountpoint
(come password digitiamo quella dell'user creato con smbpasswd o solo invio)
Così facendo potremmo accedere alla risorsa condivisa, raggiungendo il mountpoint:
$ cd /path/del/mountpoint $ ls directory free_kevin.png pokemon.png dorothy_la_may.gif
In alternativa:
mount -t smbfs -o username=username_valida,password=password_valida //SERVER/shared /mnt/punto_di_mount
Per fare in modo che la nostra Debian monti automaticamente all'avvio la risorsa condivisa Windows, dobbiamo modificare il file /etc/fstab, il file che contiene tutte le informazioni sui filesystem montati:
# nano /etc/fstab
Alla fine del file aggiungiamo la riga:
//SERVER/shared /mnt/punto_di_mount smbfs username=username_valida,password=password_valida 0 0
Sono semplicemente applicativi che permettono essenzialmente di copiare da o su una risorsa remota file e cartelle. Mentre in windows esplora risorse permette di norma di rendere disponibile le varie risorse remote a qualsiasi programma in esecuzione come se si trovassero fisicamente sul computer, su linux purtroppo questo non è sempre vero. In quest'ultimo caso perché le risorse remote siano accessibili come quelle locali è necessario "montarle" nel proprio filesystem attraverso appositi applicativi e procedure descritte nella prossima sezione di questa guida Montare le risorse remote nel filesystem locale.
Nautilus
Per accedere alle condivisioni windows esistono tre strade:
- Selezionare la voce Vai --> Rete perché compaia l'elenco delle reti disponibili. Si noti che il server samba sarà accessibile cliccando su "Reti Windows", visto che relativamente alla condivisione di file, stampanti, ecc. samba "emula" una macchina sui cui è installato windows. È possibile che arrivati a cliccare sul nome del computer con le risorse desiderate si riceva il seguente messaggio: Impossibile montare la posizione recupero dell'elenco delle condivisioni dal server non riuscito. In tal caso provare usando un diverso metodo.
- Selezionare la voce File --> Connetti al server... e nella maschera che compare selezionare condivisioni windows, così facendo questa cambierà mostrando altri campi da compilare come segue:
- Server: l'hostname della macchina su cui risiede la cartella che si vuol vedere (e che deve ovviamente essere già configurata correttamente nel file smb.conf di quella macchina).
- Porta: parametro non editabile.
- Condivisione: il nome della cartella che si vuol vedere (è il nome definito per la suddetta cartella nel file smb.conf della macchina che ospita la suddetta cartella).
- Cartella: lasciare pure /.
- Nome del dominio: il nome del proprio dominio o del proprio gruppo di lavoro. Il valore predefinito per il gruppo di lavoro è WORKGROUP, tuttavia sarà necessario inserire il nome del gruppo di lavoro definito nel solito file smb.conf della macchina su cui risiede la cartella.
- Nome Utente e Password, sono abbastanza intuitivi, si sottolinea solo che devono essere quelli definiti con smbpasswd.
- Premere
CTRL+L
per rendere editabile la barra degli indirizzi e digitaresmb://nome_server
in modo da visualizzare tutte le cartelle condivise dal server nome_server (posto che sia permessa la visualizzazione delle risorse per un utente non autenticato). A questo punto è sufficiente fare doppio click sulle singole cartelle perché si apra una maschera in cui si chiede nome utente, password e nome del dominio o gruppo di lavoro (occhio a non inserirlo errato, per esempio "MIO GRUPPO" è differente da "MIO_GRUPPO"...). Lo stesso risultato si sarebbe potuto ottenere digitando direttamente nella barra degli indirizzismb://nome_server/nome_cartella
. Se si sbaglia ad inserire uno dei precedenti dati, o se si tenta di montare una seconda cartella per cui sono richieste credenziali differenti dalla prima si riceverà il messaggio: Errore: Non è stato possibile montare la condivisione Windows. Selezionare un altro visualizzatore e tentare di nuovo.
Smbclient
Installazione:
# apt-get install smbfs cifs-utils smbclient
Come detto in precedenza, smbclient è un programma client ftp-like, utilizzato per l'accesso a un server Samba. Si osservino i suoi principali flags e, una volta effettuato il login sul server, le sue principali funzioni.
Principali parametri (flags)
(Usare smbclient --help
per l'elenco completo' dei parametri'):
smbclient -L hostname
: elenca tutte le risorse condivise di una certa macchina. Ad esempio dal terminale della macchina client dell'utente (come password digitiamo quella dell'user creato con smbpasswd o solo invio) scrivere:
$ smbclient -L SERVER Password: **** Domain=[debianizzati] OS=[Unix] Server=[Samba 3.0.14a-Debian] Sharename Type Comment --------- ---- ------- shared Disk Directory Shared canon Disk Canon Printer dvd Disk Lettore DVD-R IPC$ IPC IPC Service (server@debianizzati.org) ADMIN$ IPC IPC Service (server@debianizzati.org) Domain=[debianizzati] OS=[Unix] Server=[Samba 3.0.14a-Debian] Server Comment --------- ------- SERVER server@debianizzati.org CLIENT server@debianizzati.org Workgroup Master --------- ------- debianizzati SERVER
Come si vede, nella colonna Sharename sono elencati i nomi delle risorse definite in /etc/samba/smb.conf
, quindi la directory shared,la stampante e il lettore DVD (le sezioni [global]
e [printers]
non sono visibili poiché sono sezioni di parametri usate dal programma).
Nella colonna Server sono invece elencati gli host facenti parte del medesimo gruppo di lavoro (workgroup).
C'è poi la colonna Workgroup che visualizza l'host con ruolo di domain master browser nella subnet.
smbclient -L ////hostname -U nome_utente
: come sopra, ma limita l'output alle cartelle che sono visibili all'utente nome_utente (nel caso quindi non tutti gli utenti siano in grado di vedere tutte le cartelle condivise).
Accesso al server
Per accedere effettivamente alle risorse condivise è necessario digitare:
$ smbclient servizio password -U nome_utente
- servizio: può essere la risorsa condivisa, ad esempio
//nome_server/cartella_condivisa
, dove cartella_condivisa è il nome specificato in samba per la cartella in questione; notare che se la cartella /home/sempronio viene definita in samba con il nome caio allora bisognerà specificare come servizio//nome_server/caio
(usare un IP al posto del nome del computer potrebbe comportare la generazione di un errore). - password: è evidentemente quella definita in precedenza per l'utente; se omessa all'utente verrà richiesto di inserirla.
- nome_utente: lo username dell'utente da usare, se omesso come primo tentativo verrà usato lo username dell'utente sulla macchina client.
In caso di connessione riuscita la videata dovrebbe apparire simile a quanto segue:
$ smbclient //SERVER/shared Password: **** Domain=[SERVER] OS=[Unix] Server=[Samba 3.0.14a-Debian] smb: \>
Qualora si ricevesse il seguente messaggio d'errore:
Domain=[vostro_dominio] OS=[Unix] Server=[Samba 3.5.11] tree connect failed: NT_STATUS_ACCESS_DENIED
si veda l'ultima pagina di questa guida, ovvero quella dedicata alla risoluzione dei problemi.
Il prompt smb: \>
indica che l'utente si trova nella risorsa condivisa richiesta al server Samba (il cui hostname d'esempio è SERVER). Sostanzialmente il funzionamento di smbclient è analogo a quello di un client ftp, ma con in più degli utilissimi tools per il down/uploading dei file.
Alcuni input uguali a quelli di una shell di bash sono: ls, cd, rm, rmdir, exit, coi quali l'utente dovrebbe avere già confidenza.
È comunque possibile ottenere una lista di comandi utili digitando help.
Download di un file con get.
Poniamo come esempio che il contenuto della directory condivisa sia un insieme di file immagine con diverse estensioni e una directory con dentro qualsiasi cosa:
smb: \> ls . D 0 Tue Aug 23 23:57:51 2005 .. D 0 Wed Aug 17 03:05:20 2005 directory D 0 Wed Aug 24 12:21:43 2005 free_kevin.png 42604 Mon Aug 22 12:19:34 2005 pokemon.png 43404 Mon Aug 22 15:15:11 2005 dorothy_la_may.gif 46134 Mon Aug 21 21:16:00 2005
Scarichiamo il file free_kevin.png dalla macchina SERVER alla nostra macchina CLIENT, rinominandolo in kevin.png:
smb: \> get free_kevin.png kevin.png getting file \ free_kevin.png of size 42604 as kevin.png(1386.8 kb/s) (average 1386.8 kb/s)
Il file sarà salvato nella directory dalla quale ci siamo connessi al server. Qualora il file non venisse rinominato manterrebbe il proprio nome.
Alcune funzioni
lowercase
: abilita i file ad essere richiamati da get e mget utilizzando solo caratteri minuscoli. È utile viste le difficoltà spesso trovate negli share MSDOS (case insensitive).
es. di abilitazione dei parametri: smb: \> lowercase on smb: \> prompt on
prompt
: impostando prompt su on prima di ogni trasferimento ci verrà richiesta una conferma;showconnect
: mostra l' //host/nome_risorsa in uso:
smb: \> showconnect //SERVER/shared
stat nomefile
: stampa a video i permessi di un file e offre, in ordine temporale, info sugli accessi ad esso:
smb: \> stat free_kevin.png File: \free_kevin.png Size: 101 Blocks: 8 regular file Inode: 810 Links: 1 Access: (0644/-rw-r--r--) Uid: 1000 Gid: 1000 Access: 2005-08-24 00:10:39 +0200 Modify: 2005-08-24 00:10:51 +0200 Change: 2005-08-24 00:10:51 +0200
Mask, mget e recurse
Con il comando mget abilitiamo il download di tutti i file e directory in maniera ricorsiva. Tuttavia possiamo dare a tale comando un parametro (maschera) utilizzando mask . Es. nella nostra directory mettiamo di voler scaricare tutti i file con estensione .png:
smb: \> mask *png smb: \> mget
In questo modo mget intenderà scaricare tutti i files con tale estensione presenti nella directory corrente. Tuttavia con mget è possibile modificare la maschera on-fly digitando semplicemente:
smb: \> mget *png
In questo modo la funzione mask, manterrà il suo valore di default che è '*' (cioè tutto). La funzione recurse on attiva lo scanning & downloading (nel caso di una maschera) o il downloading, accedendo anche a tutte le directory presenti nella directory da cui parte il comando.
Web
Se sulla macchina ospitante le risorse è stato installato anche 'smb2www allora è possibile accedere alle condivisioni sfruttando un qualsiasi browser; è sufficiente aprirlo e nella barra degli indirizzi digitare:
http://ip-del-vostro-server/cgi-bin/samba/smb2www.pl
Una cosa comoda è il fatto che cliccando sul link Download this Directory è possibile scaricare l'intero contenuto in formato .tar della cartella condivisa in cui si sta navigando.
Altri client
Quelli appena descritti non sono gli unici esistenti, a titolo d'esempio si citano:
- Samba Commander, interfaccia testuale
apt-get install smbc
- TkSmb, interfaccia grafica dipendente da smbclient disponibile fino a Debian Lenny
apt-get install tksmb
- xSMBrowser, interfaccia grafica disponibile fino a Debian Squeeze
apt-get install xsmbrowser
- pyneighborhood, interfaccia grafica in grado di mostrare tutti i gruppi di lavoro Windows presenti nella nostra rete e, per ciascuno, i server e le risorse condivise, che sarà possibile montare con un click fornendo le corrette credenziali di autenticazione
apt-get install pyneighborhood
Windows
Non c'è nulla da configurare, in Windows è già tutto automatizzato. L'utente non deve far altro che cliccare sulla voce rete per visualizzare le risorse disponibili; al più viene richiesto di inserire manualmente l'indirizzo del server, per esempio digitando nella barra degli indirizzi \\nome_server
o direttamente l'IP dello stesso.
Si ricorda che non è possibile accedere durante la stessa sessione utente a cartelle per cui sono richieste credenziali differenti, ovvero una volta fatto l'accesso ad una certa cartella sarà possibile accedere solo a cartelle per cui valgano le stesse credenziali, anche se si conoscono le credenziali per accedere ad altre cartelle.
Da Linux a Windows
L'intera guida presuppone che client di vario tipo debbano accedere a file e cartelle presenti su un server Linux, e non il contrario. Ciò nonostante si ritiene utile precisare alcuni elementi per quegli utenti che si trovino anche a dover accedere da client linux a windows:
- Quando si condivide una cartella da windows, di base a questa vengono concessi semplicemente i privilegi di lettura, quindi un utente che necessiti anche di scrivere su tali posizioni dovrebbe controllare che permessi e utenti specificati nelle schede "condivisione" e "protezione" siano adeguati.
- Windows ha il brutto vizio di rendere visibili anche le lettere delle unità associate ai dischi fisici, nonostante l'utente non abbia mai dato esplicito permesso per tutto ciò. Perché ciò non avvenga è necessario editare il registro di windows aggiungendo una nuova chiave in
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanManServer\Parameters
:- Type: DWORD.
- Name: AutoShareWks.
- Value: 0.