Linux: Samba - OpenLDAP: creare un controller di Dominio con Debian Stretch

LDAP è acronimo per Lightweight Directory Access Protocol ossia è un protocollo per la gestione degli utenti centralizzato.

In sostanza si tratta di un database server in cui i dati sono organizzati in maniera gerarchica.
Uno degli utilizzi e' quello di memorizzare gli utenti di una azienda: la gerarchia e' data dai dipartimenti, ed associati agli utenti ci sono le informazioni di autenticazione, gli indirizzi, i numeri di telefono, email, ecc. I sistemi UNIX e Windows hanno anche dei moduli per l'autenticazione degli utenti tramite LDAP: memorizzando le informazioni di login su un server LDAP, si ottiene una gestione omogenea e consistente degli utenti in un ambiente con piattaforme etereogenee; gli utenti accedono con la stessa userid e password su tutti i sistemi.

Il presente HOWTO è stato realizzato utilizzando un sistema Debian 9.4.0 Stretch con tutti gli aggiornamenti di sicurezza ufficiali. La configurazione iniziale del sistema prevede un'installazione base Debian net install con in più:

  • un sistema LAMP c
  • un server DNS,

Si suppone per comodità che tutti i servizi (LDAP, LAMP, DNS) risiedano sullo stesso server.
Durante tutto il processo si presuppone di agire come utente root.

 

Installazione LDAP

come root:

apt-get install slapd ldap-utils

in alcune guide si suggerisce di installare samba-doc, in quest release non è più presente per cui si consiglia di installare:

apt-get install winbind smbclient samba-testsuite samba-common-bin samba-common samba

Verrà eseguita la riconfigurazione di OpenLDAP, ma saranno poste più domande. Rispondete così:

  • Omettere la configurazione di OpenLDAP: no
  • Nome del dominio: dominio.local
  • Nome dell'organizzazione: DOMINIO
  • Password di admin: mia_password
  • Conferma password: mia_password
  • Motore database da utilizzare: BDB
  • Cancellare il database quando si effettua il purge di slapd: no
  • Spostare il vecchio database: sì
  • Permettere LDAPv2: sì (potete anche mettere no)

(il servizio che verrà attivato di chiamerà slapd)

alla prima installazione il software chiederà solo la password di amministratore, gli altri campi non sono richiesti.

Per fare questo si usi il comando:

dpkg-reconfigure slapd

potrebbe capitare che non funzioni, è un errore conosciuto che si può risolvere seguendo il seguente link https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=599585

L'ho risolto ripulendo completamente una vecchia installazione

sudo apt-get remove --purge slapd ldap-utils

sudo rm -R /var/backups/unknown-*  

sudo apt-get install slapd ldap-utils

sudo rm -R /var/backups/ quelli presenti  sudo dpkg-reconfigure slapd

fornire:

il nome del dominio debian

il nome dell'organizzazione bragadin.org

la password dell'amministratore LDAP

con il comando

slapcat

vedo la configurazione di partenza.

con il comando:

ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b cn=config dn

con maggior dettaglio

ldapsearch -x -b "dc=nome_dominio,dc=estensione_del_dominio"

ad esempio

ldapsearch -x -b "dc=debian"

dove con nome_dominio e estensione_del_dominio sono i parametri immessi precedentemente con il comando dpkg.

INTERFACCIA GRAFICA

Per aver un'interfaccia grafica comoda più che per definire i nuovi utenti per la gestione degli stessi:

apt-get install libapache2-mod-php7.0 php7.0 php7.0-cli php7.0-curl php7.0-gd php7.0-imap php7.0-ldap php7.0-mcrypt php7.0-sqlite php7.0-tidy php7.0-xmlrpc php-pear mcrypt libgd-tools

quindi adesso per installare phpmyadmin bisogna:

andare nel sito phpmyadmindownload

e dare il comando

dpkg -i nome_della_directory

ad esempio

dpkg -i /home/francesco/Scaricati/phpldapadmin_1.2.2-6.1_all.deb

 

