Di seguito gli steps per installare un PDC con Samba versione 3.x + LDAP in backend su una Debian 7.x.

Utilizzeremo i repository standard della Debian 7 per Samba mentre useremo i backports da Lenny per BIND9 e Open LDAP. Perchè? Perchè in questo modo avremo versioni recenti di BIND9 e OpenLDAP mentre continueremo ad usare Samba3 da stable (in backports abbiamo Samba4).

OpenLDAP

1) Installare i pacchetti necessari:

apt-get install -t wheezy-backports slapd

L’installazione chiederà il nome di suffisso del dominio (in questo caso il nostro dominio si chiamerà domain.com) e la password da assegnare all’utenza cn=admin,dc=domain,dc=com.


SAMBA

1) Installare i pacchetti necessari:

apt-get install samba samba-doc smbldap-tools

Il pacchetto smbldap-tools non è necessario, ma a meno di non avere un altro pacchetto o degli script personalizzati, è necessario disporre di un metodo per la gestione di utenti, gruppi e account.

2) Creare un file di configurazione temporaneo chiamato samba.conf con il seguente contenuto:

include /etc/ldap/schema/core.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/schema/inetorgperson.schema
include /etc/ldap/schema/samba.schema

3) Convertire samba.schema in samba.ldif con slaptest:

# mkdir /tmp/slapd.d
# slaptest -f samba.conf -F /tmp/slapd.d/

4) Caricare la configurazione /tmp/slapd.d/cn=config/cn=schema/cn={4}samba.ldif in cn=config usando:

# cp "/tmp/slapd.d/cn=config/cn=schema/cn={4}samba.ldif" "/etc/ldap/slapd.d/cn=config/cn=schema"
# chown openldap: '/etc/ldap/slapd.d/cn=config/cn=schema/cn={4}samba.ldif'
# /etc/init.d/slapd stop
# /etc/init.d/slapd start

e verificarne il corretto inserimento:

# ldapsearch -LLLQY EXTERNAL -H ldapi:/// -b cn=schema,cn=config "(objectClass=olcSchemaConfig)" dn
dn: cn=schema,cn=config

dn: cn={0}core,cn=schema,cn=config

dn: cn={1}cosine,cn=schema,cn=config

dn: cn={2}nis,cn=schema,cn=config

dn: cn={3}inetorgperson,cn=schema,cn=config

dn: cn={4}samba,cn=schema,cn=config

5) Copiare e incollare quanto segue in un file chiamato samba_indexes.ldif:

dn: olcDatabase={1}hdb,cn=config
changetype: modify
add: olcDbIndex
olcDbIndex: uidNumber eq
olcDbIndex: gidNumber eq
olcDbIndex: loginShell eq
olcDbIndex: uid eq,pres,sub
olcDbIndex: memberUid eq,pres,sub
olcDbIndex: uniqueMember eq,pres
olcDbIndex: sambaSID eq
olcDbIndex: sambaPrimaryGroupSID eq
olcDbIndex: sambaGroupType eq
olcDbIndex: sambaSIDList eq
olcDbIndex: sambaDomainName eq
olcDbIndex: default sub

6) Usando l’utilità ldapmodify, caricare i nuovi indici:

ldapmodify -x -D cn=admin,cn=config -W -f samba_indexes.ldif

oppure

ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/samba_indices.ldif

Se tutto è andato a buon fine, dovrebbe essere possibile visualizzare gli indici utilizzando ldapsearch:

ldapsearch -xLLL -D cn=admin,cn=config -x -b cn=config -W olcDatabase={1}hdb

7) Aprire i files smbldap.conf e smbldap_bind.conf e editarli con la configurazione LDAP presente

# cp /usr/share/doc/smbldap-tools/examples/smbldap.conf.gz /etc/smbldap-tools/
# cp /usr/share/doc/smbldap-tools/examples/smbldap_bind.conf /etc/smbldap-tools/
# gzip -d /etc/smbldap-tools/smbldap.conf.gz
# chmod 600 /etc/smbldap-tools/smbldap

Trova le righe corrispondenti e cambiale come mostrato ma prima occorre recuperare il domain SID di Samba usando il seguente comando:

