Gestiunea Serviciilor de Rețea

Laborator 10 - LDAP 2

IMPORTANT Dacă un pachet nu este instalat iar un exercițiu face referire la acesta, instalați-l.

1. Instalare server LDAP (2p)

  • Comenzi/concepte/fișiere

Tutorial

  • N/A

Exerciții

  • [01]. Pe mașina virtuală instalați serverul de LDAP OpenLDAP și pachetul de utilitare LDAP. Pe mașina fizică instalați pachetul de utilitare LDAP.
  • [01].a. Folosiți parola de administrator student
Rezolvare
root@heimdall:~# apt-get install slapd ldap-utils

root@mjolnir:~# apt-get install ldap-utils
  • [02]. Pe mașina virtuală folosiți dpkg-reconfigure -plow slapd și reconfigurați serverul OpenLDAP.
  • [02].a. Folosiți la DNS Domain Name “heimdall.cs.pub.ro”
  • [02].b. Folosiți la Organisation Name “heimdall.cs.pub.ro”
  • [02].c. Folosiți parola de administrator student
  • [02].d. Alegeți în rest opțiunile implicite.
Rezolvare
root@heimdall:~# dpkg-reconfigure -plow slapd
  • [02]. Pe mașina virtuală aflați portul implicit pe care ascultă serverul de LDAP (Hint: afișați conexiunile listening din sistem).
Rezolvare
root@heimdall:~# netstat -lntp | grep slap
tcp        0      0 0.0.0.0:389             0.0.0.0:*               LISTEN      3063/slapd      
tcp6       0      0 :::389                  :::*                    LISTEN      3063/slapd 
  • [03]. Editați /etc/ldap/ldap.conf și configurați, atât pe mașina virtuală cât și pe cea fizică, variabilele BASE și URI corespunzătoare pentru a putea accesa serverul instalat anterior. Pentru URI flosiți protocolul ldap//.
    • Pentru a referi mașina virtuală de pe mașina fizică folosiți heimdall.local.
Rezolvare
root@heimdall:~# cat /etc/ldap/ldap.conf | tail -n 2
BASE	dc=heimdall,dc=cs,dc=pub,dc=ro
URI	ldap://localhost

root@mjolnir:~# cat /etc/ldap/ldap.conf | tail -n 2
BASE	dc=heimdall,dc=cs,dc=pub,dc=ro
URI	ldap://heimdall.local
  • [04]. De pe mașina fizică afișați toate intrările existente pe serverul de LDAP de pe mașina virtuală. Folosiți ca adresa a serverului LDAP ldap://heimdall.local.
  • [04].a. Când listați, folosiți opțiunea -LLL, pentru afișarea doar a informațiilor relevante.
    • Hint: nu trebuie specificate elemente de autentificare
Rezolvare
student@mjolnir:~$ ldapsearch -xLLL -H ldap://heimdall.local
dn: dc=heimdall,dc=cs,dc=pub,dc=ro
objectClass: top
objectClass: dcObject
objectClass: organization
o: heimdall.cs.pub.ro
dc: heimdall

dn: cn=admin,dc=heimdall,dc=cs,dc=pub,dc=ro
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
  • [05]. De pe mașina virtuală, folosiți modul de autentificare SASL EXTERNAL pentru:
  • [05].a. A lista conținutul intrărilor de până acum.
  • [05].b. A lista conținutul întregului sistem de configurare (folosiți base-ul cn=config).
  • [05].c. A lista conținutul database-ului de configurare (folosiți base-ul olcDatabase={0}config,cn=config).
  • [05].d. A lista conținutul database-ului de configurare a intrărilor (folosiți base-ul olcDatabase={1}hdb,cn=config).
    • Atenție: Autentificarea de tip EXTERNAL trebuie făcută din contul de root.
Rezolvare
root@heimdall:~# ldapsearch -LLL -Y EXTERNAL -H ldapi:///
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
dn: dc=heimdall,dc=cs,dc=pub,dc=ro
objectClass: top
objectClass: dcObject
objectClass: organization
o: heimdall.cs.pub.ro
dc: heimdall

dn: cn=admin,dc=heimdall,dc=cs,dc=pub,dc=ro
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator

root@heimdall:~# ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b cn=config
[...]

root@heimdall:~# ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b olcDatabase={0}config,cn=config
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
dn: olcDatabase={0}config,cn=config
objectClass: olcDatabaseConfig
olcDatabase: {0}config
olcAccess: {0}to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external
 ,cn=auth manage by * break
olcRootDN: cn=admin,cn=config

