Cerchiamo di fare chiarezza su come sia possibile gestire le ACL per le share di Samba.
Per fare questo è indispensabile premettere alcuni concetti fondamentali:
– le acl nel mondo Linux sono DIVERSE rispetto al mondo Windows
– le acl linux dette anche “internals” vengono gestire tramite la sintassi User|Group|Other
(un singolo utente è il proprietario del file/cartella, un singolo gruppo è il proprietario del file/cartella)
– le acl Windows consentono di avere più utenti/gruppi proprietari di file/cartelle
Cerchiamo di fare chiarezza su come sia possibile gestire le ACL per le share di Samba.
Per fare questo è indispensabile premettere alcuni concetti fondamentali:
– le acl nel mondo Linux sono DIVERSE rispetto al mondo Windows
– le acl linux dette anche “internals” vengono gestire tramite la sintassi User|Group|Other
(un singolo utente è il proprietario del file/cartella, un singolo gruppo è il proprietario del file/cartella)
– le acl Windows consentono di avere più utenti/gruppi proprietari di file/cartelle
Il mondo Linux mette però a disposizioni alcune diverse soluzioni per consentire di gestire le acl linux allo stesso modo (più o meno) delle acl windows.
Metodo 1 – gestione tramite le sole ACL a livello di filesystem
Abilitare le acl a livello di filesystem
# cat /etc/fstab | grep acl UUID=afdf16a9-30b9-445f-aa10-e1ae360eb71d /condivisioni ext4 rw,acl 0 2
Configurare la share di samba per consentire l’ereditarietà delle acl
[archivi1] # descrizione della condivisione comment = Archivio storico # percorso della condivisione path = /condivisioni/archivi1 # utenti abilitati a modificare le acl admin users = "@domain admins" # consento agli utenti di accedere in scrittura e lettura # nb. le permission vengono gestite a livello di acl locale read only = No # imposto la maschera di default per la creazione di nuovi file create mask = 0774 # imposto la maschera di default per la creazione di nuove cartelle directory mask = 0775 # abilito l'ereditarieta' dei permessi inherit owner = yes inherit acls = yes inherit permissions = yes
Metodo 2 – gestione tramite il modulo acl_xattr di Samba
NB. è indispensabile abilitare sia le acl che le user_xattr a livello di filesystem.
# cat /etc/fstab | grep acl UUID=afdf16a9-30b9-445f-aa10-e1ae360eb71d /condivisioni ext4 rw,acl,user_xattr 0 2
Configurare la share di samba per consentire l’ereditarietà delle acl
[nomeshare] comment = descrizione della share path = /percorsodellacartellacondivisa invalid users = root # consento solo agli amministratori di modificare le ACL admin users = "@domain admins" read only = No # https://www.samba.org/samba/docs/current/man-html/vfs_acl_xattr.8.html # la documentazione di samba riporta che il modulo e' "experimental" # ma dalle prove che ho fatto sembra funzionare tutto correttamente. # # alla cartella "percorsodellacartellacondivisa" verranno impostati in automatico # i relativi permessi Unix e le relative ACL M$ durante il normale utilizzo da un # qualsiasi client M$ vfs objects = acl_xattr # faccio in modo che a ogni nuovo file/cartella creato vengano essegnati i permessi 0750 force security mode = 0750 # per far mappare l'ereditarietà dei permessi map acl inherit = Yes
NB. I primi due metodi presentano i medesimi vantaggi/svantaggi
Vantaggi:
– le performance generali dipendono dal numero di acl impostate per ogni file/cartella
– per quanto riguarda i backup bisogna fare le dovute considerazioni per tenere traccia delle acl esistenti
– le acl possono essere impostate da riga di comando
Svantaggi (dipende dai punti di vista):
– tutti gli utenti abilitati possono variare le ACL tramite interfaccia grafica
Come preparare il backup ed effetturare il restore delle ACL ?
getfacl -R * > archivio.acl
– il comando legge tutte le acl ricorsivamente per tutti i file/cartelle e li salva in un file di nome archivio.acl
– il file archivio.acl deve ovviamente essere “backuppato”
setfacl setfacl --restore=archivio.acl
ripristina tutte le acl contenute nel file archivio.acl
Metodo 3 – gestione le acl senza ACL !!
NB. NON serve abilitare le acl a livello di filesystem.
# cat /etc/fstab | grep acl UUID=afdf16a9-30b9-445f-aa10-e1ae360eb71d /condivisioni ext4 rw 0 2
Configurare la share di samba SENZA abilitare l’ereditarietà delle acl
[archivi1] # descrizione della condivisione comment = Archivio storico # percorso della condivisione path = /condivisioni/archivi1 # utenti abilitati a modificare le acl admin users = "@domain admins" # consento agli utenti di accedere in scrittura e lettura # nb. le permission vengono gestite a livello di acl locale read only = No # imposto la maschera di default per la creazione di nuovi file create mask = 0774 # imposto la maschera di default per la creazione di nuove cartelle directory mask = 0775
Impostare il SGID a livello di gruppo http://wiki.samba.org/index.php/Frequently_Asked_Questions#inherit_permi…
# chmod g+s /condivisioni/archivi1
Assegnare i gruppi alle varie sottocartelle e i relativi permessi
# chgrp "permessi - assistenza organi" /condivisioni/archivi1/RegolamentiComunali # chmod 775 /condivisioni/archivi1/RegolamentiComunali
Vantaggi:
– migliori performance generali (sia lato client che lato server)
– minori problemi nella gestione dei backup delle acl
– l’impostazione degli accessi viene gestita SOLO dagli amministratori di rete
Svantaggi:
– tutte le regole di accesso vanno impostate da riga di comando
– nessuna acl può essere impostata tramite interfaccia grafica
– le uniche acl utilizzabili sono quelle appartenenti al “mondo linux”
NB. ovviamente tra le tre soluzioni nessuna puo’ essere definita ottimale, in quanto il tutto va “calato” su ogni singola realta’ 😛