Creazione di una share Samba integrata con Windows

Dopo aver visto nel precedente articolo come installare Samba e diventare membri di un dominio Active Directory, ora possiamo concentrarci sulla creazione della share di tipo SMB/CIFS.

Come preannunciato, il file system dove andremo a creare la cartella deve permettere l’uso delle ACL e degli attributi estesi. Se il vostro file system è XFS non c’è nulla da fare perchè esso è già predisposto mentre se usare EXT4 dovrete montare il file system con le opzioni acl,user_xattr.

Supponiamo che la nostra cartella si chiamerà /condivisioni/prodotti

Dunque creiamo la cartella condivisioni e la sotto cartella prodotti

mkdir -p /condivisioni/prodotti

Ora creiamo un file dove inseriremo i parametri della nostra share Windows.
Il file si chiamerà /etc/samba/shares.conf, in questo file mettiamo questo codice:

[prodotti]
path = /condivisioni/prodotti
read only = no
force create mode = 0660
force directory mode = 0660
acl_xattr:ignore system acl = yes
vfs objects = acl_xattr full_audit
full_audit:failure = connect opendir disconnect unlink mkdir rmdir open rename

Nella prima riga troviamo il nome della share: siccome il nostro server si chiama LinuxFiles sarà possibile raggiungere la condivisione usando il percorso //LinuxFiles/prodotti oppure //LinuxFiles.greensys.local/prodotti
Nella riga successiva indichiamo il percorso del file system dove si troverà la share Windows.
Con la terza riga dichiariamo che la share in questione è scrivibile ossia è possibile crearci dentro file, togliere e mettere elementi (se si avranno i permessi Windows giusti chiaramente), in assenza di tale riga pur avendo i permessi di scrittura lato Windows non saremo in grado di apportare modifiche al contenuto.
Le linee “force create mode” e “force directory mode” consentono di forzare dei permessi lato Linux incurante di quelli di default di Windows. Mettendo 0660 per esempio impediamo ad altri utenti di cancellare i file che non siano l’owner del file o non appartenenti al suo gruppo di riferimento.
Successivamente abbiamo posto “acl_xattr:ignore system acl = yes”, mettendo yes la mappatura delle ACL POSIX non verrà eseguito dal modulo acl_xattr. Se si accede ai dati solo tramite Samba, è caldamente consigliato impostarlo su yes per ottenere una migliore compatibilità con ACL NT (Windows). Suggerisco sempre di usare queste share solo da server che usano utenti Active Directory per accedervi altrimenti si possono riscontrare delle ACL alquanto bizzarre.
La riga con vfs objects dove c’è acl_xattr ci serve per indicare di memorizza le ACL NTFS negli attributi estesi (EA). Ciò consente la mappatura completa delle ACL di Windows sui server Samba. Per quanto riguarda invece full_audit serve per registrare le operazioni Samba VFS nei log di sistema. Infatti nella riga successiva specifichiamo di voler raccogliere i dati relativi agli insuccessi (failure) delle operazioni: connect, opendir, disconnect, unlink, mkdir, rmdir, open, rename.

Chi ha avuto a che fare con condivisioni SAMBA avrà notato l’assenza delle tipiche voci “valid users”, “write list” questo perchè i permessi abbiamo deciso di assegnarli mediante client Windows e questo è un vantaggio enorme perchè vi leva l’incombenza di modificare questo file a mano ogni volta che si aggiunge un utente o un gruppo.
Per garantire una gestione delle ACL da Windows è sufficiente assegnare il proprietario della cartella /condivisioni/prodotti.

Prima dobbiamo lanciare questo comando sul file server:

net rpc rights grant "GREENSYS\gr-linux-adm" SeDiskOperatorPrivilege -U "GREENSYS\administrator"

“GREENSYS\gr-linux-adm” rappresenta il gruppo di utenti Active Directory che potranno gestire le share SMB/CIFS sul nostro file server.
L’ultima parte del comando serve perchè per lanciarlo è necessario avere privilegi di Domain Admin o di ammistratore locale sul server, per tagliare la testa al toro usiamo l’account Administrator del dominio.

Supponiamo che “GREENSYS\user-linux-adm” sia un utente di Active Directory, ora assegniamo il proprietario della cartella:

chown “GREENSYS\user-linux-adm”:”GREENSYS\gr-linux-adm” /condivisioni/prodotti
chmod 0770 /condivisioni/prodotti

Tutti i membri di “GREENSYS\gr-linux-adm” potranno modificare i permessi della share e assegnare diritti d’accesso, scrittura, lettura nelle sottocartelle.