# net getlocalsid
SID for domain SERVER is: S-1-5-21-3102374607-2088646784-3588851380

Annotarsi il SID in quanto andrà inserito nello smbldap.conf

# vi /etc/smbldap-tools/smbldap.conf
[...]
SID="S-1-5-21-3102374607-2088646784-3588851380" ## Replace with your Domain SID ##
sambaDomain="DOMAIN" ## Enter your Domain name ##
#slaveLDAP="ldap://ldap.example.com/" ## Make it comment, we don't have slave LDAP ##
masterLDAP="ldap://server.domain.com/" ## Enter your LDAP Domain name ##
ldapTLS="0" ## We don't use TLS, so set it to "0" ##
verify="none" ## Set it to "none"
clientcert="/etc/smbldap-tools/smbldap-tools.domain.com.pem"
clientkey="/etc/smbldap-tools/smbldap-tools.domain.com.key"
suffix="dc=domain,dc=com"
userSmbHome="\\SERVER\%U" ## Set your host name here ##
userProfile="\\SERVER\profiles\%U" ## Set your host name here ##
userHomeDrive="H:" ## Set your Home drive ##
mailDomain="domain.com"
[...]

Aprire il file smbldap_bind.conf e eseguire le seguenti modifiche:

# vi /etc/smbldap-tools/smbldap_bind.conf
[...]
#slaveDN="cn=Manager,dc=example,dc=com" ## make it comment. we don't have a slave LDAP ##
#slavePw="secret" ## Make it comment ##
masterDN="cn=admin,dc=domain,dc=com" ## Enter LDAP admin username and LDAP suffixes ##
masterPw="domainpassw" ## Enter LDAP root administrative account password ##

8) popoliamo il database LDAP con le voci necessarie a Samba

[email protected]:~$ sudo smbldap-populate
Populating LDAP directory for domain DOMAIN (S-1-5-21-3102374607-2088646784-3588851380)
(using builtin directory structure)
entry dc=domain,dc=com already exist.
adding new entry: ou=Users,dc=domain,dc=com
adding new entry: ou=Groups,dc=domain,dc=com
adding new entry: ou=Computers,dc=domain,dc=com
adding new entry: ou=Idmap,dc=domain,dc=com
adding new entry: sambaDomainName=DOMAIN,dc=unixmen,dc=com
adding new entry: uid=root,ou=Users,dc=domain,dc=com
adding new entry: uid=nobody,ou=Users,dc=domain,dc=com
adding new entry: cn=Domain Admins,ou=Groups,dc=domain,dc=com
adding new entry: cn=Domain Users,ou=Groups,dc=domain,dc=com
adding new entry: cn=Domain Guests,ou=Groups,dc=domain,dc=com
adding new entry: cn=Domain Computers,ou=Groups,dc=domain,dc=com
adding new entry: cn=Administrators,ou=Groups,dc=domain,dc=com
adding new entry: cn=Account Operators,ou=Groups,dc=domain,dc=com
adding new entry: cn=Print Operators,ou=Groups,dc=domain,dc=com
adding new entry: cn=Backup Operators,ou=Groups,dc=domain,dc=com
adding new entry: cn=Replicators,ou=Groups,dc=domain,dc=com
Please provide a password for the domain root:
Changing UNIX and samba passwords for root
New password: ## Enter Password ##
Retype new password: ## Re-enter password ##

Attenzione: se il server utilizza LDAP come metodo di autenticazione locale del server, tale comando creerà un’utenza root in LDAP necessaria per il join al dominio. Occorre rinominare tale utenza in modo da non aver problemi con l’utenza reale di root nella macchina.

9) Verificare che LDAP abbia visto i nuovi Gruppi

# getent group
[...]
Domain Admins:*:512:root
Domain Users:*:513:
Domain Guests:*:514:
Domain Computers:*:515:
Administrators:*:544:
Account Operators:*:548:
Print Operators:*:550:
Backup Operators:*:551:
Replicators:*:552:

Ora possiamo configurare Samba per diventare un PDC e utilizzare come backend di autenticazione LDAP. Editiamo il file smb.conf:

