[:it]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:
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
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
ecco un esempio di smb.conf funzionante:
# 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
[:]