Realizzare un dominio Windows con Linux: Samba come PDC

Questo How-To prende spunto dalle guide presenti nella webografia e dalle conoscenze personali per realizzare un Primary Domain Controller (PDC) utilizzando Samba anziché il costoso e proprietario Windows Server. Ricordo comunque che attualmente con Samba è possibile implementare un Primary Domain Controller di Windows 2000/NT e non un Active Directory Domain di Windows Server 2003. Per le mie necessità è comunque più che sufficiente.
Nella stesura della guida si è usato un server con una installazione base di Debian Etch (al momento versione stabile di Debian). Per installazione base si intende una installazione effettuata con un cdrom minimale Debian Etch Netinstall, una sola partizione / oltre alla swap, l’installazione del solo pacchetto “sistema base” proposto dall’installer Debian. Per completare ho installato anche vim e openssh-server per agire da remoto (dato che devo usare il browser, altrimenti non e strettamente necessario). In ogni caso una qualsiasi installazione non comporta sostanziali cambiamenti a questo howto. Il nome del pc è pdc.
Installazione di Samba
Installiamo subito i pacchetti relativi a Samba nonostante la sua configurazione sarà ad un passo successivo. Alcuni componenti infatti sono necessari prima.
pdc:~# apt-get install samba smbclient samba-doc
Alle domande scegliamo un dominio (io ho scelto TOMMYBLUE) e non usiamo DHCP. Queste configurazioni sono comunque temporanee e dopo verranno ampiamente modificate.
Installazione di LDAP
Proseguiamo con l’installazione di Open-LDAP, una implementazione libera del protocollo di servizio di directory LDAP. Su LDAP infatti verranno mantenuti i dati relativi agli utenti, i computer del dominio e tutti gli altri necessari. Di default Samba utilizza tdbsam per gestire questi dati. La guida di Openskills (vedi la webografia) realizza un PDC utilizzando tdbsam anziché LDAP.
Procediamo con l’installazione:
pdc:~# apt-get install slapd ldap-utils
La password richiesta consentirà di accedere a qualunque dato in LDAP, è quindi necessariamente una password sicura. La mia scelta per questa guida è pippo :-) ma chiaramente in ambiente non di sviluppo sarà molto più complessa.
Configurazione del server LDAP slapd
Spostiamoci subito nella cartella delle configurazioni di LDAP e iniziamo a guardarci intorno:
pdc:~# cd /etc/ldap pdc:/etc/ldap# ls ldap.conf sasl2 schema slapd.conf
NB. Ho notato che in una diversa installazione di LDAP, sempre su Debian Etch, il file ´ldap.conf´ non e’ presente. Non preoccupiamoci tanto lo creeremo piu’ avanti.
Come prima cosa dobbiamo copiare nella cartella schema lo schema di Samba. Prima facciamo però chiarezza sugli schema che, in pratica, definiscono la struttura in cui certi tipi di dati devono essere salvati e quali, tra questi dati, sono obbligatori o facoltativi. Gli RFC 2252 e RFC 2256, basati sullo standard X.500, definiscono alcuni schema di base che contengono attributi relativi a localizzazione, persone, organizzazioni, gruppi, reti e dispositivi di una rete. Questi schema sono già presenti nella installazione base di una directory LDAP (nel nostro caso sono quelli nella cartella schema) mentre attributi aggiuntivi possono essere definiti in ogni momento. Nel nostro caso lo schema necessario a mantenere i dati di un dominio è stato installato col pacchetto samba-doc, copiamolo nella cartella schema:
pdc:/etc/ldap# zcat /usr/share/doc/samba-doc/examples/LDAP/samba.schema.gz > /etc/ldap/schema/samba.schema
Adesso inseriamo lo schema nel file slapd.conf nella sezione Schema and objectClass definitions:
include /etc/ldap/schema/samba.schema
Nella sezione Indexing options aggiungiamo una serie di indicizzazioni che ottimizzeranno le interrogazioni per l’utilizzo del server Samba (sono opzionali ma utili, la prima riga potrebbe essere già presente):
index objectClass eq index uid,uidNumber,gidNumber,memberUid eq index cn,mail,surname,givenname eq,subinitial index sambaSID eq index sambaPrimaryGroupSID eq index sambaDomainName eq
Bisogna consentire agli utenti di cambiare non solo la propria password LDAP, ma anche le password di Samba e contemporaneamente proteggere tali informazioni da un accesso pubblico sostituendo la riga:
access to attribute=userPassword,shadowLastChange
con:
access to attrs=userPassword,shadowLastChange,sambaNTPassword,sambaLMPassword
Infine aggiungiamo le informazioni per l’autenticazione (inserendo il dominio e la password scelta in precedenza):
rootdn "cn=admin,dc=TOMMYBLUE" rootpw "pippo"
Controlliamo anche che nelle varie voci di configurazione il dominio preimpostato sia effettivamente dc=TOMMYBLUE Come ultima cosa riavviamo slapd e controlliamo se tutto funziona:
pdc:/etc/ldap# /etc/init.d/slapd restart Stopping OpenLDAP: slapd. Starting OpenLDAP: slapd. pdc:/etc/ldap# ldapsearch -x # extended LDIF # # LDAPv3 # base <> with scope subtree # filter: (objectclass=*) # requesting: ALL # # search result search: 2 result: 32 No such object
Il risultato dell’ultimo comando deve essere in formato LDIF. Se invece otteniamo un errore di connessione ricontrolliamo tutte le impostazioni e i file di log (di base slapd logga in /var/log/syslog). Per controllare il funzionamento di slapd può sempre tornare utile fermare il servizio e farlo partire, anziché con gli script standard Debian, con il comando:
# slapd -d 256
In tal modo viene avviato visualizzando varie informazioni di debug a video.
Configurazione del client LDAP
Un client LDAP deve conoscere la base di ricerca e l’indirizzo del server LDAP, possiamo impostarli nel file ldap.conf:
BASE dc=TOMMYBLUE URI ldap://localhost
A questo punto una nuova ricerca nell’albero LDAP restituisce un risultato molto più piacevole:
pdc:/etc/ldap# ldapsearch -x # extended LDIF # # LDAPv3 # base <> with scope subtree # filter: (objectclass=*) # requesting: ALL # # TOMMYBLUE dn: dc=TOMMYBLUE objectClass: top objectClass: dcObject objectClass: organization o: TOMMYBLUE dc: TOMMYBLUE # admin, TOMMYBLUE dn: cn=admin,dc=TOMMYBLUE objectClass: simpleSecurityObject objectClass: organizationalRole cn: admin description: LDAP administrator # search result search: 2 result: 0 Success # numResponses: 3 # numEntries: 2
Utility di gestione: smbldap-tools
Dovendo trasferire gruppi e utenti di sistema sulla directory LDAP i “vecchi” strumenti di Unix non sono vanno più bene. I smbldap-tools sono, appunto, i tools che permettono questa gestione. Iniziamo a installarli:
pdc:/etc/ldap# apt-get install smbldap-tools
Il pacchetto ha molte dipendenze (17 per l’esattezza), non spaventatevi. Spostiamoci quindi in /etc/smbldap-tools e iniziamo la configurazione creando i files di default:
pdc:/etc/smbldap-tools# zcat /usr/share/doc/smbldap-tools/examples/smbldap.conf.gz > /etc/smbldap-tools/smbldap.conf pdc:/etc/smbldap-tools# cp /usr/share/doc/smbldap-tools/examples/smbldap_bind.conf /etc/smbldap-tools/smbldap_bind.conf
Iniziamo configurando smbldap_bind.conf. Il file contiene la configurazione sia per il server master che per quello slave, nel nostro caso coincidono e quindi la configurazione sarà doppia. Ecco il risultato:
slaveDN="cn=admin,dc=TOMMYBLUE" slavePw="pippo" masterDN="cn=admin,dc=TOMMYBLUE" masterPw="pippo"
Prima di configurare il file smbldap.conf copiamo il valore ottenuto col seguente comando:
pdc:/etc/smbldap-tools# net getlocalsid SID for domain PDC is: S-1-5-21-323165295-1747901579-802220036
Proseguiamo quindi con smbldap.conf, la configurazione è complessa e procederemo a passi. Fino al termine di questo paragrafo farò sempre riferimento al file smbldap.conf. Date innanzitutto un primo sguardo al file (è ben commentato) dopodichè modificate le varie voci che, qui di seguito, non sono riportate nello stesso ordine del file e a cui ho tolto, per sintesi, i commenti.
Innanzitutto impostiamo il SID appena ottenuto e il dominio inserito al momento dell’installazione di Samba (nel mio caso TOMMYBLUE) dove serve:
SID="S-1-5-21-323165295-1747901579-802220036"
sambaDomain="TOMMYBLUE"
sambaUnixIdPooldn="sambaDomainName=TOMMYBLUE,${suffix}"
Dopodichè controlliamo che gli indirizzi e le porte dei server master e slave siano entrambi su 127.0.0.1:
slaveLDAP="127.0.0.1" slavePort="389" masterLDAP="127.0.0.1" masterPort="389"
Disabilitiamo (almeno momentaneamente) TLS:
ldapTLS="0"
Modifichiamo il suffisso LDAP e il dominio per le email:
suffix="dc=TOMMYBLUE" mailDomain="tommyblue.it"
Infine impostiamo le homes degli utenti e la directory dove salvare i profili. PDC-SERVER è il nome che utilizzeremo per identificare il nostro server PDC (lo imposteremo tra poco).
userSmbHome="\\PDC-SERVER\%U" userProfile="\\PDC-SERVER\profiles\%U"
Per finire impostiamo i giusti permessi ai files appena modificati:
pdc:/etc/smbldap-tools# chmod 0644 /etc/smbldap-tools/smbldap.conf pdc:/etc/smbldap-tools# chmod 0600 /etc/smbldap-tools/smbldap_bind.conf
Configurazione di Samba
Adesso che il backend è pronto non ci resta che far si che Samba possa correttamente utilizzare queste informazioni. Innanzitutto a Samba servono dei gruppi predefiniti e due utenti: Administrator e nobody. Inoltre, per permettere alle macchine Windows di essere aggiunte in automatico al dominio, serve un utente con uid = 0. Potremmo usare l’utente root inserendolo a mano, ma in questo caso abbiamo deciso di cambiare l’uid dell’utente Administrator così da farlo diventare amministratore si per Samba che per la nostra macchina Linux. Possiamo creare i gruppi:
pdc:~# smbldap-populate -k 0 pdc:~# smbldap-useradd -a -m -c "Admin" Administrator pdc:~# smbldap-usermod -G "Domain Admins" Administrator pdc:~# smbldap-usermod -u 0 Administrator pdc:~# smbldap-populate -a Administrator -k 0
Le opzioni -k 0 impostano l’uid a 0 rendendo di fatto l’utente Administrator anche l’utente root di sistema, al momento del primo e ultimo comando dobbiamo anche impostare la password di root: impostatene una ma non preoccupatevene troppo, la cambieremo tra poco. Possiamo controllare i dati col seguente comando:
pdc:~# ldapsearch -x | less
Come detto, cambiamo la password dell’utente Administrator:
pdc:~# smbldap-passwd Administrator
Facciamo amicizia con smbldap-passwd perché sarà il futuro comando di gestione delle password.
Configurazione di NSS e PAM
Affinchè Samba funzioni correttamente deve esserci corrispondenza tra gli utenti di sistema e quelli di LDAP. Per far questo configuriamo NSS in modo che possa utilizzare anche LDAP. Installiamo quindi:
pdc:~# apt-get install libnss-ldap
Alle domande rispondiamo con le configurazioni effettuate in precedenza. Configuriamo quindi il file nsswitch.conf dicendogli di reperire le informazioni anche da LDAP:
passwd: compat ldap group: compat ldap shadow: compat ldap
Per concludere possiamo verificare che effettivamente funzioni con:
pdc:~# getent passwd [...] openldap:x:104:104:OpenLDAP Server Account,,,:/var/lib/ldap:/bin/false root:x:0:0:Netbios Domain Administrator:/home/root:/bin/false nobody:x:999:514:nobody:/dev/null:/bin/false Administrator:x:0:513:Admin:/home/Administrator:/bin/bash
Come possiamo vedere anche gli utenti della directory LDAP sono visibili come utenti di sistema. Questo è sufficiente per alcuni operazioni base, molti programmi però utilizzano PAM, installiamo quindi i programmi necessari a farlo dialogare con LDAP:
pdc:~# apt-get install libpam-ldap
Le configurazioni di default sono sufficienti, impostate solamente il corretto account di root (nel mio casocn=admin,dc=TOMMYBLUE). La configurazione viene salvata in /etc/pam_ldap.conf e può comunque essere modificata a mano. Infine, nella cartella /etc/pam.d modifichiamo come segue i seguenti files. Nella cartella /etc/pam.d modificare i seguenti files.
common-account:
account sufficient pam_ldap.so account required pam_unix.so
commom-auth:
auth sufficient pam_ldap.so nullok_secure auth required pam_unix.so use_first_pass
commom-password:
password sufficient pam_ldap.so password required pam_unix.so try_first_pass nullok obscure min=4 max=8 md5
commom-session:
session sufficient pam_ldap.so session required pam_unix.so
Una volta terminato possiamo riavviare il server ssh e ritentare il collegamento:
pdc:~# /etc/init.d/ssh restart Restarting OpenBSD Secure Shell server: sshd. pdc:~# exit Connection to pdc closed. MyPC:~$ ssh Administrator@pdc Administrator@pdc's password: Last login: Sat Feb 2 18:35:28 2008 from 192.168.0.2 root@pdc:~# whoami root
Funziona perfettamente e, come possiamo notare dall’ultima riga, siamo loggati come utente root!
NB. Se utilizzate una connessione SSH per verificare la funzionalità (come nell’esempio) fate attenzione che root abbia l’accesso con la riga
PermitRootLogin yes
in /etc/ssh/sshd_config altrimenti, come ho fatto io, smadonnate per un’ora contro LDAP e la colpa e’ di SSH :-)
Configurazione del server Samba
Il file di configurazione di Samba /etc/samba/smb.conf deve essere pesantemente rimaneggiato. Possiamo dare uno sguardo ad un esempio nel file /usr/share/doc/smbldap-tools/examples/smb.conf oppure possiamo direttamente utilizzarlo per sostituire l’originale (backuppando l’originale!) e iniziare da questo. Per completezza riporto l’intero /etc/samba/smb.conf:
[global]
workgroup = TOMMYBLUE
netbios name = PDC-SERVER
server string = LAN Server %v
enable privileges = yes
##### Per permettere un corretto login dei client XP #####
wins support = yes
socket options = TCP_NODELAY IPTOS_LOWDELAY SO_SNDBUF=8192 SO_RCVBUF=8192
; include = /etc/samba/dhcp.conf
dns proxy = no
;name resolve order = lmhosts host wins bcast
unix charset = ISO8859-1
dos charset = 850
; character set = ISO8859-1
hosts allow = 127.0.0.1 192.168.2.0/255.255.255.0
### Each machina has its own log file ###
log file = /var/log/samba/log.%m
max log size = 1000
log level = 2
; syslog only = no
syslog = 0
panic action = /usr/share/samba/panic-action %d
### Authentication ###
security = user
encrypt passwords = true
; passdb backend = tdbsam guest
passdb backend = ldapsam:ldap://127.0.0.1
obey pam restrictions = yes
; guest account = nobody
; invalid users = root
; unix password sync = yes
passwd program = /usr/bin/passwd %u
passwd chat = *Enter\snew\sLinux\spassword:* %n\n *Retype\snew\sLinux\spassword:* %n\n .
; pam password change = no
##### LDAP Configuration #####
ldap admin dn = cn=admin,dc=TOMMYBLUE
ldap suffix = dc=TOMMYBLUE
ldap group suffix = ou=Groups
ldap user suffix = ou=Users
ldap machine suffix = ou=Computers
ldap idmap suffix = ou=Idmap
ldap passwd sync = yes
ldap delete dn = yes
add user script = /usr/sbin/smbldap-useradd -m "%u"
delete user script = /usr/sbin/smbldap-userdel "%u"
add machine script = /usr/sbin/smbldap-useradd -w "%u"
add group script = /usr/sbin/smbldap-groupadd -p "%g"
delete group script = /usr/sbin/smbldap-groupdel "%g"
add user to group script = /usr/sbin/smbldap-groupmod -m "%u" "%g"
delete user from group script = /usr/sbin/smbldap-groupmod -x "%u" "%g"
set primary group script = /usr/sbin/smbldap-usermod -g "%g" "%u"
##### Samba PDC #####
os level = 255
domain master = yes
domain logons = yes
preferred master = yes
time server = yes
logon home =
logon path =
logon script = logon.bat
logon drive = H:
##### File sharing #####
; preserve case = yes
; short preserve case = yes
##### Misc #####
; include = /home/samba/etc/smb.conf.%m
; idmap uid = 10000-20000
; idmap gid = 10000-20000
; template shell = /bin/bash
time server = yes
hide dot files = yes
#======================= Share Definitions =======================
[homes]
comment = Home Directories
browseable = no
writable = yes
create mask = 0700
directory mask = 0700
[netlogon]
comment = Network Logon Service
path = /var/lib/samba/netlogon
guest ok = yes
writable = no
share modes = no
[profiles]
path = /var/lib/samba/profiles
read only = no
create mask = 0600
directory mask = 0700
writable = yes
browseable = yes
profile acls = yes
hide files = /desktop.ini/ntuser.ini/NTUSER.*/
store dos attributes = yes
csc policy = disable
Il contenuto del file desktop.ini, citato in fondo alla configurazione, sarebbe:
[.ShellClassInfo] LocalizedResourceName=@shell32.dll,-21786
Una volta salvato il file possiamo verificarne la correttezza con:
pdc:~# testparm Load smb config files from /etc/samba/smb.conf Processing section "[homes]" Processing section "[netlogon]" Processing section "[profiles]" Loaded services file OK. Server role: ROLE_DOMAIN_PDC
Creiamo anche le cartelle e diamo i giusti permessi alla cartella dei profili impostando lo sticky bit e rendendola scrivibile da root e le sue sottodirectory gestibili dai rispettivi utenti, senza possibilità di modificare quelle degli altri (altrimenti i roaming profiles non funzionano):
pdc:~# mkdir /var/lib/samba/netlogon pdc:~# mkdir /var/lib/samba/profiles pdc:~# chmod 1777 /var/lib/samba/profiles
NB. In molte guide vengono usati i permessi 1757 per la cartella dei profili, ma con quei permessi non sono riuscito a fargli creare in automatico le cartelle dei profili al primo login (Windows restituisce due errori al login, dicendo, in breve, che non riesce a salvare il profilo e ad ogni nuovo login ci si ritrova con il profilo intonso), quindi ho copiato i permessi da /tmp e usato quindi 1777
Infine bisogna impostare la password per l’accesso a LDAP come admin, in questo modo Samba potrà accedere a LDAP con permessi di scrittura. La password sarà salvata nel file /var/lib/samba/secrets.tdb:
pdc:~# smbpasswd -w <password_di_admin>
Per finire riavviamo Samba:
pdc:~# /etc/init.d/samba restart Stopping Samba daemons: nmbd smbd. Starting Samba daemons: nmbd smbd.
e uniamo lo stesso PDC al dominio:
pdc:~# net rpc join -U Administrator Password: Joined domain TOMMYBLUE.
Dopo quest’ultimo comando possiamo verificarne l’effettiva riuscita con getent passwd e cercando (nell’ultima riga) una entry del genere:
pdc-server$:*:1004:515:Computer:/dev/null:/bin/false
Il simbolo $ finale indica che si tratta di un computer e non di un utente.
Creazione del primo utente
Adesso siamo pronti per la creazione del primo utente con il comando:
pdc:~# smbldap-useradd -a -m -c "Tommaso Visconti" tommaso
Dove -a serve per creare anche i dati UNIX, -m crea l’home directory e -c specifica il nome completo. Infine impostiamo la password dell’utente:
pdc:~# smbldap-passwd tommaso
Per verificare il tutto possiamo usare il comando:
pdc:~# smbldap-usershow tommaso
dn: uid=tommaso,ou=Users,dc=TOMMYBLUE
objectClass: top,person,organizationalPerson,inetOrgPerson,posixAccount,shadowAccount,sambaSamAccount
cn: tommaso
sn: tommaso
givenName: tommaso
uid: tommaso
uidNumber: 1000
gidNumber: 513
homeDirectory: /home/tommaso
loginShell: /bin/bash
gecos: Tommaso Visconti
sambaLogonTime: 0
sambaLogoffTime: 2147483647
sambaKickoffTime: 2147483647
sambaPwdCanChange: 0
displayName: Tommaso Visconti
sambaSID: S-1-5-21-323165295-1747901579-802220036-3000
sambaPrimaryGroupSID: S-1-5-21-323165295-1747901579-802220036-513
sambaLogonScript: logon.bat
sambaProfilePath: \\PDC-SERVER\profiles\tommaso
sambaHomePath: \\PDC-SERVER\tommaso
sambaHomeDrive: H:
sambaLMPassword: 9DA4560FB165977D3EA23D825A8A8B03
sambaAcctFlags: [U]
sambaNTPassword: C15028F27535EABEFEBB15F0552E5725
sambaPwdLastSet: 1201975835
sambaPwdMustChange: 1217527835
userPassword: {SSHA}QGDIzHLcRa8/hDtCIOCJJ84OFkulbmx3
Creiamo anche un gruppo aggiungendoci l’utente appena creato:
pdc:~# smbldap-groupadd ufficio pdc:~# smbldap-usermod -G ufficio tommaso pdc:~# smbldap-groupshow ufficio dn: cn=ufficio,ou=Groups,dc=TOMMYBLUE objectClass: top,posixGroup cn: ufficio gidNumber: 1000 memberUid: tommaso
Come specificato nel file /etc/smbldap-tools/smbldap.conf il file eseguito al netlogon è logon.bat. Questo script batch deve essere creato nella condivisione di netlogon e deve avere la codifica di uno script batch DOS. Installiamo quindi il software necessario (dato che, fortunatamente, non abbiamo il DOS…):
pdc:~# apt-get install tofrodos
Creiamo quindi il file /var/lib/samba/netlogon/logon.bat scrivendoci, per ora, quanto necessario per sincronizzare gli orologi. Al batch può comunque essere aggiunto tutto ciò di cui abbiamo bisogno (ad esempio per il montaggio di unità di rete o altre condivisioni):
pdc:~# echo "net time %LOGONSERVER% /set /yes" > /var/lib/samba/netlogon/logon.bat
Codifichiamo quindi il file come se fosse stato scritto in DOS:
pdc:~# unix2dos /var/lib/samba/netlogon/logon.bat
Connessione al dominio
Prima di procedere con la configurazione dei vari client Windows e Unix/Linux proviamo con una connessione locale utilizzando l’utente creato poco fa:
pdc:~# smbclient -L localhost -U tommaso
Password:
Domain=[TOMMYBLUE] OS=[Unix] Server=[Samba 3.0.24]
Sharename Type Comment
--------- ---- -------
netlogon Disk Network Logon Service
profiles Disk
IPC$ IPC IPC Service (LAN Server 3.0.24)
tommaso Disk Home Directories
Domain=[TOMMYBLUE] OS=[Unix] Server=[Samba 3.0.24]
Server Comment
--------- -------
PDC-SERVER LAN Server 3.0.24
Workgroup Master
--------- -------
TOMMYBLUE PDC-SERVER
La procedura di connessione dei client al dominio varia a seconda del sistema operativo utilizzato sulle macchine client, ho avuto modo di provare la configurazione per Windows 2000, Windows XP e Windows Vista, per il resto mi sono fidato di altre fonti sul web
Windows 95/98/ME
- Verificare che sia installato il “Client per Reti Microsoft” fra le proprietà di rete
- Assicurarsi che il Client per Reti Microsoft sia selezionato come protocollo di rete primario (Pannello di Controllo -> Rete -> Logon di rete primario).
- Andare su Pannello di Controllo -> Rete -> Client per reti Microsoft -> Proprietà -> Logon su Dominio NT.
- Se si è configurata su smb.conf l’opzione “add user script”, selezionare il checkbox Crea un Computer Account, altrimenti creare a mano sul server Samba un utente con il nome della macchina Windows.
- Inserire il nome del proprio dominio e cliccare OK.
Windows NT
- Andare su Pannello di Controllo -> Rete -> Identificazione Rete -> Proprietà
- Selezionare Dominio e inserire il nome del prorio dominio
- Selezionare Crea un Computer Account
- Alla richiesta della password di un amministratore inserire la login e la password di Administrator, ricordarsi che l’utente root deve essere aggiunto a smbpasswd.
- Dovrebbe comparire un messaggio che ci da il benvenuto sul dominio.
Windows 2000
- Le procedure sono uguali a quelle per Windows NT tranne che i settaggi di rete sono trovati sotto Pannello di Controllo -> Sistema -> Identificazione Rete (oppure, sul Desktop, cliccare col tasto destro del mouse sull’icona Risorse del Computer, selezionare Proprietà, cliccare sulla tab Identificazione Rete e sul tasto Proprietà).
Windows XP
Innanzitutto chiariamo che solo la versione Professional Edition può entrare a far parte di un dominio (NT o Active Directory). Per la versione Home Edition possiamo comunque utilizzare un escamotage e riuscire ad accedere alle cartelle condivise: il nome del Workgroup deve essere esattamente il nome del dominio e l’utente locale deve essere uguale e avere la stessa password di quello di dominio, meglio di niente…
Tornando a Windows XP Professional Edition, apriamo l’editor delle policy di Sicurezza Locale:
- Start->Pannello di controllo->Strumenti di Amministrazione->Criteri di protezione locali->Criteri locali->Opzioni di protezione
- Disabilitare la voce Membro di dominio: aggiunta crittografia o firma digitale ai dati del canale protetto (sempre) (Domain member: Digitally encrypt or sign secure channel (always))
- Disabilitare la voce Controller di dominio: rifiuta cambio password account computer (Domain member: Disable machine account password changes)
- Disabilitare la voce Membro di dominio: richiesta chiave di sessione avanzata (Windows 2000 o versioni successive) (Domain member: Require strong (Windows 2000 or later) session key)
Nelle versioni più recenti di Samba i passaggi dovrebbero essere finiti, nelle versioni precedenti invece serve una piccola patch al registro. Innanzitutto creiamo un file di testo con questo contenuto:
Windows Registry Editor Version 5.00 ; ; This registry key is needed for a Windows XP Client to join ; and logon to a Samba domain. Note: Samba 2.2.3a contained ; this key in a broken format which did nothing to the registry - ; however XP reported "registry key imported". If in doubt ; check the key by hand with regedit. [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters] "requiresignorseal"=dword:00000000
e salviamolo come la_mia_patch.reg (il nome chiaramente è inventato, l’importante è l’estensione .reg). A questo punto basta un doppio click per patchare il registro di Windows. Per finire uniamoci al dominio come su Windows NT/2000: Tasto destro su Risorse del Computer, selezionare Proprietà, Nome del Computer e tasto Modifica uppure cliccare su Identificazione di Rete ed eseguire il Wizard fornendo le credenziali di root.
Windows Vista
Innanzitutto un premessa: la prova è stata portata a termine con la versione Business. Dovrebbe essere possibile unire ad un dominio anche le versioni Enterprise e Ultimate mentre le versioni Home basic e Home premium no. Le operazioni da compiere sono uguali a quelle per Windows XP con, in aggiunta, una sola operazione. Innanzitutto date uno sguardo più in basso alla risoluzione del problema Impossibile unirsi al dominio con errore Impossibile trovare il percorso di rete. Bene, probabilmente avrete quel problema. L’operazione in più che citavo è, dal pannello delle proprietà della scheda di rete, dalle proprietà del Protocollo Internet (TCP/IP)->Avanzate…->WINS ho anche dovuto abilitare, in Impostazioni Netbios, la voce Abilita Netbios su TCP/IP.
Una GUI web per il database LDAP: phpldapadmin
Vabbè che siamo amministratori Linux e la shell ci garba, però può essere utile avere una GUI per esplorare l’albero LDAP. Uno strumento agile è phpldapadmin. L’installazione è rapida, la configurazione altrettanto.
pdc:~# apt-get install phpldapadmin
La configurazione è in /etc/phpldapadmin, per una configurazione base ci basta il file config.php, in particolare questi valori:
$ldapservers->SetValue($i,'server','name','LDAP PDC-SERVER');
$ldapservers->SetValue($i,'server','host','localhost');
$ldapservers->SetValue($i,'server','base',array('dc=TOMMYBLUE'));
$ldapservers->SetValue($i,'server','auth_type','session');
Se, per funzionalità di debug, desideriamo un login automatico, possiamo cambiare il tipo di autenticazione e fornire le credenziali:
$ldapservers->SetValue($i,'server','auth_type','config'); $ldapservers->SetValue($i,'login','dn','cn=admin,dc=TOMMYBLUE'); $ldapservers->SetValue($i,'login','pass','pippo');
Per concludere modifichiamo il resto del file cercando dc=example,dc=com e sostituendolo con dc=TOMMYBLUE. Apriamo quindi il browser e iniziamo a sfogliare l’albero LDAP da http://192.168.0.250/phpldapadmin (ovviamente cambiate l’ip mettendoci quello del vostro server).
Soluzioni a vari problemi
Problemi con i permessi
Se, per caso, abbiamo dei problemi di permessi, può darsi che ci siano problemi nell’associazione (bind) dei nomi utente o di gruppo al loro SID, in pratica problemi con WINS. Possiamo allora specificare nelle condivisioni direttamente i SID dei gruppi o degli utenti. Innanzitutto installiamo il pacchetto winbind, dopodiché, se, ad esempio, vogliamo trovare il SID del gruppo Domain Users:
pdc:~# wbinfo -n "Domain Users" S-1-5-21-323165295-1747901579-802220036-513 Domain Group (2)
Possiamo usare questo SID come fosse un qualsiasi nome di gruppo o nome utente in smb.conf:
valid users = S-1-5-21-323165295-1747901579-802220036-513
Altre informazioni molto utili possono essere ottenute col comando net. Iniziamo con net –help poi, ad esempio, se vogliamo vedere l’attuale binding tra utenti del dominio e del sistema (nonché tutti i SID), possiamo utilizzare:
pdc:~# net groupmap list Domain Admins (S-1-5-21-323165295-1747901579-802220036-512) -> Domain Admins Domain Users (S-1-5-21-323165295-1747901579-802220036-513) -> Domain Users Domain Guests (S-1-5-21-323165295-1747901579-802220036-514) -> Domain Guests Domain Computers (S-1-5-21-323165295-1747901579-802220036-515) -> Domain Computers Administrators (S-1-5-32-544) -> Administrators Account Operators (S-1-5-32-548) -> Account Operators Print Operators (S-1-5-32-550) -> Print Operators Backup Operators (S-1-5-32-551) -> Backup Operators Replicators (S-1-5-32-552) -> Replicators
Facciamo anche due esempi per mappare “Domain Admins” col gruppo root e “Domain Users” col gruppo users:
pdc:~# net groupmap modify netgroup="Domain Admins" unixgroup=root pdc:~# net groupmap modify netgroup="Domain Users" unixgroup=users
Aggiungere una macchina al dominio
pdc:~# smbpasswd -a -m NOME_COMPUTER
Impossibile unirsi al dominio con errore Impossibile trovare il percorso di rete
Credo di aver capito che il problema sia nella risoluzione dei nomi Netbios e quindi del server WINS. In pratica, nonostante Samba operi come server WINS può capitare che il client Windows (nel mio caso XP) non se ne accorga. Da notare che quest’errore non mi è capitato nella prima prova che ho fatto in una rete composta solo da uno switch, il server Samba e una postazione. Comunque sia, per risolvere il problema è sufficiente impostare l’indirizzo ip del server tra i server WINS del client Windows. Quindi: click destro su Risorse di rete->Proprietà. Click destro sulla scheda di rete (in genere Connessione alla rete locale (LAN))->Proprietà. Selezioniamo Protocollo Internet (TCP/IP)->Proprietà->Avanzate…. Nel pannello WINS clicchiamo su Aggiungi… e inseriamo l’indirizzo ip del server Samba. Adesso riproviamo ad unire il computer al dominio.
Webografia
Software
Cultura :-)
- http://it.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol
- http://en.wikipedia.org/wiki/Active_Directory_Service
- http://en.wikipedia.org/wiki/Primary_Domain_Controller
- http://en.wikipedia.org/wiki/Windows_Internet_Name_Service
How-To
- http://www.stenoit.com/modules/spxsection/item.php?itemid=5
- http://openskills.info/infobox.php?ID=552
- http://www.tuxjournal.net/?p=2240
- http://guide.debianizzati.org/index.php/Samba_e_OpenLDAP:_creare_un_controller_di_dominio
- http://dev.autistici.org/orangebook/html/index.html
- http://java.sun.com/products/jndi/tutorial/ldap/TOC.html
- http://help.ubuntu-it.org/6.06/ubuntu/serverguide/it/configuring-samba.html

