Impostare Samba Come PDC di un Dominio

Su una rete di PC client Windows che superi la decina di host, per motivi di sicurezza e di gestione centralizzata di utenti e risorse (con tutto ciò che di positivo questo comporta), è una buona cosa avere a disposizione un dominio. Questa tipologia di dominio è stata introdotta da Microsoft, forse con NT 4 o con qualche versione precedente di NT, ed è stata poi aggiornata a partire da Windows 2000 Server con Active Directory. Se la rete non ha esigenze specifiche, sarebbe possibile comunque utilizzare anche un dominio NT invece di un dominio Active Directory. Samba permette di emulare un PDC di un dominio NT 4 e quindi di gestire utenti e risorse condivise per una rete di client Windows su un server Linux, cosa che consente di risparmiare centinaia di euro in piccole realtà che non hanno bisogno di soluzioni particolarmente sofisticate.

La prima cosa ovviamente consiste nell’installare Samba prendendo come riferimento una macchina con installato Debian Sarge, e quindi ho digitato il comando:

# apt-get install samba samba-common samba-doc cupsys cupsys-client libcupsys2-gnutls10 libkrb53 winbind smbclient libcupsys2 smbfs

A questo punto, faccio una copia del file di configurazione smb.conf e ne creo uno nuovo pulito, che andrò a personalizzarmi come meglio credo:

# mv /etc/samba/smb.conf /etc/samba/smb.old
# touch /etc/samba/smb.conf

Ora posso procedere alla configurazione di Samba editando il file smb.conf, che segue regole ben precise. Prima di tutto, va creata una sezione [global] in cui viene descritto il funzionamento generale di Samba, poi verranno create la condivisioni presenti sul server PDC con le relative impostazioni di protezione. Per fare questo, va editato il file smb.conf:

# nano /etc/samba/smb.conf

Ora va creata la sezione [global] ed impostate le direttive basilari:

[global]
workgroup = DOMAIN
netbios name = serverpdc
security = USER

La direttiva workgroup indica il nome del gruppo di lavoro o del dominio (a seconda della configurazione della direttiva security), netbios name indica il nome NetBIOS del server Samba così come verrà visto dai client Windows, mentre security indica il ruolo del server Samba: se impostato a USER indica che il server è un PDC di un dominio, mentre se impostato a SHARE, indica che il server fa parte di un gruppo di lavoro. Ci sono altre possibili impostazioni della direttiva security che al momento non sono importanti. Ora continuare la configurazione di Samba in questo modo:

smb passwd file = /etc/samba/smbpasswd
encrypt passwords = YES
log file = /var/log/samba/%m.log
max log size = 1000
log level = 1

La direttiva smb passwd file indica la posizione del file contenente le password di accesso per gli utenti Samba (esistono altri metodi più evoluti per svolgere la stessa funzione ma questo è il più semplice), encrypt password se impostato a true indica che verranno utilizzate password criptate per l’accesso al dominio. La direttiva log file indica la posizione dei file di log di Samba, e impostando il nome del file a %m.log, viene detto a Samba di creare un file di log per ogni macchina iscritta nel dominio (la variabile di Samba %m specifica il nome NetBIOS dei PC); max log size indica la dimensione massima (in KB) di ogni file di log di Samba, ed una volta raggiunta la dimensione massima il file di log viene rinominato con estensione .old, quindi, va calibrata bene la dimensione dei vari log soprattutto su reti medio-grandi, anche con l’aiuto della direttiva log level, che determina il dettaglio delle informazioni messe da Samba nei file di log, in genere il valore 1 è adeguato. La sezione [global] continua con queste impostazioni:

os level = 255
preferred master = YES
local master = YES
domain master = YES
wins support = YES

Le prime quattro direttive servono per forzare l’elezione del server Samba a Local Master Browser e Domain Master Browser, ruoli che permettono al server Samba di gestire la lista degli host presenti sulla rete locale fornendo questo servizio agli altri PC del gruppo di lavoro / dominio; os level impostato a 255 è il valore massimo, che rende sicura l’elezione del server Samba nei confronti degli altri PC in rete, anche se basterebbe un valore decisamente più basso. La direttiva wins support impostata a YES permette al PC Samba di agire come server WINS per la risoluzione dei nomi NetBIOS nei corrispondenti indirizzi IP.

hosts allow = 192.168.1.0/24 127.0.0.1
hosts deny = all
follow symlinks = NO

Queste sono impostazioni di sicurezza , in particolare hosts allow specifica gli hosts che hanno la possibilità di comunicare con il server Samba, con la successiva direttiva hosts deny = all che nega l’accesso a Samba a tutti gli host, tranne quelli specificati nella riga precedente, mentre follow symlinks, impostato a NO, impedisce ad un utente di seguire un link simbolico se questo si trova su una directory non condivisa.