# cp /usr/share/doc/smbldap-tools/examples/smb.conf.example /etc/samba/smb.conf
# vi /etc/samba/smb.conf
[global]
workgroup = DOMAIN ## Your domain Name ##
netbios name = SERVER ## Samba server Host name ##

deadtime = 10
log level = 1
log file = /var/log/samba/log.%m
max log size = 5000
debug pid = yes
debug uid = yes
syslog = 0
utmp = yes

security = user
domain logons = yes
os level = 64
logon path =
logon home =
logon drive = H: ## Logon drive ##
logon script =
wins support = yes

passdb backend = ldapsam:"ldap://server.domain.com/" ## Samba server FQDN ##
ldap ssl = off ## Set to off to disable SSL
ldap admin dn = cn=admin,dc=domain,dc=com ## LDAP admin account and LDAP suffixes ##
ldap delete dn = no

# Sync UNIX password with Samba password
## Method 1:
ldap password sync = yes
## Method 2:
;ldap password sync = no
;unix password sync = yes
;passwd program = /usr/sbin/smbldap-passwd -u '%u'
;passwd chat = "Changing *\nNew password*" %n\n "*Retype new password*" %n\n"

ldap suffix = dc=domain,dc=com ## LDAP suffix ##
ldap user suffix = ou=Users
ldap group suffix = ou=Groups
ldap machine suffix = ou=Computers
ldap idmap suffix = ou=Idmap

add user script = /usr/sbin/smbldap-useradd -m '%u' -t 1
rename user script = /usr/sbin/smbldap-usermod -r '%unew' '%uold'
delete user script = /usr/sbin/smbldap-userdel '%u'
set primary group script = /usr/sbin/smbldap-usermod -g '%g' '%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'
add machine script = /usr/sbin/smbldap-useradd -w '%u' -t 1

[NETLOGON]
path = /var/lib/samba/netlogon
browseable = no
share modes = no

[PROFILES]
path = /var/lib/samba/profiles
browseable = no
writeable = yes
create mask = 0611
directory mask = 0700
profile acls = yes
csc policy = disable
map system = yes
map hidden = yes

E riavviamo il servizio di SAMBA registrando anche l’utenza admin per LDAP

# /etc/init.d/smbd restart
# /etc/init.d/nmbd restart
# smbpasswd -w password    # Password declared to LDAP server for the user cn=admin,dc=domain,dc=com
Setting stored password for "cn=admin,dc=domain,dc=com" in secrets.tdb

BIND

Per poter eseguire correttamente una join al dominio da un pc/server Windows, occorre avere un DNS server e un WINS server attivi a cui fare la richiesta. In Samba3, principalmente occorre Wins.

1) Installiamo i pacchetti di BIND9 dal repositori:

# apt-get install -t wheezy-backports bind9

2) Creare il nostro file di zona all’interno della directory /var/cache/bind (esempio domain.conf) nel seguente modo:

; BIND data file for local loopback interface
;
$TTL 604800
@ IN SOA ns1.domain.com. root.domain.com. (
13 ; Serial
3600 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
IN NS ns1.domain.com.

@ IN A 192.168.165.77 # IP of LDAP/Samba server
ns1 IN A 192.168.165.77 # IP of LDAP/Samba server
server IN A 192.168.165.77 # IP of LDAP/Samba server

_ldap._tcp IN SRV 0 100 389 server
_ldap._tcp.dc._msdcs IN SRV 0 0 389 server
#_kerberos._tcp IN SRV 0 100 88 server
#_kerberos._tcp.dc._msdcs IN SRV 0 0 88 server

2) Editiamo il file /etc/bind/named.conf e aggiungiamo in fondo al file la dichiarazione della zona di dominio:

zone "domain.com" {
type master;
file "domain.conf";
};

3) Editiamo il file /etc/bind/named.conf.options e aggiungiamo in fonso al file le seguenti voci:

allow-query { 127.0.0.1; 192.168.255.0/24; } ;
allow-transfer { none; } ;
notify no;
empty-zones-enable no;
allow-recursion { 127.0.0.1; 192.168.255.0/24; } ;