root@heimdall:~# ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b olcDatabase={1}hdb,cn=config
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
dn: olcDatabase={1}hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {1}hdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=heimdall,dc=cs,dc=pub,dc=ro
olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by anonymou
 s auth by dn="cn=admin,dc=heimdall,dc=cs,dc=pub,dc=ro" write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by self write by dn="cn=admin,dc=heimdall,dc=cs,dc=pub,dc=r
 o" write by * read
olcLastMod: TRUE
olcRootDN: cn=admin,dc=heimdall,dc=cs,dc=pub,dc=ro
olcRootPW: {SSHA}fIllW8Uc1robSrqyVraBgaIIvsAdPkNe
olcDbCheckpoint: 512 30
olcDbConfig: {0}set_cachesize 0 2097152 0
olcDbConfig: {1}set_lk_max_objects 1500
olcDbConfig: {2}set_lk_max_locks 1500
olcDbConfig: {3}set_lk_max_lockers 1500
olcDbIndex: objectClass eq

2. Configurare administrativă de bază (3p)

Tutorial

  • Folosiți pagina de manual slapd-config pentru a determina elemente de configurare OpenLDAP.
  • Nu omiteți folosirea opțiunii -LLL pentru afișare în format redus.

Exerciții

  • [01] De pe mașina virtuală adăugați o parolă pentru utilizatorul care va administra baza de date de configurare.
    • Folosiți o parolă la alegere și ține-ți-o minte (Hint: curs, slide 16 și slappasswd).
Rezolvare
root@heimdall:~# slappasswd 
New password: 
Re-enter new password: 
{SSHA}TCVf9C++OYquGFLxOL+jUzY+PbuPZi0p

root@heimdall:~# cat add-root.ldif 
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}TCVf9C++OYquGFLxOL+jUzY+PbuPZi0p

root@heimdall:~# ldapadd -Y EXTERNAL -H ldapi:/// -f add-root.ldif 
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={0}config,cn=config"
  • [02] De pe mașina fizică folosiți utilizatorul administrativ de mai sus pentru:
  • [02].a. A lista conținutul intrărilor de până acum.
  • [02].b. A lista conținutul întregului sistem de configurare (folosiți base-ul cn=config).
  • [02].c. A lista conținutul database-ului de configurare (folosiți base-ul olcDatabase={0}config,cn=config).
  • [02].d. A lista conținutul database-ului de configurare a intrărilor (folosiți base-ul olcDatabase={1}hdb,cn=config).
  • [02].e. A lista conținutul doar a primului nivel de configurare (folosiți base-ul cn=config). (Hint: man ldapsearch /scope of the search, base).
Rezolvare
student@mjolnir:~$ ldapsearch -xLLL -D cn=admin,cn=config -w student
dn: dc=heimdall,dc=cs,dc=pub,dc=ro
objectClass: top
objectClass: dcObject
objectClass: organization
o: heimdall.cs.pub.ro
dc: heimdall

dn: cn=admin,dc=heimdall,dc=cs,dc=pub,dc=ro
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator

student@mjolnir:~$ ldapsearch -xLLL -D cn=admin,cn=config -w student -b cn=config
[...]

student@mjolnir:~$ ldapsearch -xLLL -D cn=admin,cn=config -w student -b olcDatabase={0}config,cn=config
dn: olcDatabase={0}config,cn=config
objectClass: olcDatabaseConfig
olcDatabase: {0}config
olcAccess: {0}to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external
 ,cn=auth manage by * break
olcRootDN: cn=admin,cn=config
olcRootPW: {SSHA}TCVf9C++OYquGFLxOL+jUzY+PbuPZi0p

student@mjolnir:~$ ldapsearch -xLLL -D cn=admin,cn=config -w student -b olcDatabase={1}hdb,cn=config
dn: olcDatabase={1}hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {1}hdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=heimdall,dc=cs,dc=pub,dc=ro
olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by anonymou
 s auth by dn="cn=admin,dc=heimdall,dc=cs,dc=pub,dc=ro" write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by self write by dn="cn=admin,dc=heimdall,dc=cs,dc=pub,dc=r
 o" write by * read
olcLastMod: TRUE
olcRootDN: cn=admin,dc=heimdall,dc=cs,dc=pub,dc=ro
olcRootPW: {SSHA}fIllW8Uc1robSrqyVraBgaIIvsAdPkNe
olcDbCheckpoint: 512 30
olcDbConfig: {0}set_cachesize 0 2097152 0
olcDbConfig: {1}set_lk_max_objects 1500
olcDbConfig: {2}set_lk_max_locks 1500
olcDbConfig: {3}set_lk_max_lockers 1500
olcDbIndex: objectClass eq