Configurare il file /etc/phpldapadmin/config.php:

********************************************* *
Define your LDAP servers in this section
**********************************************

servers = new Datastore(); servers->newServer('ldap_pla'); servers->setValue('server','name','DOMINIO Server'); servers->setValue('server','host','127.0.0.1'); servers->setValue('server','base',array('dc=dominio,dc=local')); servers->setValue('login','auth_type','session');

adesso con

localhost/phpldapadmin

posso vedere l'interfaccia grafica:

Nei cambi di login dn inserire dc=****, dc=**** definiti precedentemente.

ad esempio cn=admin, dc=dominio

Phpldapadmin richiede per funzionare la presenza di un tool chiamato mkntpwd, sviluppato dal team di Samba e utilizzato per creare gli hash delle password in Samba. Inspiegabilmente questo tool non è presente negli archivi di Debian. Va pertanto scaricato il seguente file:

mkntpwd.tar

bisogna scompattarlo con con il comando:

tar -zxf mkntpwd.tar.gz

quindi compilato e copiato

make

se questo comando non ci fosse allora bisogna

apt-get install build-essential

allora dare il make

cp mkntpwd /usr/local/bin

a questo punto digitando:

mkntpwd

si possono vedere le opzioni del comando.

Potrebbe capitare:

che accedendo alla parte grafica a sinistra compaia il messaggio

Logged in as: dc=example,dc=com
   This base cannot be created with PLA.

a questo punto andare nel file:

/etc/phpldapadmin/config.php

e sostituire le due linee:

servers->setValue('server','base',array('dc=example,dc=com'));
servers->setValue('login','bind_id','cn=admin,dc=example,dc=com');

con le linee:
servers->setValue('server','base',array('dc=dominio'));
servers->setValue('login','bind_id','cn=admin,dc=dominio');

con dominio il nome del dominio

http://guide.debianizzati.org/index.php/Samba_e_OpenLDAP:_creare_un_controller_di_dominio_con_Debian_Squeeze

SAMBA

apt-get install samba smbclient cifs-utils winbind smbclient samba-testsuite samba-common-bin samba-common smbclient samba-testsuite samba-common-bin samba-common samba

Configurare i SMBLDAP TOOLS

I smbldap-tools sostituiscono i comandi standard di UNIX per la gestione di gruppi, utenti e password in modo da dialogare direttamente con il server LDAP e fornire un metodo per gestire in contemporanea gli account UNIX e SAMBA.

apt-get install smbldap-tools

Copiare i file smbldap.conf e smbldap_bind.conf in /etc/smbldap-tools.

zcat /usr/share/doc/smbldap-tools/examples/smbldap.conf.gz > /etc/smbldap-tools/smbldap.conf

cp /usr/share/doc/smbldap-tools/examples/smbldap_bind.conf /etc/smbldap-tools/smbldap_bind.conf

modificare il file

nano /etc/smbldap-tools/smbldap_bind.conf

inserendo il DN dell'amministratore del server LDAP e la sua password. Il DN dell'amministratore è stato impostato automaticamente durante l'installazione del pacchetto Debian di slapd e corrisponde a "cn=admin,dc=dominio,dc=local", in cui il dominio dipende dalle configurazioni sopra riportate per il server LDAP. La password è quella richiesta in fase di installazione del server LDAP.
Se non si è sicuri del DN da inserire lanciare il comando:

slapcat

e cercare una riga che inizia con "dn: cn=". Il valore riportato è quello da inserire come DN. Nel file sono presenti le configurazioni sia per il master che per lo slave, in modo da poter gestire un server di backup per il sistema LDAP gestito tramite slurpd.
Al momento si presuppone di avere un solo server LDAP, pertanto le configurazioni coincideranno:

slaveDN="cn=admin,dc=dominio,dc=local"

slavePw="password"

masterDN="cn=admin,dc=dominio,dc=local"

masterPw="password"