forwarders {
8.8.8.8;
8.8.4.4;
};

La rete 192.168.255.0/24, in questo esempio, è una rete remota da cui vogliamo permettere le query a questo DNS.

Modifichiamo la seguente riga:

auth-nxdomain no;

in

#auth-nxdomain no;
auth-nxdomain yes;

4) Riavviamo il servizio di BIND

# service bind9 restart

Testing su Windows

1) Andare su “Ipostazioni di Rete”, cambio impostazioni:

samba3-1

 

 

 

 

 

 

 

Selezionare col tasto destro e scegliere Proprietà sulla connessione di Rete Locale

samba3-2

 

 

 

 

 

 

 

 

 

Selezionare TCP/IP v4 e scegliere Proprietà.

samba3-3

 

 

 

 

 

 

 

 

 

Andare su Wins e inserire l’IP del server con Bind.

samba3-4

 

 

 

 

 

 

 

 

 

 

 

Premere OK ad ogni finestra.

Onde evitare problematiche durante la Join, creiamo/modifichiamo alcune voci nel registro:

1) Andare su HKEY_LOCAL_MACHINE  -> SYSTEM -> CurrentControlSet -> Services -> LanmanWorkstation -> Parameters.

2) Creare 2 DWORD 32 bit chiamate “DomainCompatibilityMode”“DNSNameResolutionRequired”

3) Impostare “DomainCompatibilityMode”1(uno) e “DNSNameResolutionRequired”0(zero).

Riavviare il server Windows e provare la Join al Dominio.


 

Creazione nuove utenze LDAP con permessi Samba

Per creare nuove utenze LDAP che abbiamo anche prerequisiti per poter essere utilizzate in Samba, occorre usare gli script già pronti e inclusi in smbldap-tools.

Per aggiungere un nuovo utente, gruppo o account macchina, usare le utilità dal pacchetto smbldap-tools. Alcuni esempi:

  • Per aggiungere un nuovo utente a LDAP con attributi Samba, digitare quanto segue, sostituendo “NOME_UTENTE” con un nome utente reale:
    sudo smbldap-useradd -a -P NOME_UTENTE
    

    L’opzione -a aggiunge gli attributi Samba, -P chiama l’utilità smbldap-passwd dopo aver creato l’utente consentendo di inserire la password per l’utente.

  • Per rimuovere un utente dalla directory:
    sudo smbldap-userdel NOME_UTENTE
    

    L’utilità smbldap-userdel è dotata anche di un’opzione -r per rimuovere la directory home dell’utente.

  • Per aggiungere un gruppo, usare smbldap-groupadd, sostituendo “NOME_GRUPPO” con il nome di un gruppo esistente:
    sudo smbldap-groupadd -a NOME_GRUPPO
    

    Come per smbldap-useradd, l’opzione -a aggiunge gli attributi Samba.

  • Per aggiungere un utente a un gruppo, usare smbldap-groupmod:
    sudo smbldap-groupmod -m NOME_UTENTE NOME_GRUPPO
    

    Assicurarsi di sostituire NOME_UTENTE con un utente reale. Inoltre, con l’opzione -m è possibile aggiungere più di un utente alla volta, elencandoli come valori separati da virgola.

  • smbldap-groupmod può essere usato anche per rimuovere un utente da un gruppo:
    sudo smbldap-groupmod -x NOME_UTENTE NOME_GRPPO
    
  • L’utilità smbldap-useradd può anche aggiungere degli account macchina:
    sudo smbldap-useradd -t 0 -w NOME_UTENTE
    

    Sostituire NOME_UTENTE con il nome della workstation. L’opzione -t 0 crea un account macchina immediatamente, -w indica di creare l’utente come account macchina. Notare che l’opzione add machine script in /etc/samba/smb.conf è stata modificata per usare smbldap-useradd.

Sono disponibili molte altre utilità nel pacchetto smbldap-tools. Per maggiori informazioni, consultare la pagina di manuale.

Articolo precedenteFixing a “Too many open files” exception
Prossimo articolovmWare – Failed to deploy OVF package: The task was canceled by a user
Founder of Smeretech.com. Sys Admin and IT Manager