student@mjolnir:~$ ldapsearch -xLLL -D cn=admin,cn=config -w student -b cn=config -s base
dn: cn=config
objectClass: olcGlobal
cn: config
olcArgsFile: /var/run/slapd/slapd.args
olcLogLevel: none
olcPidFile: /var/run/slapd/slapd.pid
olcToolThreads: 1
  • [03] De pe mașina fizică schimbați numărul de thread-uri pe care slapd le poate utiliza la 3 (cn=config, replace: olcToolThreads).
Rezolvare
student@mjolnir:~$ cat threads.ldif 
dn: cn=config
changetype: modify
replace: olcToolThreads
olcToolThreads: 3

student@mjolnir:~$ ldapadd -D cn=admin,cn=config -w student -f threads.ldif
modifying entry "cn=config"
  • [04] De pe mașina fizică configurați serverul OpenLDAP pentru a jurnaliza evenimentele de tipul stats, stats2, shell și parse (căutați olcLogLevel în pagina de manual) (Hint:curs, slide 18)
Rezolvare
student@mjolnir:~$ cat debug.ldif 
dn: cn=config
changetype: modify
replace: olcLogLevel
olcLogLevel: stats stats2 shell parse

student@mjolnir:~$ ldapadd -D cn=admin,cn=config -w student -f debug.ldif
modifying entry "cn=config"

3. Adăugari de informație în LDAP (2p)

  • Comenzi/concepte/fișiere
    • ldapadd
    • adăugare intrări în DLAP
    • modificare intrări în LDAP
    • ștergere intrări în LDAP
    • folosire fișiere

Tutorial

  • Configurați variabilele a și b de forma
    • a=”-x -D cn=admin,cn=config -w pass”, unde pass este parola configurată anterior pentru cn=admin,cn=config
    • b=”-D cn=admin,dc=heimdall,dc=cs,dc=pub,dc=ro -w pass”, unde pass este parola configurată anterior în cadrul wizard-ului de instalare a serverului slapd
  • Folosiți variabilele declarate pentru a simplificarea comenzilor de configurare
Rezolvare
student@mjolnir:~$ a="-x -D cn=admin,cn=config -w student"

student@mjolnir:~$ b="-D cn=admin,dc=heimdall,dc=cs,dc=pub,dc=ro -w student"

Exerciții

  • [01]. Pe mașina fizică descărcați arhiva cu fișierele LDIF de aici pe care să le folosiți în task-urile de mai jos.
Rezolvare
student@mjolnir:~$ wget http://elf.cs.pub.ro/gsr/res/laboratoare/gsr-lab-10-res.tar.gz
[...]

student@mjolnir:~$ tar -xzf gsr-lab-10-res.tar.gz 
[...]
  • [02]. De pe mașina fizică adăugați, în serverul de LDAP instalat pe mașina virtuală, organizațiile WhiteCouncil și Hobbits. Care din variabilele a sau b trebuie folosite?
Rezolvare
student@mjolnir:~/gsr-lab-10-res$ ldapadd $b -f white-council.ldif
adding new entry "ou=WhiteCouncil,dc=heimdall,dc=cs,dc=pub,dc=ro"

student@mjolnir:~/gsr-lab-10-res$ ldapadd $b -f hobbits.ldif 
adding new entry "ou=Hobbits,dc=heimdall,dc=cs,dc=pub,dc=ro"
  • [03]. De pe mașina fizică schimbați parola pentru admin pentru dc=heimdall,dc=cs,dc=pub,dc=ro (olcDatabase={1}hdb,cn=config).
    • Folosiți o parolă la alegere și ține-ți-o minte (Hit: slappasswd, curs slide 17).
    • Refaceți variabila b.
    • Pentru modificarea parolei, care dintre variabilele a sau b trebuie folosite?
Rezolvare
root@heimdall:~# slappasswd 
New password: 
Re-enter new password: 
{SSHA}IvBX+xZAGO69oVZLhQxsZjGKVH3DsG8x

student@mjolnir:~$ cat change-pass.ldif 
dn: olcDatabase={1}hdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}IvBX+xZAGO69oVZLhQxsZjGKVH3DsG8x

student@mjolnir:~$ ldapadd $a -f change-pass.ldif
modifying entry "olcDatabase={1}hdb,cn=config"
  • [04]. De pe mașina fizică adăugați, în serverul de LDAP instalat pe mașina virtuală, utilizatorii aferenți celor 2 grupuri (5 + 4).
