In questo articolo parleremo della condivisione di file tra macchine Linux e Windows tramite Samba.
Samba è il progetto Open Source che fornisce la condivisione di file e stampanti in una rete composta da host windows e host linux.
Esso sfrutta il protocollo SMB Common Internet File System (CIFS) e garantisce l’interoperabilità per i servizi di condivisione.
Iniziamo ad installarlo su RHEL 6 o CentOS 6:
# yum install samba
Il file di configurazione su cui andremo a lavorare sarà smb.conf che si trova nel percorso /etc/samba quindi per precauzione possiamo farne una copia:
# cd /etc/samba
# cp smb.conf smb.conf.orig
Andiamo a vedere la struttura di questo file;
Nella sezione Global Setting troviamo alcuni parametri cui possiamo personalizzare:
- workgroup: Definisce il nome del gruppo di lavoro in cui la macchina Samba sarà inserita
- server string: Definisce la descrizione della macchina
- netbios name: Definisce il nome da dare alla macchina
- interfaces: Definisce su quale interfacce di rete Samba si metterà in ascolto.
- hosts allow: Definisce gli host che possono accedere alla macchina
- security: Di default è user ossia indica che la risorsa condivisa e il suo contenuto siano disponibili solamente dopo la corretta autenticazione.
- passdb backend = tdbsam: Definisce che il sistema dia autenticazione cripterà le password e utilizzerà il database locale
Andiamo ora a vedere quali sono i parametri per effettuare le varie condivisioni, spostandosi alla fine del file:
- [nome condivisione] : Definisce il nome della risorsa condivisa
- path : Definisce il percorso della risorsa
- comment : Possiamo affiancare al nome della risorsa anche una breve descrizione del contenuto
- browseable : Indica se la risorsa può essere visualizzata da tutti gli utenti
- read only : Indica se rendere disponibile la risorsa in sola lettura
- writable : Indica se rendere disponibile la risorsa in scrittura
- public : Indica se la risorsa è accessibile a tutti o meno
- valid users : Indica per quali utenti o gruppi la risorsa può essere accessibile
- create mask : Definisce quali permessi devono avere i file creati nella risorsa
- directory mask: Definisce quali permessi devono avere le cartelle create nella risorsa
Fatta questa presentazione andiamo a vedere come implementare quello che abbiamo detto, andando a condividere la Directory /dati.
Innanzitutto creiamo la Directory:
# cd /
# mkdir dati
Andiamo adesso a creare la condivisione in fondo al file smb.conf:
[dati]
path = /dati
comment = miei_dati
A questo punto dobbiamo creare un utente per poter accedere alla risorsa;
E’ importante ricordare che l’utente che si aggiunge deve essere presente localmente nel sistema quindi nel file /etc/passwd.
NON possiamo aggiungere un utente samba che non è presente sul sistema.
Creiamo l’utente michele con la relativa password di samba per quanto riguarda l’accesso alla risorsa /dati.
Questa password non ha nulla a che vedere con la password di login nel sistema.
# useradd michele
# smbpasswd -a michele
Fatto ciò riavviamo il servizio:
# service smb restart
E la risorsa risulta essere pronta.
Il collegamento alla risorsa da una macchina Windows viene fatto nel seguente modo:
Start–> Esegui –> \\IP_Server_Samba ( Nel nostro caso è \\192.168.0.34 )
Ci verrà chiesta la Login:
E vedremo la nostra risorsa:
Se avete SELinux abilitato dovete impostare il contesto “samba_share_t” altrimenti quando provate ad entrare nella risorsa vi darà errore:
# chcon -R -t samba_share_t /dati
Se non volessimo Visualizzare la home dell’utente basterà commentare le seguenti righe:
Riavviamo samba e facendo un refresh da Windows sulla risorsa la Directory michele non sarà più visibile:
Per accedere alla risorsa da un altra macchina Linux utilizzeremo il comando smbclient con l’opzione -L Indirizzo IP della macchina Samba e –user=username
# smbclient -L 192.168.0.34 –user=michele
Come vediamo abbiamo la risorsa /dati, procediamo cosi al suo montaggio tramite il protocollo CIFS in una Directory del sistema per esempio in /tmp/dati
# mount -t cifs //192.168.0.34/dati /tmp/dati -o user=michele
Se ci troviamo davanti ad un errore simile:
Molto probabilmente dobbiamo installare il pacchetto cifs-utils tramite il comando yum:
# yum install cifs-utils
Al prossimo tentativo il montaggio viene effettuato senza problemi:
In questa risorsa vediamo che possiamo accedere in sola lettura, non possiamo scrivere sulla risorsa
Vediamo quindi come poter consentire all’utente michele di poter scrivere i propri file all’interno della condivisione.
Andiamo nel file smb.conf e inseriamo il permesso di scrittura per l’utente michele aggiungendo la seguente stringa:
write list = michele
Riavviamo il servizio e proviamo a creare o copiarci un file al suo interno.
Ci troveremo davanti al seguente errore:
Come mai??? Abbiamo impostato correttamente il permesso di scrittura sulla risorsa!!!!
Ma questo non basta perchè i permessi sul file system sono a livello più basso rispetto a Samba che lavora a livello applicativo e chi “comanda” è chi sta a livello più basso ossia in questo caso i permessi sul file system.
Quindi a livello di file system dobbiamo dare il permesso di scrittura all’utente michele tramite le ACL:
# setfacl -m u:michele:rwx /dati
A questo punto l’utente michele avrà il permesso anche di scrittura.
Se proviamo ad accedere con un altro utente avremo solamente i permessi di lettura.
Come facciamo ad accedere con un altro utente visto che una volta inserite le credenziali non ci vengono più richieste??
Dovete sapere che Windows mantiene le credenziali di accesso anche se non si è messo il segno di spunta su “Memorizza Password”.
Dunque per fargli eliminare le credenziali si deve andare nel prompt dei comandi e digitare la seguente stringa:
# net use * /d /y
Al prossimo tentativo di Login ci verrà mostrata la finestra dove inserire le credenziali d’accesso.
Possiamo creare più risorse e con i parametri descritti sopra possiamo impostare i giusti permessi.
Vediamo l’esempio in cui creiamo la risorsa “/fatture”
La rendiamo accessibile in sola lettura al gruppo studenti
Diamo il permesso di scrittura solamente a michele
Non facciamo vedere la risorsa creata precedentemente /dati
Questo è come si compone la struttura del file smb.conf:
Adesso creiamo i rispettivi utenti o se l’abbiamo gia fatto associamo nicola al gruppo studenti:
Creiamo la risorsa /fatture con il relativo contesto e impostiamo i permessi di lettura e scrittura per tutto il gruppo studenti tramite ACL.
Noi preferiamo impostare le ACL ma volendo si potrebbe anche cambiare gruppo alla Directory /fatture ( da root a studenti tramite il comando chgrp ) assegnando i permessi 775.
Associamo i 2 utenti alla risorsa samba se non l’abbiamo gia fatto precedentemente:
# smbpasswd -a michele
# smbpasswd -a nicola
Riavviamo samba e vedremo che l’utente michele avrà solamente i permessi di lettura mentre nicola che fa parte del gruppo studenti avrà anche i permessi di scrittura
Con i parametri descritti sopra e con l’aiuto degli esempi del file smb.conf è abbastanza semplice creare le configurazioni a noi più appropriate.
Abbiamo parlato degli utenti ( utenti samba ) che si devono aggiungere per le risorse condivise al momento della login tramite l’uso del comando smbpasswd.
Per visualizzare gli utenti che abbiamo inserito useremo il comando con l’opzione -L:
# pdbedit -L
Per eliminare gli utenti che abbiamo inserito useremo il comando con l’opzione -x nomeutente:
# pdbedit -x michele
Tornando al file smb.conf possiamo cambiare anche i parametri su Global:
Per fare un esempio:
Vogliamo che la workgroup si chiami: WORKGROUP
Il nome del server sia: Samba
La descrizione sia: Server-Dati
Che solamente il client 192.168.0.2 possa usufruire delle risorse:
Modifichiamo il file smb.conf alla sezione Global:
Riavviamo il servizio e se proviamo ad accedere da un host con ip diverso da 192.168.0.2 avremo il seguente messaggio di errore:
Tutto il resto viene confermato rendendo accessibile la ristosa dall’host con ip 192.168.0.2:
Da una macchina Client Linux potremmo aver bisogno di avere la condivisione /fatture gia pronta senza stare a montarla tutte le volte, e questo lo facciamo tramite il file /etc/fstab modificandolo nel seguente modo:
Nel file /etc/login scriveremo:
username=nicola
password=miapassword
Per verificare diamo il seguente comando:
# mount -a
Se non abbiamo alcun output significa che non si è riscontrano alcun problema.
Infine le regole per il firewall iptables sono le seguenti:
# iptables -A INPUT -p tcp –dport 139 -j ACCEPT
# iptables -A INPUT -p tcp –dport 445 -j ACCEPT
Per concludere tutti i log di samba sono presenti nella cartella /var/log/samba dove troviamo le operazioni sui protocolli SMB/CIFS e per ogni connessione instaurata viene creato un file di log struttrato nel seguente modo: log.[ Indirizzo IP ]