Sostituire dominio e local con quello inserito nel file LDAP e password con quella inserita per la gestione dell'LDAP.

Il contenuto del file dovrebbe essere il seguente:
/etc/smbldap-tools/smbldap_bind.conf:<<<<<<<

############################
# Credential Configuration #
############################
# Notes: you can specify two differents configuration if you use a
# master ldap for writing access and a slave ldap server for reading access
# By default, we will use the same DN (so it will work for standard Samba
# release)
slaveDN="cn=admin,dc=debian"
slavePw="password"
masterDN="cn=admin,dc=debian"
masterPw="password"

Eseguire ora il comando:

net getlocalsid

copiare o prendere nota del codice che viene restituito.

Modificare il file

nano /etc/smbldap-tools/smbldap.conf

inserendo il SID appena ottenuto e controllare gli indirizzi dei 2 server LDAP in modo che coincidano con il server locale (127.0.0.1).

SID="S-1-5-21-2318037123-1631426476-2439636316"
slaveLDAP="127.0.0.1"
slavePort="389"
masterLDAP="127.0.0.1"
masterPort="389"

Verificare che il TLS sia disabilitato.

ldapTLS="0"

Configurare il corretto suffisso per il dominio (quello specificato nella configurazione di LDAP) e il nome corretto per il dominio che si vuole configurare (DOMINIO).

suffix="dc=debian"
sambaUnixIdPooldn="sambaDomainName=DEBIAN,dollaro{suffix}"

Configurare infine i percorsi per le home degli utenti e per le cartelle che conterranno i profiles nel caso di roaming profiles.

userSmbHome="\\SERVER\homes\%U"
userProfile="\\SERVER\profiles\%U"

SERVER deve essere sostituito con il nome SAMBA del server che funziona come PDC (il server che stiamo configurando; lo stesso nome che verrà impostato più avanti nel file di configurazione di Samba). In questo esempio, inoltre, si è ritenuto di fornire uno script di logon comune a tutti gli utenti, anziché di uno script personale per ogni utente, pertanto si è impostato il seguente parametro:

userScript="logon.bat"

Tale impostazione può essere poi cambiata per determinati utenti con esigenze particolari direttamente agendo sui dati LDAP dell'utente.
Impostare infine il suffisso per gli indirizzi mail, anche se nel presente HOWTO non vengono configurati.

mailDomain="dominio.local"

 

Terminate le modifiche al file, bisogna cambiare i permessi per i file appena modificati al fine di aumentare la sicurezza del sistema ed impedire agli utenti di avere accesso alle password di amministratore di LDAP, scritta in chiaro nel file di configurazione precedentemente modificato.

# chmod 0644 /etc/smbldap-tools/smbldap.conf
# chmod 0600 /etc/smbldap-tools/smbldap_bind.conf

il servizio samba si chiama:

smbd

Configurazione ldap

backup

slapcat > ~/slapd.ldif

oppure:

o più semplicemente

# cp -R /etc/ldap/slapd.d /etc/slapd.d.backup

adesso recupero gli schemi mancanti in :

recuperiamo ora gli schemi ldap mancanti:

# wget http://stefano.dscnet.org/howto/samba-pdc-ldap-kerberos/files/hdb.schema -P /etc/ldap/schema/

# wget http://stefano.dscnet.org/howto/samba-pdc-ldap-kerberos/files/qmailuser.schema -P /etc/ldap/schema/

cp /usr/share/doc/samba/examples/LDAP/samba.schema.gz /etc/ldap/schema/

gunzip /etc/ldap/schema/samba.schema.gz

 

Creiamo il file schema_convert.conf:

# touch /tmp/schema_convert.conf
# nano /tmp/schema_convert.conf

e editiamolo in questa maniera:

include /etc/ldap/schema/core.schema
include /etc/ldap/schema/collective.schema
include /etc/ldap/schema/corba.schema
include /etc/ldap/schema/cosine.schema

include /etc/ldap/schema/duaconf.schema

