Menu Chiudi

SAMBA – gestire i permessi alle share tramite ACL

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’ 😛

WordPress Appliance - Powered by TurnKey Linux