File /etc/samba/smb.conf

Non abbiamo ancora terminato la configurazione, vi ricordate che abbiamo fatto una copia di backup del file /etc/samba/smb.conf?
Ora procediamo alla modifica di questo file inserendo alcune voci, alcune di queste sono già presenti e sono state valorizzare in fase di join al dominio.
Ricordiamoci di sostituire le occorrenze di GREEENSYS.LOCAL o greensys con il vostro dominio.

[global]
        bind interfaces only = Yes
        interfaces = lo ens192
        kerberos method = secrets and keytab
        realm = GREENSYS.LOCAL
        security = ADS
        template homedir = /home/%U@%D
        template shell = /bin/bash
        username map = /etc/samba/user.map
        winbind refresh tickets = Yes
        workgroup = GREENSYS
        idmap config greensys : backend = autorid
        idmap config greensys : range = 2000000-2999999
        idmap config * : range = 10000-999999
        idmap config * : backend = autorid
        include = /etc/samba/shares.conf
        map acl inherit = Yes

L’importante è l’inclusione del file /etc/samba/shares.conf che abbiamo fatto usando il parametro “include”.
E’ altrettanto importante aggiungere la riga “map acl inherit = yes” per permettere di aggiungere le ACL ereditate agli elementi sottostanti (tipico comportamento di Windows).

Nella nostra configurazione abbiamo deciso di usare come backend autorid, autorid consente di dare degli id agli utenti Windows che si collegano al nostro server senza dover modificare gli utenti di Active directory valorizzando per esempio i cambi UID e GID così facendo potete evitare commistioni pesanti fra Linux e Active Directory ma al prezzo di non avere gli ID utente e gruppo uguali tra i membri del dominio ossia su altri server Linux joinati a dominio. Questa configurazione è quasi una scelta obbligatoria quando Active Directory è in gestione ad altri e non potete metterci mano.

Se il vostro dominio ha delle trust con altri domini e necessitate che tali utenti accedano è necessario aggiungere più righe:
idmap config GREENSYS : range = 2000000-2999999
idmap config GREENSYS : backend = autorid

dove GREENSYS va sostituito con i domini fidati (trusted). Inoltre il range non deve sovrapporsi per cui se per il dominio principale avete un range 2000000-2999999 è bene scegliere un intervallo come 4000000-4999999, lasciando anche dello spazio libero in mezzo in quanto i range devono essere contigui e se poi in futuro ci servono più numeri le cose diventano molto complicate non avendo margine.

Nella riga interfaces = lo,ens192 abbiamo specificato quali sono le interfacce di rete su cui Samba sarà in ascolto. E’ importante sostituire ens192 con il nome della scheda di rete della propria configurazione.

File /etc/samba/user.map

Abbiamo creato un file chiamato /etc/samba/user.map in cui abbiamo inserito una direttiva particolare, quella che impedisce all’utente “GREENSYS\administrator” di essere mappato come root sul server.

!root = Administrator GREENSYS/Administrator greensys.local/Administrator

Questa associazione non è indispensabile ma vi potrebbe tornare utile per fare debug, se se non usate l’account Adminstrator del vostro dominio, potete anche evitarla.

Una volta salvato il file /etc/samba/smb.conf ci conviene lanciare un testparm così da verificare che la sintassi sia corretta:

testparm /etc/samba/smb.conf

Firewall e SELINUX

Ricordatevi di abilitare le porte necessarie con firewalld:

firewall-cmd --permanent --add-service=samba
firewall-cmd --reload

Verificare le impostazioni di SELINUX, se è abilitato allora autorizzare le connessioni:

setsebool -P samba_export_all_ro=1 samba_export_all_rw=1
semanage fcontext -at samba_share_t "/condivisioni(/.*)?"
restorecon /condivisioni

Gestiamo una share CIFS su Linux con Windows

Bene ora possiamo utilizzare la nostra share di tipo Windows anche su un server Windows. Qualora si verifichino problemi all’accesso, verificare che il nome del file server sia presente sul DNS con un record A associato.

Ecco la nostra share:

Vediamo come i permessi sono impostati automaticamente:

L’utente Administrator ha assegnato dei permessi, tramite GUI di Windows, all’utente vale in modo che possa modificare il file e farci altre cose.

Lato Linux, possiamo vedere parzialmente i permessi (vediamo solo quelli non di default) col comando getfacl.

Se questo articolo ti è stato utile, considera di inviarmi una piccola donazione. Anche 100 Satoshi (Bitcoin) fanno la differenza. bitcoin: 1EpEuuttLybFkuyq4U3d2DQRSbQJXM1wKp