Rezolvare
student@mjolnir:~/gsr-lab-10-res$ ldapadd $b -f gandalf.ldif
adding new entry "uid=gandalf,ou=WhiteCouncil,dc=heimdall,dc=cs,dc=pub,dc=ro"

student@mjolnir:~/gsr-lab-10-res$ ldapadd $b -f elrond.ldif
adding new entry "uid=elrond,ou=WhiteCouncil,dc=heimdall,dc=cs,dc=pub,dc=ro"

student@mjolnir:~/gsr-lab-10-res$ ldapadd $b -f frodo.ldif 
adding new entry "uid=frodo,ou=Hobbits,dc=heimdall,dc=cs,dc=pub,dc=ro"

student@mjolnir:~/gsr-lab-10-res$ ldapadd $b -f saruman.ldif
adding new entry "uid=saruman,ou=WhiteCouncil,dc=heimdall,dc=cs,dc=pub,dc=ro"

student@mjolnir:~/gsr-lab-10-res$ ldapadd $b -f galadriel.ldif
adding new entry "uid=galadriel,ou=WhiteCouncil,dc=heimdall,dc=cs,dc=pub,dc=ro"

student@mjolnir:~/gsr-lab-10-res$ ldapadd $b -f cirdan.ldif 
adding new entry "uid=cirdan,ou=WhiteCouncil,dc=heimdall,dc=cs,dc=pub,dc=ro"

student@mjolnir:~/gsr-lab-10-res$ ldapadd $b -f sam.ldif 
adding new entry "uid=sam,ou=Hobbits,dc=heimdall,dc=cs,dc=pub,dc=ro"

student@mjolnir:~/gsr-lab-10-res$ ldapadd $b -f pippin.ldif 
adding new entry "uid=pippin,ou=Hobbits,dc=heimdall,dc=cs,dc=pub,dc=ro"

student@mjolnir:~/gsr-lab-10-res$ ldapadd $b -f merry.ldif 
adding new entry "uid=merry,ou=Hobbits,dc=heimdall,dc=cs,dc=pub,dc=ro"
  • [05]. De pe mașina fizică generați parolă pentru utilizatorul gandalf și pentru utilizatorul frodo (Hint: ldappasswd, curs 9 slide 27).
Rezolvare
student@mjolnir:~$ ldappasswd $b -s gandalf uid=gandalf,ou=WhiteCouncil,dc=heimdall,dc=cs,dc=pub,dc=ro

student@mjolnir:~$ ldappasswd $b -s frodo uid=frodo,ou=Hobbits,dc=heimdall,dc=cs,dc=pub,dc=ro

4. Liste de acces (2p)

Tutorial

  • Consultați pagina de manual slapd-access.
  • Urmăriți acest link.

Exerciții

Exerciții

  • De pe mașina fizică configurați ACL-uri pe serverul LDAP instalat pe mașina virtuală astfel încât:
    • Utilizatorul admin să poată efectua toate operațiile.
    • Utilizatorul gandalf să poată vizualiza toate intrările.
    • Utilizatorii obișnuiți, diferiți de gandalf, să își poată vedea atributele proprii
    • Autentificarea să fie permisă utilizatorilor anonimi.
    • Utilizatorii obișnuiți (inclusiv Gnadalf) să nu își poată schimba parola
    • Hint: curs, slide 22, 23, 24
Rezolvare
student@mjolnir:~$ cat change-acl.ldif 
dn: olcDatabase={1}hdb,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by anonymous auth by dn="cn=admin,dc=heimdall,dc=cs,dc=pub,dc=ro" write by * none
olcAccess: {1}to * by self read by dn="cn=admin,dc=heimdall,dc=cs,dc=pub,dc=ro" write by dn="uid=gandalf,ou=WhiteCouncil,dc=heimdall,dc=cs,dc=pub,dc=ro" read by * none

student@mjolnir:~$ ldapadd $a -f change-acl.ldif
modifying entry "olcDatabase={1}hdb,cn=config"
  • Pentru testare folosiți utilizatorii gandalf și frodo.
Rezolvare
student@mjolnir:~$ ldapsearch -xLLL -D uid=gandalf,ou=WhiteCouncil,dc=heimdall,dc=cs,dc=pub,dc=ro -w gandalf
[...]

student@mjolnir:~$ ldapsearch -xLLL -D uid=frodo,ou=Hobbits,dc=heimdall,dc=cs,dc=pub,dc=ro -w frodo
No such object (32)

