Gestiunea Serviciilor de Rețea

Laborator 09 - LDAP 1

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

1. Interogari LDAP (4p)

  • Comenzi/concepte/fișiere
    • ldapsearch

Tutorial

  • N/A

Exerciții

  • [01]. Pe mașina fizică instalați clientul OpenLDAP (ldap-utils). Afișați lista fișierelor instalate de acest pachet. Gasiți numele utilitarului care permite interogarea LDAP.
Rezolvare
root@mjolnir:~# apt-get update
[...]

root@mjolnir:~# apt-get install ldap-utils
[...]

root@mjolnir:~# dpkg -L ldap-utils
/.
/usr
/usr/bin
/usr/bin/ldappasswd
/usr/bin/ldapmodrdn
/usr/bin/ldapsearch
/usr/bin/ldapwhoami
/usr/bin/ldapcompare
/usr/bin/ldapurl
/usr/bin/ldapmodify
/usr/bin/ldapdelete
/usr/bin/ldapexop
/usr/share
/usr/share/doc
/usr/share/doc/ldap-utils
/usr/share/doc/ldap-utils/copyright
/usr/share/doc/ldap-utils/changelog.Debian.gz
/usr/share/doc/ldap-utils/changelog.gz
/usr/share/doc/ldap-utils/README.Debian
/usr/share/man
/usr/share/man/man5
/usr/share/man/man5/ldif.5.gz
/usr/share/man/man1
/usr/share/man/man1/ldapadd.1.gz
/usr/share/man/man1/ldapurl.1.gz
/usr/share/man/man1/ldapwhoami.1.gz
/usr/share/man/man1/ldapcompare.1.gz
/usr/share/man/man1/ldappasswd.1.gz
/usr/share/man/man1/ldapmodrdn.1.gz
/usr/share/man/man1/ldapexop.1.gz
/usr/share/man/man1/ldapmodify.1.gz
/usr/share/man/man1/ldapdelete.1.gz
/usr/share/man/man1/ldapsearch.1.gz
/usr/bin/ldapadd
  • [02]. Pe mașina fizică adăugați următoarea linie la finalul fișierului /etc/ldap/ldap.conf.
TLS_REQCERT never
Rezolvare
root@mjolnir:~# tail -n 2 /etc/ldap/ldap.conf
TLS_REQCERT never
  • [03]. Afișați toate intrările existente în base-ul swarm.cs.pub.ro de pe serverul de LDAP ldaps://swarm.cs.pub.ro.
  • [03].a. Hint: nu folosiți autentificare prin SASL (man ldapsearch, /simple authentication)
  • [03].b. Hint: specificați în cadrul comenzii adresa serverului LDAP folosită (man ldapsearch, /ldap server)
  • [03].c. Hint: specificați base-ul cerut (man ldapsearch, /searchbase, curs slide 25)
  • [03].d. Hint: severul LDAP de pe swarm.cs.pub.ro nu necesita parolă pentru interogare
Rezolvare
student@mjolnir:~$ ldapsearch -x -H ldaps://swarm.cs.pub.ro -b dc=swarm,dc=cs,dc=pub,dc=ro
[...]
  • [04]. Filtrați căutarea de la exercițiul anterior astfel încât să afișați informații doar despre utilizatorul cu uid-ul guest (Hint: curs slide 26)
Rezolvare
student@mjolnir:~$ ldapsearch -x -H ldaps://swarm.cs.pub.ro -b dc=swarm,dc=cs,dc=pub,dc=ro uid=guest
# extended LDIF
#
# LDAPv3
# base <dc=swarm,dc=cs,dc=pub,dc=ro> with scope subtree
# filter: uid=guest
# requesting: ALL
#

# guest, People, swarm.cs.pub.ro
dn: uid=guest,ou=People,dc=swarm,dc=cs,dc=pub,dc=ro
uid: guest
cn: Guest
sn: Guest
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 1021
gidNumber: 100
homeDirectory: /home/guest
givenName: Guest

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1
  • [05]. Filtrați căutarea de la exercițiul anterior astfel încât să afișați informații doar despre utilizatorii cu uid-ul guest sau cadou (Hint: curs slide 20, 26). ATENȚIE: trebuie să rulați o singură comandă pentru afișarea ambelor rezultate.