include /etc/ldap/schema/dyngroup.schema

include /etc/ldap/schema/inetorgperson.schema

include /etc/ldap/schema/java.schema include /etc/ldap/schema/misc.schema

include /etc/ldap/schema/nis.schema

include /etc/ldap/schema/openldap.schema

include /etc/ldap/schema/ppolicy.schema include /etc/ldap/schema/samba.schema

Salviamo il file e creiamo una directory temporanea per gli output di slapcat:

# mkdir /tmp/ldif_output
# slapcat -f /tmp/schema_convert.conf -F /tmp/ldif_output -n0 -s "cn={12}samba,cn=schema,cn=config" > /tmp/samba.ldif
# nano /tmp/samba.ldif

e modifichiamo il file come segue:

dn: cn=samba,cn=schema,cn=config
...
cn: samba

Rimuoviamo le stringhe a fondo pagina lasciando invariato tutto il resto:

structuralObjectClass: olcSchemaConfig
entryUUID: b53b75ca-083f-102d-9fff-2f64fd123c95
creatorsName: cn=config
createTimestamp: 20080827045234Z
entryCSN: 20080827045234.341425Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20080827045234Z

Salviamo tutto e copiamolo in /etc/ldap/schema:

# cp /tmp/samba.ldif /etc/ldap/schema

Quindi generate l'hash SSHA della password di root di LDAP:

# slappasswd

e prendete nota del risultato.
Impostiamo la password di amministratore per configurare l'albero di directory LDAP:

# ldapmodify -Y EXTERNAL -H ldapi:///

La risposta sarà:

SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0

creare un file temporaneo di lavoro in cui si salverà la password e i comandi successcivi che verranno poi copiati nella configurazione

Inseriamo le seguenti righe:

dn: olcDatabase={0}config,cn=config

add: olcRootPW

olcRootPW: {SSHA}XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

terminando con Ctrl+D.

Ora occorre aggiungere gli schemi che ci serviranno per la configurazione:

ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/samba.ldif

Creiamo il file module.ldif per aggiungere il modulo del backend:

# touch /tmp/module.ldif
# nano /tmp/module.ldif

editandolo così:

dn: olcDatabase={1}mdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=dominio,dc=local
-
replace: olcRootDN
olcRootDN: cn=admin,dc=dominio,dc=local
-
replace: olcAccess
olcAccess: to attrs=userPassword,SambaLMPassword,SambaNTPassword,sambaPwdLastSet,sambaPwdMustChange,sambaPasswordHistory by dn="cn=admin,dc=dominio,dc=local" write by anonymous auth by self write by * none
olcAccess: to attrs=shadowLastChange by self write by * read
olcAccess: to dn.base="" by * read by self write
olcAccess: to * by dn="cn=admin,dc=dominio,dc=local" write by * read by self write
-

modifice il dc=dominio con quello impostato nel server Ldap

Aggiungiamo alla configurazione il backend in questo modo:

#ldapadd -Y EXTERNAL -H ldapi:/// -f /tmp/module.ldif

e controlliamo che tutto sia andato a buon fine:

# ldapsearch -xLLL -b cn=config -D cn=admin,cn=config -W olcDatabase={1}mdb

Ora aggiungiamo le informazioni per una corretta indicizzazione:

# touch /tmp/index.ldif
# nano /tmp/index.ldif

editando il file così:

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

e aggiungendolo alla configurazione di LDAP:

# ldapadd -Y EXTERNAL -H ldapi:/// -f /tmp/index.ldif

editiamo il file /etc/ldap/slapd.d/cn=config.ldif così aggiungendo queste linee

olcLogLevel: 1 2 8 64 128 256 512
olcAuthzPolicy: none
olcAuthzRegexp: uid=(.*),cn=.*,cn=auth ldap:///dc=dominio,dc=local??sub?(uid=$1)

Riavviamo infine il demone slapd e va tutto bene.

Configurazione di samba

