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
# http://www.samba.org/samba/docs/man/manpages-3/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' :-P