Hanno detto:
Un giorno le macchine riusciranno a risolvere tutti i problemi, ma mai nessuna di esse potrà porne uno.
Argomenti nel blog
ArchLinux Small Business Server (11) - File Server (4)
E' (quasi) giunto il momento di avviare Samba, ma prima dobbiamo pianificare un po' COSA andremo a condividere e COME impostare gli accessi al file system (ACL). Quello che propongo qui è solo un esempio, i casi possono essere innumerevoli, ma secondo me questa rappresenta comunque una buona base di partenza.
Gruppi
Definiamo e creiamo un insieme di gruppi di utenti a cui poi assegnare una condivisione "privata". I nomi sono di fantasia (anche se non proprio :)):
| Gruppo | Descrizione |
| commerciale | utenti ufficio commerciale |
| tecnico | utenti ufficio tecnico |
| Domain Users | gruppo che contiene tutti gli utenti |
Domain Users è già stato creato con smbldap-populate. Ogni nuovo utente viene assegnato in modo automatico a questo gruppo.
Creiamo gli altri gruppi
sudo netgroupadd -a Commerciale
sudo netgroupadd -a Tecnico
Creiamo gli utenti
sudo netuseradd -a -m commerciale1
sudo netpasswd commerciale1
sudo netuseradd -a -m tecnico1
sudo netpasswd tecnico1
se abbiamo fatto tutto correttamente non dovrei vedere errori, controlliamo con:
sudo getent passwd
Alla fine dovrei vedere gli utenti appena creati:
commerciale1:x:5001:513:System User:/home/commerciale1:/bin/bash
tecnico1:x:5002:513:System User:/home/tecnico1:/bin/bash
Nota: come possiamo vedere ad ogni utente viene concesso l'accesso shell (/bin/bash). Se vogliamo togliere questo privilegio basta modificare l'utente (ad esempio tecnico1) così:
sudo netusermod -s /bin/false tecnico1
Assegniamo gli utenti ai gruppi
sudo netgroupmod -m commerciale1 Commerciale
sudo netgroupmod -m tecnico1 Tecnico
Anche qui possiamo controllare con :
sudo getent group
e ottenere qualcosa del genere:
Commerciale:*:5001:commerciale1
Tecnico:*:5002:tecnico1
I comandi net* li trovo in /bin: è utile prendere dimestichezza con questi per amministrare utenti e gruppi.
Condivisioni
Vediamo ora cosa andremo a condividere, ho deciso di mettere tutto (tranne le home directory) in /samba:
| Condivisione | Percorso | Descrizione |
| public | /samba/public | Cartella pubblica. Contiene una cartella per ogni gruppo (vedi dopo) |
| netlogon | /samba/netlogon | Cartella di sistema necessaria in un domain controller. Contiene gli script di login utente. |
| profiles | /samba/profiles | Cartella di sistema. Mi serve se uso i Profili Roaming di windows. |
| rootdir | /samba | Condivisione ad uso backup. Contiene anche i symlink ai file più importanti del mio server |
| apps | /samba/apps | Cartella applicazioni. Sola lettura |
| homes | /home | Cartelle home per gli utenti. Ognuno la sua. |
public
Questa condivisione è la principale, anziché creare una condivisione per ogni gruppo ho deciso di mettere tutto dentro a public e di "giocare" poi con i permessi sulle cartelle. Per capirci meglio :
| /samba/public | |
| /samba/public/commerciale | Cartella per gruppo "Commerciale" |
| /samba/public/tecnico | Cartella per gruppo "Tecnico" |
| /samba/public/comune | Cartella condivisa di tutti ("Domain Users") |
Poi andremo a mappare una unità L: (a scelta) sulla condivisione "public" e gli utenti del gruppo "Commerciale" vedranno L:\COMUNE e L:\COMMERCIALE, gli utenti del gruppo "Tecnico" vedranno solo L:\COMUNE e L:\TECNICO. Nessuno (tranne i membri del gruppo "Domain Admins", off course) possono creare files o cartelle nella root di L:.
Tengo a precisare che questa non è una regola ma una mia personale idea su come organizzare le condivisioni. Quando abbiamo a che fare con molti gruppi ritengo abbastanza noioso e confusionario fare condivisioni separate. Un utente membro di diversi gruppi si troverebbe con molte mappature diverse che esauriscono in breve l'alfabeto. In questo modo ho una unica mappatura (L:\) e ognuno vedrà le sottocartelle a cui avrà accesso. Molto più ordinato e comodo. Questo tipo di organizzazione è la stessa che usavo quando installavo Novell Netware 10-15 anni fà, e quindi non ha niente di specifico di Samba o di Windows.
Quindi creiamo la struttura :
sudo mkdir /samba/public
sudo mkdir /samba/public/commerciale
sudo mkdir /samba/public/tecnico
sudo mkdir /samba/public/comune
e sistemiamo i permessi e la proprietà :
sudo chmod 770 /samba/public/commerciale
sudo chgrp Commerciale /samba/public/commerciale
sudo chmod 770 /samba/public/tecnico
sudo chgrp Tecnico /samba/public/tecnico
sudo chmod 770 /samba/public/comune
sudo chgrp "Domain Users" /samba/public/comune
Controlliamo cosa abbiamo combinato:
ls -al /samba/public
e dovrei vedere qualcosa del genere:
drwxr-xr-x 5 root root 4096 17 dic 16:24 .
drwxr-xr-x 7 root root 4096 12 dic 16:11 ..
drwxrwx--- 2 root Commerciale 4096 17 dic 16:24 commerciale
drwxrwx--- 2 root Domain Users 4096 17 dic 16:24 comune
drwxrwx--- 2 root Tecnico 4096 17 dic 16:24 tecnico
La rogna dei permessi utente
Ora che abbiamo dato i permessi alle cartelle ci troviamo di fronte ad un problema inaspettato. Quando gli utenti creano nuovi files o cartelle nelle condivisioni questi vengono flaggati con utente=UtenteCreatore e gruppo=GruppoDefaultUtente. Il gruppo di default è "Domain Users", quindi tutti i nuovi files vengono impostati con questo gruppo. Dunque i nuovi files creati in "commerciale" sono potenzialmente a disposizione anche degli utenti del gruppo "Tecnico", essendo anche questi membri del gruppo "Domain Users". In questo caso sono protetti dai permessi della cartella stessa, ma potrebbe non essere così in un altro caso. L'utente "Administrator" ha come gruppo di default "Domain Admins", quindi ogni file creato/copiato/ripristinato dall'amministratore risulta non accessibile dagli utenti "normali". Indubbiamente una bella rottura di scatole dover ogni volta reimpostare a mano i permessi sui files manipolati dall'amministratore ...
Ma non disperate ! :) Ci viene in aiuto il flag SETUID di unix. Se leggete l'articolo linkato sembra non centrare una benemerita fava con l'argomento in questione, ma in questo caso l'effetto del flag è quello da noi voluto. In pratica abilitiamo il flag sul gruppo in questo modo :
sudo chmod g+s /samba/public/commerciale
sudo chmod g+s /samba/public/tecnico
sudo chmod g+s /samba/public/comune
se ricontrollo ora con ls -al dovrei vedere che la tripletta dei permessi sul gruppo è cambiata da rwx a rws che indica, appunto, che è attivo il setuid. Cosa provoca questo ? Questo trucchetto fà si che ogni file creato nelle cartelle avrà come gruppo proprietario il guppo della cartella e non quello dell'utente. Quindi ogni file, ad esempio, creato in "commerciale" avrà come gruppo proprietario "Commerciale" che corrisponde al gruppo proprietario della cartella. Ora potete usare anche "Administrator" per ripristinare o creare files che saranno accessibili agli utenti normali. Fiuuuuuu. Andiamo avanti.
netlogon & profiles
Queste sono due condivisioni di sistema, necessarie quando si configura un domain controller. In netlogon si saranno gli script di login degli utenti (che vedremo come creare al "volo" in modo dinamico), in profiles ci saranno i profili utente nel caso avessimo deciso di usare i profili roaming di Microsoft (utili i certi casi, ma a me, idea personalissima, non piacciono).
Creiamo le certelle e diamo i permessi :
sudo mkdir /samba/netlogon
sudo mkdir /samba/profiles
chmod 777 /samba/profiles
rootdir
Questa è una condivisione di "comodo" accessibile solo all'amministratore. Creiamo anche una cartella system con i link simbolici alle cartelle o ai file che poi potremmo salvare via condivisione samba da un altro PC per fare dei veloci backup.
sudo ln -s /home /samba/home
In questo modo l'amministratore accedendo alla condivisione "rootdir" potrà vedere e manipolare tutte le home degli utenti
sudo mkdir /samba/system
sudo ln -s /etc /samba/system/etc
sudo ln -s /var/lib/openldap/openldap-data /samba/system/ldap
Ora l'amministratore trova nella cartella "system" anche i file di configurazione del server e il database utenti/gruppi di OpenLDAP. Molto comodo, e potrei anche aggiungere altri link senza inventarmi condivisioni "esotiche".
apps
In questa condivisione mettiamo i programmi condivisi nella rete. Solo "Administrator" può scrivere nella cartella, gli altri utenti possono solo leggere e eseguire i file contenuti. creiamo la cartella e settiamo i permessi:
sudo mkdir /samba/apps
sudo chmod 750 /samba/apps
sudo chgrp "Domain Users" /samba/apps
sudo chmod g+s /samba/apps
homes
Questa condivisione è creata automaticamente (o quasi) da Samba. Le home degli utenti saranno mappate con K: e sarà privata ad ogni utente.
Bene, dovremmo esserci. Ora siamo pronti a completare la configurazione di samba ed ad avviare (finalmente) il servizio.
