In questo articolo viene proposto un modo facile e veloce di creare un DC (Domain Controller) per ambienti Windows utilizzando Samba.
Va detto che la soluzione è dimensionata per la piccola e media impresa, dove il numero di utenti generalmente non supera le cento unità.
Facile e veloce perché impiega un solo server e non prevede ridondanza.
Per l’articolo ho scelto di utilizzare CentOS ma dovrebbe funzionare anche con Fedora.
Prerequisiti
La soluzione prevede il deployment all’interno di una rete locale (LAN); si presuppone dunque che i servizi di DNS (per la risoluzione dei nomi) e DHCP (per l’assegnazione automatica degli indirizzi IP) funzionino a dovere.
La lista della spesa Per far girare “il tutto” è necessario installare sulla macchina alcuni pacchetti fondamentali di samba. Per verificare i pacchetti già installati è sufficiente usare yum:
[root@myserver ~]# yum list *samba*
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: centos.fastbull.org
* updates: centos.fastbull.org
* addons: centos.fastbull.org
* extras: centos.kiewel-online.ch base
Installed Packages
samba.i386 3.0.33-3.7.el5_3.1 installed
samba-client.i386 3.0.33-3.7.el5_3.1 installed
samba-common.i386 3.0.33-3.7.el5_3.1 installed
system-config-samba.noarch 1.2.41-3.el5 installed
Available Packages
samba-swat.i386 3.0.33-3.7.el5_3.1 updates
sblim-cmpi-samba.i386 0.5.2-31.el5_2.1 base
sblim-cmpi-samba-devel.i386 1-31.el5_2.1 base
sblim-cmpi-samba-test.i386 1-31.el5_2.1 base
Nel nostro caso samba è già installato. Nel caso in cui fosse necessario installare il software possiamo sempre utilizzare yum:
yum install samba
I pacchetti fondamentali sono:
samba.i386 samba-common.i386system-config-samba.noarch
Degli altri possiamo anche farne a meno.
Personalizzare il servizio
Nel nostro caso, Samba dovrà funzionare come DC, per questo motivo è necessario editare il file /etc/samba/smb.conf indicando le corrette impostazioni. Di seguito un esempio di configurazione possibile:
[global]
workgroup = MORZELLO
server string = Samba Server Version %v
netbios name = MYSERVER
security = user
passdb backend = tdbsam
domain master = yes
domain logons = yes
logon script = %m.bat
logon script = %u.bat
logon path =
add user script = /usr/sbin/useradd "%u" -n -g users
add group script = /usr/sbin/groupadd "%g"
add machine script = /usr/sbin/useradd -n -c "Workstation (%u)" -M -d /nohome -s /bin/false "%u"
delete user script = /usr/sbin/userdel "%u"
delete user from group script = /usr/sbin/userdel "%u" "%g"
delete group script = /usr/sbin/groupdel "%g"
username map = /etc/samba/smbusers
lanman auth = no
ntlm auth = Yes
client NTLMv2 auth = Yes
client lanman auth = no
client plaintext auth = no
winbind enum groups = yes
winbind enum users = yes
wins support = yes
[homes]
comment = Home Directories
browseable = no
writable = yes
Il file di configurazione contiene solo ed esclusivamente i dati strettamente necessari per far funzionare il servizio come PDC (Primary Domain Controller). Probabilmente il lettore vorrà successivamente attivare altre voci come ad esempio le stampanti di rete e le cartelle di rete. Queste informazioni non sono strettamente necessarie e per questo motivo non sono trattate in questa sede. Per dare un senso al nostro operato cerchiamo di capire il significato delle voci principali che compongono il nostro file di configurazione:
- workgroup: indica il nome del nostro dominio;
- passdb backend: indica come samba gestirà le utenze windows. specificando tdbsam samba autenticherà gli utenti e le macchine appartenenti al dominio mediante il proprio database, senza utilizzare servizi esterni come ad esempio LDAP oppure un altro DC;
- *script: sono le voci che indicano quali script eseguire per gestire gli utenti ed i gruppi;
- logon path: è il percorso della cartella che contiene informazioni di netlogon di Windows. Nell’esempio si è deciso di non fornire questo servizio;
- domain logons: indica se il server agirà come DC oppure no;
- domain master: indica se il server agirà come PDC oppure no.
Per capire se la nostra configurazione è valida o meno possiamo usare il comando testparm:
[root@myserver ~]# testparm -s
Load smb config files from /etc/samba/smb.conf
Processing section "[homes]"
Loaded services file OK.
Server role: ROLE_DOMAIN_PDC
[global]
workgroup = MORZELLO
server string = Samba Server Version %v
passdb backend = tdbsam
username map = /etc/samba/smbusers
lanman auth = No
client NTLMv2 auth = Yes
client lanman auth = No
client plaintext auth = No
log level = 2
log file = /var/log/samba/%m.log
add user script = /usr/sbin/useradd "%u" -n -g users
delete user script = /usr/sbin/userdel "%u"
add group script = /usr/sbin/groupadd "%g"
delete group script = /usr/sbin/groupdel "%g"
delete user from group script = /usr/sbin/userdel "%u" "%g"
add machine script = /usr/sbin/useradd -n -c "Workstation (%u)" -M -d /nohome -s /bin/false "%u"
logon script = %u.bat
logon path =
domain logons = Yes
domain master = Yes
wins support = Yes
winbind enum users = Yes
winbind enum groups = Yes
[homes]
comment = Home Directories
read only = No
browseable = No
È fondamentale che la voce server role sia quella corretta.
L’utenza amministrativa
Per poter gestire il dominio è necessario aggiungere nel database di samba l’utente amministratore:
[root@myserver samba]# smbpasswd -a root
New SMB password:
Retype new SMB password:
tdbsam_open: Converting version 0 database to version 3....
Added user root.
Gli utenti di dominio
Gli utenti samba sono in realtà utenti linux e bisogna dare una regola per convertire correttamente gli utenti tra linux e windows. Per fare questo personalizziamo il file /etc/samba/smbusers:
# Unix_name = SMB_name1 SMB_name2 ...
root = administrator admin
nobody = guest pcguest smbguest
Nel nostro caso ci limitiamo a dire che l’utente administrator equivale a root e che l’utente guest equivale a nobody. Aggiungiamo anche i gruppi di utenti windows che non esistono ancora in linux:
# Map Windows Domain Groups to UNIX groups
net groupmap add rid=514 ntgroup="Domain Guests" unixgroup="nobody" type=d
net groupmap add rid=513 ntgroup="Domain Users" unixgroup="users" type=d
net groupmap add rid=512 ntgroup="Domain Admins" unixgroup="root" type=d
Si possono aggiungere anche altri gruppi di utenti, quelli specificati in alto sono quelli “canonici”. Per verificare che i gruppi siano stati creati possiamo usare il comando wbinfo:
[root@myserver samba]# wbinfo -g
domain users
domain admins
domain guests
Aggiungendo gli utenti di dominio ricordiamo sempre che questi sono anche utenti Linux. È probabile però che non tutti gli utenti dovranno avere accesso al server come utenti locali. Per inibire l’accesso alla console del server specificheremo una shell non valida. Su CentOS possiamo creare un utente con queste caratteristiche usando il comando adduser:
[root@myserver samba]# adduser -m -s /sbin/nologin testuser
[root@myserver samba]# passwd testuser
[root@myserver samba]# smbpasswd -a testuser
Con precedenti comandi abbiamo creato un utente, assegnato una password per linux ed una per samba.
Un metodo alternativo per creare gli utenti è quello di accodare direttamente gli utenti nel file /etc/passwd senza assegnare la password all’utente.
A pensarci bene non è necessario assegnare una password ad un utente che non può fare il logon. Se invece l’utente deve comunque avere l’accesso al server è sufficiente omettere il parametro “–s”.
Comunque sia per abilitare l’utente al dominio è necessario inserirlo nel database di samba con il comando smbpasswd.
Da notare che la password per linux può essere diversa da quella specificata in samba. Eseguire il servizio all’avvio In CentOS i servizi possono essere gestiti facilmente mediante il comando chkconfig.
Le righe seguenti assicurano l’avvio del servizio all’accensione del nostro server:
chkconfig smb on
Ultimi ritocchi: iptables e selinux
Samba necessita di alcune porte tcp ed udp per poter funzionare correttamente. Queste porte sono chiude per default da iptables. Di seguito le righe da inserire nel file /etc/sysconfig/iptables:
-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 137 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 138 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 139 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 445 -j ACCEPT
Le righe devono essere inserite nel file prima delle ultime due stringhe:
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
Per quanto concerne selinux invece bisogna consentire a samba l’uso dei comandi necessari per svolgere alcuni task:
# Se si intende usare useradd/groupadd è necessario eseguire:
setsebool -P samba_domain_controller on
#
# Se si vuole condividere la home degli utenti eseguire:
setsebool -P samba_enable_home_dirs on
Per condividere una cartella di rete bisogna assegnare alla stessa l’etichetta “samba-share_t”. Evitate le cartelle di sistema perché queste probabilmente hanno una etichetta diversa già applicata. Per verificare i dettagli di una cartella relativa a selinux è possibile usare il comando ls specificando il paramentr “–Z”:
ls -ldZ /percorso_completo
Aggiungere una workstation al dominio
La procedura di Join è totalmente trasparente in windows.
Per aggiungere una macchina al dominio possiamo cliccare con il tasto destro del mouse su “Gestione Risorse” quindi selezionare il percorso :“Proprietà->Nome Computer->Cambia”. Specificare MORZELLO nella casella “dominio” e procedere al logon di root con la password indicata in samba (mediante il comando smbpasswd).
Alla prossima.