Creare e gestire uno share su domain controller o membro di un dominio AD
In samba, se usato come domain controller AD, gli share fanno affidamento sulle ACL posix e su alcune ACL tipiche di Windows, non replicabili con le ACL posix, le quali vengono salvate da Samba negli attributi estesi (user_xattrs) dei files. Questi attributi sono gestiti dal modulo vfs_acl_xattr che viene caricato di default (e non e` disabilitabile) su un domain controller AD samba 4. Su un domain member, invece, è facoltativo.
Questo significa che un domain member potrà, volendo, usare una "vecchia" gestione dei permessi sugli shares, usando concetti tipici di samba 3 quali per esempio "force user" o "valid users" o "force directory mode", e NON USARE le funzioni estese del modulo vfs_acl_xattr. Su un domain member, se vogliamo usare le funzioni estese di vfs_acl_xattr, dovremo abilitarlo manualmente.
Su un domain controller, invece, e` impossibile non usare vfs_acl_xattr, e sebbene conosca almeno un setup nel quale il domain controller usa shares "alla samba 3" con abbondante uso di force user e valid users, questa sarebbeuna strada da non seguire mai.
Per riferimento:
- man vfs_acl_xattr
https://wiki.samba.org/index.php/Setting_up_a_Share_Using_POSIX_ACLs
https://wiki.samba.org/index.php/Setting_up_a_Share_Using_Windows_ACLs
Vale la pena di notare che sebbene il Wiki di Samba dica che usare le ACL Posix "a mano" ovvero non dai tool di Windows ma direttamente con "setfacl" sia da evitarsi nel caso in cui si usi il modulo vfs_acl_xattr (ovvero per esempio su un domain controller), in realtà sembra che sia possibile farlo, accontentandosi di alcuni comportamenti di default (vedi il man di vfs_acl_xattr), sempre ovviamente se questi comportamenti ci stanno bene.
Creare uno share
- Creare la entry per lo share in smb.conf. Notare la voluta semplicita` della entry. Si suppone che sia caricato il modulo acl_xattr globalmente.
[global] # fra gli altri parametri, abilitato globalmente acl_xattr. # (o perché specificato, o perché forzato dal fatto di essere un domain controller) vfs objects = acl_xattr # share di esempio [documenti] path = /ud0/documenti read only = no store dos attributes = yes # solo necessaria per samba piu` vecchia di 4.9.0 map acl inherit = yes
- Fare rileggere la config a Samba:
smbcontrol all reload-config
Gestire le ACL da Windows
Se vogliamo gestire le ACL da Windows (cosa che il wiki di Samba consiglia in ogni caso, e che permette la massima fedeltà rispetto al comportamento di un server Windows vero) a questo punto dobbiamo assicurarci che un utente o un gruppo abbia il diritto di manipolare i permessi dei files, mediante il privilegio apposito SeDiskOperatorPrivilege. Vedi la sezione "Operazioni Iniziali"
Dare i permessi minimi alla directory
Creiamo la directory come definita nello share, e diamo il permesso di base al gruppo che abbiamo definito prima come quello che puo` modificare le ACL, in questo caso e` "Domain Admins". La logica e` che il gruppo in questione deve avere "rwx" sulla directory.
mkdir /ud0/documenti chown root /ud0/documenti chgrp "Domain Admins" /ud0/documenti chmod 0770 /ud0/documenti
Gestire i permessi
Ora possiamo gestire i permessi usando un client Windows joinato al dominio, ovviamente loggandoci come un utente che e` parte del gruppo "Domain Admins".
- Aprire "Gestione computer", scegliere "Azione", e poi "connetti ad un altro Computer", quindi inserire il nome del server Samba.
- Sotto "Utilità di sistema" / "Cartelle condivise" / "Condivisioni" troveremo elencati i nostri share del server Samba.
- Facendo doppio click sullo share, si apre una maschera.
- Verificare sotto "Autorizzazioni Condivisione" che "Everyone" abbia tutto selezionato, ovvero "controllo completo", "modifica" e "lettura". Qui non ci serve altro.
- Cliccare sul tab "Sicurezza", qui dobbiamo definire i diritti di accesso
- Diamo al gruppo "Domain Users", o ad altro gruppo che userà lo share, tutti i permessi escluso "Full Control", su tutti gli oggetti (la cartella selezionata, sottocartelle, files). Nota: è necessario che abbia permessi anche su "la cartella selezionata" altrimenti non riesce ad accedere al contenuto. Non deve avere "Full control" altrimenti può sfasciare tutto.
- Assicuriamoci che "Domain admins" abbia tutto, compreso "full control", ed escluso "Autorizzazioni speciali", su tutti gli oggetti (la cartella selezionata, sottocartelle, files)
Se non c'è già, aggiungiamo l'utente speciale "system" con tutto escluso sempre "Autorizzazioni speciali". (Vedi https://wiki.samba.org/index.php/The_SYSTEM_Account)
- L'utente speciale "CREATOR OWNER" dovrebbe avere "full control" su tutto tranne "questa cartella"
Nota: Se quando applichiamo le modifiche riceviamo questo errore assurdo qui: Il criterio di controllo corrente per il computer specificato non ha attivato il controllo. Se il criterio di protezione dei computer proviene dal dominio, chiedere a un amministratore di dominio di attivare l' Editor criteri di gruppo. In caso contrario, utilizzare l' Editor criteri del computer locale per configurare i criteri di controllo del computer localmente. allora ci manca un permesso nel path precedente a quello su cui stiamo lavorando, oppure stiamo cercando di togliere un permesso che è implicito nel file system (per esempio, lo user "root" che coincide con administrator, e che e` owner del file su Linux). In questo caso, proviamo a dare all'utente "administrator" il controllo completo su "la cartella selezionata".
Le modifiche che apportiamo qui, compariranno sia nelle ACL del file system sotto linux (verificabili con un getfacl) sia dentro degli appositi attributi estesi, che conterranno quelle caratteristiche che non sono proprie delle ACL Posix. Questi attributi estesi possono essere letti da Linux con il comando "samba-tool ntacl get /path/che/ci/interessa --as-sddl". Stando al Wiki di Samba, l'output di questo comando sarebbe "comprensibile". A me non sembra che lo sia, ma forse sono ignorante in materia di gestione dei file system di Windows.
Gestire le ACL da Linux
Se vogliamo gestire le ACL da Linux, possiamo provare cosi` (e casomai poi da Windows vediamo cosa esce):
- Prima di tutto creiamo la directory come definita nello share, e diamo il permesso di base al gruppo "Domain Admins". La logica e` che il gruppo in questione deve avere "rwx" sulla directory.
mkdir /ud0/documenti chown root /ud0/documenti chgrp "Domain Admins" /ud0/documenti chmod 0770 /ud0/documenti
- Poi diamo i permessi per mezzo delle ACL Posix, cosi`
# configurazione di base con solo domain admins: setfacl -m g:"domain admins":rwx documenti setfacl -m d:g:"domain admins":rwx documenti # aggiunta dei permssi per domain users: setfacl -m g:"domain users":rwx documenti setfacl -m d:g:"domain users":rwx documenti # impediamo a tutti gli altri di fare qualsiasi cosa: setfacl -m other:--- documenti setfacl -m d:other:--- documenti