domain logons = YES
logon home = \\serverpdc\homeuser
logon drive = U:
logon path = \\serverpdc\profili\%u
logon script = logon.bat
add machine script = /usr/sbin/useradd -d /dev/null -g computers -s /bin/false %u

Queste direttive indicano diverse impostazioni specifiche di un PDC Samba; domain logon = YES è la direttiva che imposta il server Samba come PDC, logon home e logon drive permettono di specificare una home directory specifica per ogni utente creato su Samba, mappando sui client l’unità di rete U: sulla condivisione “homeuser” che sarà definita più avanti nel file di configurazione. La direttiva logon path permette di abilitare i profili mobili (chiamati anche roaming profiles), che servono per avere i profili personali degli utenti del dominio sul server invece che sul client; ciò consente ad ogni utente di conservare lo stesso ambiente di lavoro su tutti i PC del dominio; secondo questa configurazione, dovrà essere creata una condivisione “profili” sul server Samba. La direttiva logon script permette di specificare un file batch da inserire nella condivisione “netlogon” (da creare) che verrà eseguito ad ogni accesso da parte degli utenti del dominio, mentre add machine script serve per creare automaticamente l’account corrispondente alla macchina come utente di sistema, senza shell ed appartenente al gruppo “computers” (questo gruppo può assumere il nome desiderato), da creare a parte come mostrato precedentemente.

L’ultimo passo, facoltativo, è quello di indicare a Samba di fungere da print server con l’utilizzo di Cups, tramite le direttive

printing = CUPS
printcap = CUPS

Ora è finita la sezione [global], quindi si può passare alla configurazione delle directory condivise. Per prima cosa creare la directory /home/samba che conterrà tutte le sotto-directory da condividere:

# mkdir /home/samba

ed aggiungere le seguenti directory:

# mkdir /home/samba/netlogon
# mkdir /home/samba/profili
# mkdir /home/samba/scambio

Ora si torna al file smb.conf per definire le condivisioni:

[netlogon]
path = /home/samba/netlogon
read only = YES
write list = root

Per prima cosa creiamo la condivisione [netlogon], in cui andremo a piazzare l’eventuale script di logon per i client Windows. Da notare le due notazioni read only impostata a YES la quale indica che l’accesso alla directory è accessibile solamente in lettura, mentre write list specifica quali utenti hanno l’autorizzazione ad accedere in lettura / scrittura alla directory (in questo caso solo l’utente root può svolgere questa funzione). Inoltre, l’eventuale creazione di un batch di avvio va fatta su un PC Windows, visto che il sistema operativo Microsoft gestisce in modo diverso l’interruzione di riga rispetto a Linux.

[profili]
path = /home/samba/profili/
read only = NO
writable = YES
browsable = NO
create mask = 0600
directory mask = 0700

Qui creiamo invece la condivisione [profili], che serve per indicare la directory in cui verranno memorizzati i singoli profili mobili degli utenti definiti su Samba. Le opzioni read only e writable sono impostate rispettivamente a NO e YES per fare in modo che la directory sia accessibile in lettura e scrittura, con i permessi indicati con le diciture create mask e directory mask, che consentono solo all’utente proprietario della directory di leggere e modificare il contenuto della cartella del proprio profilo; browsable impostato a NO significa che la condivisione non è visibile dalle risorse di rete ma rimane completamente accessibile conoscendone il percorso.

[homeuser]
path = /home/%u
writable = YES
browsable = NO
create mask = 0600
directory mask = 0700
hide dot files = YES

La condivisione [homeuser] rappresenta la home directory di ogni utente, e per comodità e per evitare problemi è meglio crearla in modo tale che l’utente Samba utilizzi la stessa home directory che utilizza il corrispondente utente Linux, com’è possibile vedere nella direttiva path, in cui è presente la variabile %u, la quale consente di definire la directory di ogni utente. Le autorizzazioni ricalcano quelle concesse nella condivisione [profili], ovvero l’unico utente abilitato in lettura e scrittura sulla share è il proprietario della cartella. In più esiste l’opzione hide dot files che consente di non visualizzare i file che iniziano con . (che Linux vede come file nascosti) sulle macchine Windows.

[scambio]
path = /home/samba/scambio
writable = YES
public = YES

La condivisione [scambio] è creata con l’obiettivo di avere un’area comune a tutti gli utenti della rete su cui tutti gli utenti possano leggere e scrivere dati, quindi basta impostare le direttive writable e public a YES per raggiungere lo scopo.

[printers]
path = /var/spool/samba
printable = YES
use client driver = YES

Per condividere stampanti su Samba, deve essere obbligatoriamente creata una condivisione [printers], che imporrà a Samba di condividere le stampanti installate su CUPS (la scelta di CUPS deriva dalle due direttive inserite nella sezione [global]). Path indica il percorso in cui è posizionato lo spooling sul quale transiteranno i job di stampa (se la directory non esiste, va creata in modo esplicito); printable impostato a YES significa che è possibile mandare job di stampa in spooling, mentre la direttiva use client driver impone ai client di installare il driver della stampante di rete quando questa viene installata su un client. Terminata la configurazione di smb.conf, rimangono altre cose da sistemare.

Per prima cosa, bisogna sistemare le autorizzazioni sulla directory /home/samba/profili, facendo in modo che tutti gli utenti della rete possano modificarne il contenuto, così che venga creata la directory del profilo per ogni utente, il cui accesso è regolato dalle direttive già impartite in smb.conf; inoltre, bisogna fare la stessa cosa per la directory scambio, in cui tutti gli utenti possono leggere e scrivere:

# chmod 777 /home/samba/profili
# chmod 777 /home/samba/scambio

Ora bisogna creare la coda di stampa su Linux per definire la stampante condivisa in Samba, quindi per prima cosa assicurarsi che la cartella /var/spool/samba esista, e poi creare la coda di stampa RAW tramite il comando:

# lpadmin -p STAMPANTECONDIVISA -v parallel:/dev/lp0 -E

dove al posto di STAMPANTECONDIVISA va messo un nome a nostra scelta che rappresenta il nome della stampante condivisa (ad esempio Laser1Piano) sul server Samba, mentre /dev/lp0 rappresenta la porta parallela del nostro PC. Creata la coda di stampa, va abilitata la stampa in RAW (cioè con l’invio dei dati grezzi alla stampante), questo serve poiché i driver della stampante devono essere installati lato client e non lato server, e quindi bisogna editare il file mime.types:

# nano /etc/cups/mime.types

decommentando la riga #application/octet e decommentare la stessa riga editando il file mime.convs:

# nano /etc/cups/mime.convs

Fatto questo, è necessario creare la directory /var/spool/samba ed assegnare i permessi in scrittura a tutti gli utenti, in modo che chiunque possa stampare sulla stampante condivisa appena creata:

# mkdir /var/spool/samba
# chmod 777 /var/spool/samba

Fatto questo e riavviato il demone cupsys, la stampante dovrebbe essere accessibile a tutti gli utenti. Nel mio caso, la stampante condivisa è un HP Laserjet 1005, e per questa stampante è necessario fare alcuni passaggi come avevo precedentemente descritto, in questo caso ho fatto un’aggiunta ed ho messo la riga cat /usr/share/foo2zjs/firmware/sihp1005.dl > /dev/lp0 nello script /etc/init.d/cupsys, in modo tale che il firmware della stampante venga inviato alla stampante stessa ad ogni avvio di CUPS. Senza questo accorgimento la stampante non vuole saperne di funzionare.

Ora bisogna creare gli utenti in Samba, infatti gli utenti di Linux non diventano automaticamente utenti di Samba, ma vanno “mappati” tra loro. Il primo utente da creare su Samba è l’utente root, che sarà anche l’amministratore del dominio Samba:

# smbpasswd -a root

e poi faremo in modo di associare il gruppo root di Linux al gruppo globale Domain Admins di Samba, poiché il gruppo Domain Admins è automaticamente amministratore sulle macchine locali una volta che queste sono iscritte al dominio, cosa molto utile per diversi motivi:

# net groupmap modify ntgroup=”Domain Admins” unixgroup=root

E’ molto utile anche mappare il gruppo Samba Domain Users (che rappresenta il gruppo di tutti gli utenti del dominio) con il gruppo users di Linux, in questo modo gli utenti che verranno creati faranno automaticamente parte del gruppo Domain Users, utile in fase di assegnazione di permessi:

# net groupmap modify ntgroup=”Domain Users” unixgroup=users

Ora è possibile creare gli utenti del dominio; il primo passo consiste nella creazione dell’utente sul sistema Linux, con il comando:

# useradd -m -g users nomeutente

dove l’opzione -m consente la creazione automatica della home directory all’interno della directory /home (cosa indispensabile altrimenti l’utente non si troverà connessa l’unità di rete U: rappresentante la propria home directory), l’opzione -g users assegna l’utente appena creato al gruppo users, mentre nomeutente rappresenta il nome che vogliamo dare a questo utente, ovviamente se abbiamo creato ulteriori gruppi per l’utilizzo in Samba, non sempre assegneremo l’utente appena creato al gruppo users; creato l’utente, bisogna assegnarli una password:

# passwd nomeutente

dopodiché verrà richiesto per due volte di inserire la password dell’utente. Arrivati qui è necessario creare l’utente in Samba con il comando:

# smbpasswd -a nomeutente

dove per nomeutente si intende il nome da assegnare all’utente in Samba; verrà richiesto di digitare due volte la password, ed è bene usare la stessa password per Linux e per Samba, onde evitare problemi.

Fatti questi passaggi abbiamo un server di dominio ed un print server in grado di servire una rete di client Windows.