Rezolvare
student@mjolnir:~$ ldapsearch -x -H ldaps://swarm.cs.pub.ro -b dc=swarm,dc=cs,dc=pub,dc=ro '(|(uid=guest)(uid=cadou))'
# extended LDIF
#
# LDAPv3
# base <dc=swarm,dc=cs,dc=pub,dc=ro> with scope subtree
# filter: (|(uid=guest)(uid=cadou))
# requesting: ALL
#

# guest, People, swarm.cs.pub.ro
dn: uid=guest,ou=People,dc=swarm,dc=cs,dc=pub,dc=ro
uid: guest
cn: Guest
sn: Guest
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 1021
gidNumber: 100
homeDirectory: /home/guest
givenName: Guest

# cadou, People, swarm.cs.pub.ro
dn: uid=cadou,ou=People,dc=swarm,dc=cs,dc=pub,dc=ro
uid: cadou
cn: cadou
sn: cadou
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 1172
gidNumber: 1024
homeDirectory: /home/cadou
givenName: Cadou

# search result
search: 2
result: 0 Success

# numResponses: 3
# numEntries: 2
  • [06]. Modificați căutarea de la exercițiul 3 astfel încât să afișați informații despre toate intrările care au common name rosedu. (Hint: curs slide 26)
Rezolvare
student@mjolnir:~$ ldapsearch -x -H ldaps://swarm.cs.pub.ro -b dc=swarm,dc=cs,dc=pub,dc=ro cn=rosedu
# extended LDIF
#
# LDAPv3
# base <dc=swarm,dc=cs,dc=pub,dc=ro> with scope subtree
# filter: cn=rosedu
# requesting: ALL
#

# rosedu, Group, swarm.cs.pub.ro
dn: cn=rosedu,ou=Group,dc=swarm,dc=cs,dc=pub,dc=ro
cn: rosedu
objectClass: top
objectClass: posixGroup
memberUid: alexj
memberUid: andradaq
memberUid: andrei
memberUid: asoare
memberUid: cojocar
memberUid: ddvlad
memberUid: laura
memberUid: mihai
memberUid: razvan
memberUid: sergiu
memberUid: adrian.sc
memberUid: alexandra
memberUid: alexef
memberUid: calin
memberUid: dbaluta
memberUid: daniel
memberUid: ddragos
memberUid: george
memberUid: valentin
memberUid: victor
gidNumber: 2025

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1
  • [07]. Modificați căutarea de la exercițiul 3 astfel încât să afișați informații despre toate intrările ou-ul People. (Hint: curs slide 25)
Rezolvare
student@mjolnir:~$ ldapsearch -x -H ldaps://swarm.cs.pub.ro -b ou=people,dc=swarm,dc=cs,dc=pub,dc=ro
[...]

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

  • Comenzi/concepte/fișiere
    • ldapadd
    • adaugare intrari in DLAP
    • modificare intrari in LDAP
    • stergete intrari in LDAP
    • folosire fisiere

Tutorial

  • N/A

Exerciții

  • NOTĂ. La adresa mamba.cs.pub.ro:61089 (ldapuri ldap://mamba.cs.pub.ro:61089) se găsește instalat și configurat un server de LDAP. Base-ul său este dc=fenrir,dc=cs,dc=pub,dc=ro.
  • NOTĂ. Pentru bind pe serverul LDAP de la adresa mamba.cs.pub.ro:61089 se folosesc următoarele date:
    • DN: cn=admin,dc=fenrir,dc=cs,dc=pub,dc=ro
    • password: G2r*Ru1z
  • [01]. Afișați toate intrările existente în base-ul fenrir.cs.pub.ro de pe serverul de LDAP ldap://mamba.cs.pub.ro:61089.
Rezolvare
student@mjolnir:~$ ldapsearch -x -b dc=fenrir,dc=cs,dc=pub,dc=ro -H ldap://mamba.cs.pub.ro:61089
# extended LDIF
#
# LDAPv3
# base <dc=fenrir,dc=cs,dc=pub,dc=ro> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# fenrir.cs.pub.ro
dn: dc=fenrir,dc=cs,dc=pub,dc=ro
objectClass: top
objectClass: dcObject
objectClass: organization
o: University POLITEHNICA of Bucharest
dc: fenrir

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

# search result
search: 2
result: 0 Success

# numResponses: 3
# numEntries: 2
  • [02]. Adăugați, în serverul de LDAP instalat pe mamba.cs.pub.ro:61089, următoarele intrări (Hint: curs, slide 28). (Hint: ldapadd -x -D cn=admin,dc=fenrir,dc=cs,dc=pub,dc=ro -W -f gsr.ldif)
  • [02].a. organizația “GSR<PNume>”, unde <PNume> este compus din prima litera a prenumelui urmată de numele de familie (de exemplu GMilescu pentru George Milescu)
dn: ou=GSR<PNume>,dc=fenrir,dc=cs,dc=pub,dc=ro
ou: GSR<PNume>
objectClass: organizationalUnit
Rezolvare
student@mjolnir:~$ cat gsrgmilescu.ldif
dn: ou=GSRGMilescu,dc=fenrir,dc=cs,dc=pub,dc=ro
ou: GSRGMilescu
objectClass: organizationalUnit

student@mjolnir:~$ ldapadd -x -c -D cn=admin,dc=fenrir,dc=cs,dc=pub,dc=ro -W -f gsrgmilescu.ldif -H ldap://mamba.cs.pub.ro:61089
Enter LDAP Password: 
adding new entry "ou=GSRGMilescu,dc=fenrir,dc=cs,dc=pub,dc=ro"
  • [02].b. obiectul tip person <pnume>, unde <pnume> este compus din prima litera a prenumelui urmată de numele de familie (de exemplu gmilescu pentru George Milescu). Folosiți ca uid și gid numărul 20XX, unde XX este numărul stației la care vă aflați (notat în partea stângă jos a monitorului) prezentat pe două cifre.
dn: uid=<pnume>,ou=GSR<PNume>,dc=fenrir,dc=cs,dc=pub,dc=ro
uid: <pnume>
cn: <pnume>
sn: <pnume>
mail: <pnume>@gsr.cs.pub.ro
objectClass: top
objectClass: person
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
loginShell: /bin/bash
uidNumber: 20XX
gidNumber: 20XX
homeDirectory: /home/<pnume>
Rezolvare
student@mjolnir:~$ cat gmilescu.ldif 
dn: uid=gmilescu,ou=GSRGMilescu,dc=fenrir,dc=cs,dc=pub,dc=ro
uid: gmilescu
cn: gmilescu
sn: gmilescu
mail: gmilescu@gsr.cs.pub.ro
objectClass: top
objectClass: person
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
loginShell: /bin/bash
uidNumber: 2030
gidNumber: 2030
homeDirectory: /home/gmilescu

student@mjolnir:~$ ldapadd -x -c -D cn=admin,dc=fenrir,dc=cs,dc=pub,dc=ro -W -f gmilescu.ldif -H ldap://mamba.cs.pub.ro:61089
Enter LDAP Password: 
adding new entry "uid=gmilescu,ou=GSRGMilescu,dc=fenrir,dc=cs,dc=pub,dc=ro"
  • [03]. Modificați, în serverul de LDAP instalat pe mamba.cs.pub.ro:61089, cn-ul utilizatorului <pnume> în “Prenume Nume” (Hint: curs, slide 30):
Rezolvare
student@mjolnir:~$ cat gmilescu-update.ldif
dn: uid=gmilescu,ou=GSRGMilescu,dc=fenrir,dc=cs,dc=pub,dc=ro
changetype: modify
replace: cn
cn: George Milescu

student@mjolnir:~$ ldapmodify -x -c -D cn=admin,dc=fenrir,dc=cs,dc=pub,dc=ro -W -f gmilescu-update.ldif -H ldap://mamba.cs.pub.ro:61089
Enter LDAP Password: 
modifying entry "uid=gmilescu,ou=GSRGMilescu,dc=fenrir,dc=cs,dc=pub,dc=ro"

student@mjolnir:~$ ldapsearch -x -b dc=fenrir,dc=cs,dc=pub,dc=ro -H ldap://mamba.cs.pub.ro:61089 uid=gmilescu
# extended LDIF
#
# LDAPv3
# base <dc=fenrir,dc=cs,dc=pub,dc=ro> with scope subtree
# filter: uid=gmilescu
# requesting: ALL
#

# gmilescu, GSRGMilescu, fenrir.cs.pub.ro
dn: uid=gmilescu,ou=GSRGMilescu,dc=fenrir,dc=cs,dc=pub,dc=ro
uid: gmilescu
sn: gmilescu
mail: gmilescu@gsr.cs.pub.ro
objectClass: top
objectClass: person
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
loginShell: /bin/bash
uidNumber: 2030
gidNumber: 2030
homeDirectory: /home/gmilescu
cn: George Milescu

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1
  • [03]. Adaugați, în serverul de LDAP instalat pe mamba.cs.pub.ro:61089, următoarea parolă pentru utilizatorul inserat la exercițiul 1 (Hint: curs, slide 27): gsrrulez
Rezolvare
student@mjolnir:~$ ldappasswd -x -D cn=admin,dc=fenrir,dc=cs,dc=pub,dc=ro -W -H ldap://mamba.cs.pub.ro:61089 uid=gmilescu,ou=GSRGMilescu,dc=fenrir,dc=cs,dc=pub,dc=ro -s gsrrulez
Enter LDAP Password:

3. Autentificare Unix folosind LDAP (4p)

  • Comenzi/concepte/fișiere
    • PAM

Tutorial

  • N/A

Exerciții

Puteți folosi pentru suport această pagină web.

Acest set de exerciții se va rezolva pe mașina virtuală.

  • [01]. Configurați NSS pentru a interoga serviciul LDAP de pe mamba.cs.pub.ro:61089 pentru informații legate de utilizatori.
  • [01].a. Instalați pachetul libnss-ldap.
  • [01].b. Configurați corespunzător /etc/libnss-ldap.conf și /etc/nsswitch.conf.
Rezolvare
root@heimdall:~# apt-get update; apt-get install libnss-ldap
[...]
LDAP server URI: ldap://mamba.cs.pub.ro:61089
Distinguished name of the search base: dc=fenrir,dc=cs,dc=pub,dc=ro
LDAP version to use: 3
LDAP account for root: cn=admin,dc=fenrir,dc=cs,dc=pub,dc=ro
LDAP account password: G2r*Ru1z
LDAP administrative account: cn=admin,dc=fenrir,dc=cs,dc=pub,dc=ro
LDAP administrative password: G2r*Ru1z
[...]

root@heimdall:~# cat /etc/libnss-ldap.conf | grep -v '^#' | grep -v '^$'
base dc=fenrir,dc=cs,dc=pub,dc=ro
uri ldap://mamba.cs.pub.ro:61089
ldap_version 3
rootbinddn cn=admin,dc=fenrir,dc=cs,dc=pub,dc=ro

root@heimdall:~# cat /etc/nsswitch.conf
# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd:         compat ldap
group:          compat ldap
shadow:         compat ldap

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis
  • [01].c. Reporniți serverul nscd.
Rezolvare
root@heimdall:~# /etc/init.d/nscd restart
Restarting Name Service Cache Daemon: nscd.
  • [01].d. Verificați configurările realizate folosind getent, id, finger și utilizatorul <pnume> creat anterior.
Rezolvare
root@heimdall:~# getent passwd | tail -n 1
gmilescu:x:2030:2030:George Milescu:/home/gmilescu:/bin/bash

root@heimdall:~# getent passwd gmilescu
gmilescu:x:2030:2030:George Milescu:/home/gmilescu:/bin/bash

root@heimdall:~# id gmilescu
uid=2030(gmilescu) gid=2030 groups=2030

root@heimdall:~# apt-get install finger

root@heimdall:~# finger gmilescu
Login: gmilescu       			Name: George Milescu
Directory: /home/gmilescu           	Shell: /bin/bash
Never logged in.
No mail.
No Plan.
  • [02]. Configurați mașina virtuală astfel încât autentificarea în sistemul de operare să se realizeze și folosind conturile existente în LDAP (Hint: curs, slide 33)
  • [02].a. Instalați pachetul libpam-ldap.
  • [02].b. Configurați fișierul /etc/pam_ldap.conf (specificați base-ul și uri-ul)
Rezolvare
root@heimdall:~# apt-get install libpam-ldap
[...]

root@heimdall:~# cat /etc/pam_ldap.conf | grep -v '^#' | grep -v '^$'
base dc=fenrir,dc=cs,dc=pub,dc=ro
uri ldap://mamba.cs.pub.ro:61089
ldap_version 3
rootbinddn cn=admin,dc=fenrir,dc=cs,dc=pub,dc=ro
pam_password crypt
  • [02].c. Adăugați suport pentru modulul PAM în /etc/pam.d/common-account (account required)și /etc/pam.d/common-auth (auth required).
Rezolvare
root@heimdall:~# cat /etc/pam.d/common-account | grep -v '^#' | grep -v '^$'
account	[success=2 new_authtok_reqd=done default=ignore]	pam_unix.so 
account	[success=1 default=ignore]	pam_ldap.so 
account	requisite			pam_deny.so
account	required			pam_permit.so

root@heimdall:~# cat /etc/pam.d/common-auth | grep -v '^#' | grep -v '^$'
auth	[success=2 default=ignore]	pam_unix.so nullok_secure
auth	[success=1 default=ignore]	pam_ldap.so use_first_pass
auth	requisite			pam_deny.so
auth	required			pam_permit.so
  • [02].d. Autentificați-vă folosind utilizatorul <pnume>.
Rezolvare
student@heimdall:~$ su gmilescu
Password: 

gmilescu@heimdall:/home/student$
  • [02].e. Activați modulul PAM mkhomedir pentru crearea home-ului utilizatorului la autentificare. Folosiți /etc/pam.d/common-session.
Rezolvare
root@heimdall:~# cat /etc/pam.d/common-session | grep -v '^#' | grep -v '^$'
session	[default=1]			pam_permit.so
session	requisite			pam_deny.so
session	required			pam_permit.so
session	required	pam_unix.so 
session	optional			pam_ldap.so 
session required        pam_mkhomedir.so skel=/etc/skel/ umask=0022


student@heimdall:~$ su - gmilescu
Password: 
Creating directory '/home/gmilescu'.

gmilescu@heimdall:~$ pwd
/home/gmilescu

gmilescu@heimdall:~$ 

Bonus

Exerciții

  • [01]. Pe mașina fizică instalați dokuwiki.
Rezolvare
root@mjolnir:~# apt-get install dokuwiki
[...]

accesare http://localhost/dokuwiki/doku.php în browser.
  • [02]. Configurați dokuwiki pentru a realiza autentificarea folosind serverul de LDAP de pe mamba.cs.pub.ro:61089.
    • Hint: folosiți fișierul de configurare local.php.
    • Hint: Urmariți documentația.
    • Hint: instalați pachetul php5-ldap
Rezolvare
root@mjolnir:~# apt-get install php5-ldap
[...]

root@mjolnir:/etc/dokuwiki# /etc/init.d/apache2 restart
Restarting web server: apache2 ... waiting .

root@mjolnir:~# cat /etc/dokuwiki/local.php
<?php
/**
 * Dokuwiki's Main Configuration File - Local Settings
 * Auto-generated by Debian postinst script
 * Date: Fri, 27 Jan 2012 15:33:19 +0200
 */

$conf['title'] = 'Debian DokuWiki';
$conf['license'] = 'cc-by-sa';
#$conf['lang'] = 'en';
$conf['useacl'] = 1;
$conf['superuser'] = '@admin';

$conf['authtype']    = 'ldap';
$conf['auth']['ldap']['server'] = 'ldap://mamba.cs.pub.ro:61089';
$conf['auth']['ldap']['usertree'] = 'dc=fenrir,dc=cs,dc=pub,dc=ro';
$conf['auth']['ldap']['version'] = '3';
$conf['auth']['ldap']['userfilter'] = '(&(uid=%{user})(objectClass=posixAccount))';
laboratoare/laborator-09.txt · Last modified: 2012/01/27 15:54 by george.milescu