student@mjolnir:~$ ldapsearch -xLLL -D uid=frodo,ou=Hobbits,dc=heimdall,dc=cs,dc=pub,dc=ro -w frodo -b uid=frodo,ou=Hobbits,dc=heimdall,dc=cs,dc=pub,dc=ro
dn: uid=frodo,ou=Hobbits,dc=heimdall,dc=cs,dc=pub,dc=ro
uid: frodo
cn: Frodo Baggins
givenName: Frodo
sn: Baggins
mail: frodo@heimdall.local
objectClass: top
objectClass: person
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
loginShell: /bin/bash
uidNumber: 1240
gidNumber: 1240
homeDirectory: /home/frodo

5. Suport TLS (2p)

Tutorial

  • Pe mașina virtuală și pe cea fizică instalați serverul web Apache2.
    root@heimdall:~# apt-get install apache2
    [...]
    
    root@mjolnir:~# apt-get install apache2
    [...]
  • O dată cu Apache2, veți putea folosi certificatul/cheia publică snakeoil (/etc/ssl/certs/ssl-cert-snakeoil.pem//etc/ssl/certs/ssl-cert-snakeoil.key).
  • Fișierul cheie privată poate fi accesat doar de root și grupul ssl-cert. Pe mașina virtuală adăugați utilizatorul openldap la grupul ssl-cert.
    root@heimdall:~# usermod -G ssl-cert openldap
    
    root@heimdall:~# groups openldap
    openldap : openldap ssl-cert
  • Consultați această pagină.

Exerciții

  • Configurați directivele TLS specifice pentru LDAP (Hint: curs, slide 26,27).
Rezolvare
student@mjolnir:~$ cat add-tls.ldif 
dn: cn=config
changetype: modify
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ssl/certs/ssl-cert-snakeoil.pem
-
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ssl/certs/ssl-cert-snakeoil.pem
-
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ssl/private/ssl-cert-snakeoil.key
-
add: olcTLSVerifyClient
olcTLSVerifyClient: never

student@mjolnir:~$ ldapadd $a -f add-tls.ldif 
modifying entry "cn=config"
  • Reporniți serviciul LDAP pe mașina virtuală.
Rezolvare
root@heimdall:~# /etc/init.d/slapd restart
Stopping OpenLDAP: slapd.
Starting OpenLDAP: slapd.
  • Pentru a folosi clientul, pe mașina fizică utilizați TLS_CACERT (sau, alternativ, TLS_REQCERT)) în /etc/ldap/ldap.conf.
Rezolvare
root@mjolnir:~# cat /etc/ldap/ldap.conf | grep -v '^#' | grep -v '^$'
TLS_CACERT	/etc/ssl/certs/ssl-cert-snakeoil.pem
TLS_REQCERT	never
BASE	dc=heimdall,dc=cs,dc=pub,dc=ro
URI	ldap://heimdall.local
  • Pe mașina fizică folosiți StartTLS pentru ldapsearch (folosiți pagina de manual)
Rezolvare
student@mjolnir:~$ ldapsearch -Z -LLL $b
[...]
  • Pe mașina virtuală configurați OpenLDAP pentru a folosi doar conexiuni sigure (ldaps:///). (Hint: /etc/default/slapd)
Rezolvare
root@heimdall:~# cat /etc/default/slapd | grep -v '^#' | grep SLAPD_SERVICES 
SLAPD_SERVICES="ldaps:/// ldapi:///"

root@heimdall:~# /etc/init.d/slapd restart
Stopping OpenLDAP: slapd.
Starting OpenLDAP: slapd.

** Ce se întâmplă dacă transmiteți ldapsearch opțiunea pentru StartTLS? De ce?

Rezolvare
student@mjolnir:~$ ldapsearch -LLL -D cn=admin,dc=heimdall,dc=cs,dc=pub,dc=ro -w student
ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)

student@mjolnir:~$ ldapsearch -Z -LLL -D cn=admin,dc=heimdall,dc=cs,dc=pub,dc=ro -w student
ldap_start_tls: Can't contact LDAP server (-1)
ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)

student@mjolnir:~$ ldapsearch -LLL -D cn=admin,dc=heimdall,dc=cs,dc=pub,dc=ro -w student -H ldaps://heimdall.local
[...]

student@mjolnir:~$ ldapsearch -Z -LLL -D cn=admin,dc=heimdall,dc=cs,dc=pub,dc=ro -w student -H ldaps://heimdall.local
[...]

TLS este deja pornit folosindu-se LDAPS
laboratoare/laborator-10.txt · Last modified: 2012/01/27 17:21 by george.milescu