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:
Selezionare col tasto destro e scegliere Proprietà sulla connessione di Rete Locale
Selezionare TCP/IP v4 e scegliere Proprietà.
Andare su Wins e inserire l’IP del server con Bind.
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” e “DNSNameResolutionRequired”
3) Impostare “DomainCompatibilityMode” a 1(uno) e “DNSNameResolutionRequired” a 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.