# mkdir /dominio
# mkdir /dominio/homes
# mkdir /dominio/profiles
# mkdir /dominio/netlogon
# mkdir /dominio/pubblica

con dominio il nome del dominio del nostro server

Adesso si modifica il file smb.conf

presente in /etc/samba/smb.conf

# mv /etc/samba/smb.conf /etc/samba/smb.conf.original
# touch /etc/samba/smb.conf
# nano /etc/samba/smb.conf

GNU nano 2.7.4 File: /etc/samba/smb.conf

VEDI ALLEGATO DA INSERIRE

 

 

 

# testparm

verifico la configurazione

 

Modifichiamo anche il file /etc/samba/usermap: (se non dovesse essere presente basta crearlo

root = DOMINIO.LOCAL\root/admin
Administrator = DOMINIO.LOCAL\Administrator/admin

sostiutire dominio.local quello precedentemente creato

e scarichiamo lo script log_access_login.bash che ci servirà per loggare gli accessi al dominio:

# wget http://stefano.dscnet.org/howto/samba-pdc-ldap-kerberos/files/log_access_login.bash -P /etc/samba
# chmod 700 /etc/samba/log_access_login.bash

sistemiamo ora le ultime directory necessarie:

# mkdir -p /var/log/samba/login-logoff
# rm -rf /etc/samba/*tdb
# rm -rf /var/lib/samba/*tdb
# rm -rf /var/lib/samba/*dat
# rm -f /var/log/samba/*

 

facciamo memorizzare a samba la password dell'utente ldap da usare per la connessione:

# smbpasswd -w password

e riavviamo il servizio:

# /etc/init.d/samba restart

mi fornisce questo errore quando voglio creare un utente

Ultimo passo popolo il dominio samba con l'utility smbldap-populate con i comandi

smbldap-populate -k 0

smbldap-populate -a Administrator -b nobody -u 2000 -g 2000

inoltre creo un file con i seguenti comandi:

dn: cn=NextFreeUnixId,dc=idealx,dc=org
objectClass: inetOrgPerson
objectClass: sambaUnixIdPool
uidNumber: 1000
gidNumber: 1000
cn: NextFreeUnixId
sn: NextFreeUnixId

con dc adattato alla mia realtà.
e lo importo con il comando:

ldapadd -x -D "cn=admin,dc=debian" -w pwd -f /tmp/nomefile.ldif

con pwd la password di amministratore LDAP e nomefile il nome del file con le specifiche precedenti.

Comandi samba

 

To manage user, group, and machine accounts use the utilities provided by the smbldap-tools package. Here are some examples:

  • To add a new user with a home directory:

    sudo smbldap-useradd -a -P -m username
    

    The -a option adds the Samba attributes, and the -P option calls the smbldap-passwd utility after the user is created allowing you to enter a password for the user. Finally, -m creates a local home directory. Test with the getent command:

    getent passwd username

    If you don't get a response, then your libnss-ldap configuration is incorrect.

  • To remove a user:

    sudo smbldap-userdel username
    

    In the above command, use the -r option to remove the user's home directory.

  • To add a group:

    sudo smbldap-groupadd -a groupname
    

    As for smbldap-useradd, the -a adds the Samba attributes.

  • To make an existing user a member of a group:

    sudo smbldap-groupmod -m username groupname
    

    The -m option can add more than one user at a time by listing them in comma-separated format.

  • To remove a user from a group:

    sudo smbldap-groupmod -x username groupname
    
  • To add a Samba machine account:

    sudo smbldap-useradd -t 0 -w username
    

Info su Francesco Bragadin

Insegno informatica e telecomunicazioni al liceo scienze applicate ed all'indirizzo informatica e telecomunicazioni. Ho terminato gli studi in ingegneria elettronica e telecomunicazioni lavorando per molti anni come libero professionista nell'ambito della gestione storage e disaster recovery su mainframe.
Questa voce è stata pubblicata in Senza categoria. Contrassegna il permalink.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *