Samba

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.

<h2 id="InstallazionediSamba">Installazione di Samba</h2>
<p> Installiamo subito i pacchetti relativi a Samba nonostante la sua  configurazione sar&agrave; ad un passo successivo. Alcuni componenti infatti  sono necessari prima. </p>
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
<h2 id="Utilitydigestione:smbldap-tools">Utility di gestione: smbldap-tools</h2>
<p>Dovendo trasferire gruppi e utenti di sistema sulla directory LDAP i  "vecchi" strumenti di Unix non sono vanno pi&ugrave; bene. I smbldap-tools  sono, appunto, i tools che permettono questa gestione. Iniziamo a  installarli: </p>
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
<p> Il contenuto del file <em>desktop.ini</em>, citato in fondo alla configurazione, sarebbe: </p>
[.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
<p> Creiamo anche un gruppo aggiungendoci l'utente appena creato: </p>
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
<p>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</p>
<h3 id="Windows9598ME">Windows 95/98/ME</h3>
<ol>
  <li>Verificare che sia installato il "Client per Reti Microsoft" fra le propriet&agrave; di rete </li>
  <li>Assicurarsi che il Client per Reti Microsoft sia selezionato  come protocollo di rete primario (Pannello di Controllo -&gt; Rete  -&gt; Logon di rete primario). </li>
  <li>Andare su Pannello di Controllo -&gt; Rete -&gt; Client per reti Microsoft -&gt; Propriet&agrave; -&gt; Logon su Dominio NT. </li>
  <li>Se si &egrave; 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. </li>
  <li>Inserire il nome del proprio dominio e cliccare OK. </li>
</ol>
<h3 id="WindowsNT">Windows NT</h3>
<ol>
  <li>Andare su Pannello di Controllo -&gt; Rete -&gt; Identificazione Rete -&gt; Propriet&agrave; </li>
  <li>Selezionare Dominio e inserire il nome del prorio dominio </li>
  <li>Selezionare Crea un Computer Account </li>
  <li>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. </li>
  <li>Dovrebbe comparire un messaggio che ci da il benvenuto sul dominio. </li>
</ol>
<h3 id="Windows2000">Windows 2000</h3>
<ol>
  <li>Le procedure sono uguali a quelle per Windows NT tranne che i  settaggi di rete sono trovati sotto Pannello di Controllo -&gt; Sistema  -&gt; Identificazione Rete (oppure, sul Desktop, cliccare col tasto  destro del mouse sull'icona Risorse del Computer, selezionare  Propriet&agrave;, cliccare sulla tab Identificazione Rete e sul tasto  Propriet&agrave;). </li>
</ol>
<h3 id="WindowsXP">Windows XP</h3>
<p> Innanzitutto chiariamo che solo la versione Professional Edition pu&ograve;  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... </p>
<p> Tornando a Windows XP Professional Edition, apriamo l'editor delle policy di Sicurezza Locale: </p>
<ul>
  <li><em>Start</em>-&gt;<em>Pannello di controllo</em>-&gt;<em>Strumenti di Amministrazione</em>-&gt;<em>Criteri di protezione locali</em>-&gt;<em>Criteri locali</em>-&gt;<em>Opzioni di protezione</em> </li>
</ul>
<ol>
  <li>Disabilitare la voce <strong>Membro di dominio: aggiunta crittografia o firma digitale ai dati del canale protetto (sempre)</strong> (<em>Domain member: Digitally encrypt or sign secure channel (always)</em>) </li>
  <li>Disabilitare la voce <strong>Controller di dominio: rifiuta cambio password account computer</strong> (<em>Domain member: Disable machine account password changes</em>) </li>
  <li>Disabilitare la voce <strong>Membro di dominio: richiesta chiave di sessione avanzata (Windows 2000 o versioni successive)</strong> (<em>Domain member: Require strong (Windows 2000 or later) session key</em>) </li>
</ol>
<p>Nelle versioni pi&ugrave; 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: </p>
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
<p> e salviamolo come <em>la_mia_patch.reg</em> (il nome chiaramente &egrave; inventato, l'importante &egrave; l'estensione <strong>.reg</strong>). 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 <em>Risorse del Computer</em>, selezionare <em>Propriet&agrave;</em>, <em>Nome del Computer</em> e tasto <em>Modifica</em> uppure cliccare su <em>Identificazione di Rete</em> ed eseguire il Wizard fornendo le credenziali di <em>root</em>. </p>
<h3 id="WindowsVista">Windows Vista</h3>
<p> Innanzitutto un premessa: la prova &egrave; stata portata a termine con la versione <em>Business</em>. Dovrebbe essere possibile unire ad un dominio anche le versioni <em>Enterprise</em> e <em>Ultimate</em> mentre le versioni <em>Home basic</em> e <em>Home premium</em> no.  Le operazioni da compiere sono uguali a quelle per <em>Windows XP</em> con, in aggiunta, una sola operazione. Innanzitutto date uno sguardo pi&ugrave; in basso alla risoluzione del problema <strong>Impossibile unirsi al dominio con errore <em>Impossibile trovare il percorso di rete</em></strong>.  Bene, probabilmente avrete quel problema. L'operazione in pi&ugrave; che  citavo &egrave;, dal pannello delle propriet&agrave; della scheda di rete, dalle  propriet&agrave; del <em>Protocollo Internet (TCP/IP)</em>-&gt;<em>Avanzate...</em>-&gt;<em>WINS</em> ho anche dovuto abilitare, in <em>Impostazioni Netbios</em>, la voce <em>Abilita Netbios su TCP/IP</em>. </p>
<h2 id="UnaGUIwebperildatabaseLDAP:phpldapadmin">Una GUI web per il database LDAP: phpldapadmin</h2>
<p> Vabb&egrave; che siamo amministratori Linux e la shell ci garba, per&ograve; pu&ograve;  essere utile avere una GUI per esplorare l'albero LDAP. Uno strumento  agile &egrave; <em>phpldapadmin</em>. L'installazione &egrave; rapida, la configurazione altrettanto. </p>
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
<p> Facciamo anche due esempi per mappare <em>"Domain Admins"</em> col gruppo <em>root</em> e <em>"Domain Users"</em> col gruppo <em>users</em>: </p>
pdc:~# net groupmap modify netgroup="Domain Admins" unixgroup=root  
pdc:~# net groupmap modify netgroup="Domain Users" unixgroup=users  
<h3 id="Aggiungereunamacchinaaldominio">Aggiungere una macchina al dominio</h3>
pdc:~# smbpasswd -a -m NOME_COMPUTER  
<h3 id="ImpossibileunirsialdominioconerroreImpossibiletrovareilpercorsodirete">Impossibile unirsi al dominio con errore <em>Impossibile trovare il percorso di rete</em></h3>
<p>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&ograve; capitare che il client Windows (nel mio caso XP)  non se ne accorga. Da notare che quest'errore non mi &egrave; 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 &egrave; sufficiente impostare  l'indirizzo ip del server tra i server WINS del client Windows. Quindi:  click destro su <em>Risorse di rete</em>-&gt;<em>Propriet&agrave;</em>. Click destro sulla scheda di rete (in genere <em>Connessione alla rete locale (LAN)</em>)-&gt;<em>Propriet&agrave;</em>. Selezioniamo <em>Protocollo Internet (TCP/IP)</em>-&gt;<em>Propriet&agrave;</em>-&gt;<em>Avanzate...</em>. Nel pannello <em>WINS</em> clicchiamo su <em>Aggiungi...</em> e inseriamo l'indirizzo ip del server Samba. Adesso riproviamo ad unire il computer al dominio. </p>
<h2 id="Webografia">Webografia</h2>
<h3 id="Software">Software</h3>
<ul>
  <li><a href="http://www.samba.org">http://www.samba.org</a> </li>
  <li><a href="http://www.openldap.org">http://www.openldap.org</a> </li>
</ul>
<h3 id="Cultura:-">Cultura :-)</h3>
<ul>
  <li><a href="http://it.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol">http://it.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol</a> </li>
  <li><a href="http://en.wikipedia.org/wiki/Active_Directory_Service">http://en.wikipedia.org/wiki/Active_Directory_Service</a> </li>
  <li><a href="http://en.wikipedia.org/wiki/Primary_Domain_Controller">http://en.wikipedia.org/wiki/Primary_Domain_Controller</a> </li>
  <li><a href="http://en.wikipedia.org/wiki/Windows_Internet_Name_Service">http://en.wikipedia.org/wiki/Windows_Internet_Name_Service</a> </li>
</ul>
<h3 id="How-To">How-To</h3>
<ul>
  <li><a href="http://www.stenoit.com/modules/spxsection/item.php?itemid=5">http://www.stenoit.com/modules/spxsection/item.php?itemid=5</a> </li>
  <li><a href="http://openskills.info/infobox.php?ID=552">http://openskills.info/infobox.php?ID=552</a> </li>
  <li><a href="http://www.tuxjournal.net/?p=2240">http://www.tuxjournal.net/?p=2240</a> </li>
  <li><a href="http://guide.debianizzati.org/index.php/Samba_e_OpenLDAP:_creare_un_controller_di_dominio">http://guide.debianizzati.org/index.php/Samba_e_OpenLDAP:_creare_un_controller_di_dominio</a> </li>
  <li><a href="http://dev.autistici.org/orangebook/html/index.html">http://dev.autistici.org/orangebook/html/index.html</a> </li>
  <li><a href="http://java.sun.com/products/jndi/tutorial/ldap/TOC.html">http://java.sun.com/products/jndi/tutorial/ldap/TOC.html</a> </li>
  <li><a href="http://help.ubuntu-it.org/6.06/ubuntu/serverguide/it/configuring-samba.html">http://help.ubuntu-it.org/6.06/ubuntu/serverguide/it/configuring-samba.html</a> </li>
</ul>
<h3 id="Letturevarie">Letture varie</h3>
<ul>
  <li><a href="http://www.zaffa.org/2007/10/02/samba-active-directory-e-permessi/">http://www.zaffa.org/2007/10/02/samba-active-directory-e-permessi/</a> </li>
</ul>

blog comments powered by Disqus