This is an old revision of the document!


Laboratorul 02. Lorem ipsum

Introducere

Laborator

01. [15p] Configurare autentificare Unix prin LDAP

Serviciul de LDAP poate fi folosit ca mod centralizat de a permite autentificarea altor servicii. În laboratorul 1, am configurat DokuWiki și MediaWiki pentru a folosi serviciul de LDAP pentru autentificare. O formă frecventă, mai ales în mediile care folosesc Active Directory, este autentificare utilizatorilor locali prin LDAP.

În cele ce urmează vom configura sistemul client pentru a folosi back-end-ul LDAP server pentru autentificarea utilizatorilor. Adică să fie folosite numele de utilizator și parola din baza de date LDAP pentru autentificarea unui utilizator local în Unix. Pentru aceasta vom configura PAM (Pluggable Authentication Module) și NSS (Name Service Switch) pentru a permite autentificarea prin LDAP. În baza de date LDAP sunt deja configurați utilizatori, fiecare cu parola student. Pentru a vedea utilizatorii rulăm, pe stația client, comanda:

root@ldap-client:~# ldapsearch -x -LLL dn
dn: dc=labs,dc=cs,dc=pub,dc=ro
 
dn: cn=admin,dc=labs,dc=cs,dc=pub,dc=ro
 
[...]

Configurarea autentificării Unix prin LDAP o vom face pe stația client. Utilizatorii de pe stația client vor fi autentificați folosind datele din cadrul serverului de LDAP. Vom configura întâi NSS și apoi vom configura PAM.

Pentru configurarea NSS cu suport LDAP instalăm pe stația client pachetul libnss-ldap și răspundem la întrebări cu datele de conectare la serverul de LDAP, ca mai jos:

  • LDAP server Uniform Resource Identifier: ldaps://192.168.0.2
  • Distinguished name of the search base: dc=labs,dc=cs,dc=pub,dc=ro
  • LDAP version to use: 3
  • LDAP account for root: cn=admin,dc=labs,dc=cs,dc=pub,dc=ro
  • LDAP root account password: student
  • Configuring nslcd, LDAP server URI: ldaps://192.168.0.2 (valoarea implicită)
  • Configuring nslcd, LDAP server search base: dc=labs,dc=cs,dc=pub,dc=ro (valoarea implicită)
  • Check server's SSL certificate: never

Configuarea never pentru verificarea certificatului serverului nu este recomandată în mediile de producție. O folosim aici pentru simplitate.

După acest proces de instalare și configurare a fost instalat și pornit Name Service Caching Daemon. Acesta cache-uiește informații transmise de NSS (Name Service Switch) pentru a evita overhead-ul cauzat de interogări continue.

Pentru a valida configurarea inspectăm pe stația client fișierele /etc/libnss-ldap.conf și /etc/libnss-ldap.secret:

root@ldap-client:/etc/ldap/ldif# cat /etc/libnss-ldap.conf | grep -v '^#' | grep -v '^[ \t]*$'
base dc=labs,dc=cs,dc=pub,dc=ro
uri ldaps://192.168.0.2
ldap_version 3
rootbinddn cn=admin,dc=labs,dc=cs,dc=pub,dc=ro
 
root@ldap-client:~# cat /etc/libnss-ldap.secret 
student

Pentru a activa suportul LDAP în NSS, configurăm fișierul /etc/nsswitch.conf. Folosim un editor și edităm liniile aferente categoriilor passwd, group și shadow, ca mai jos:

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:         files ldap
group:          files ldap
shadow:         files ldap
 
hosts:          files mdns4_minimal [NOTFOUND=return] dns
networks:       files
 
protocols:      db files
services:       db files
ethers:         db files
rpc:            db files
 
netgroup:       nis

După configurarea NSS în fișierul /etc/nsswitch.conf, repornim nscd:

root@ldap-client:~# service nscd restart
[ ok ] Restarting Name Service Cache Daemon: nscd.

și apoi verificăm servirea datelor prin LDAP folosind comenzi precum getent, id și finger:

root@ldap-client:~# getent passwd amengsk
amengsk:x:1001:1000:Arcturus Mengsk,,,:/home/amengsk:/bin/bash
 
root@ldap-client:~# id amengsk
uid=1001(amengsk) gid=1000(student) groups=1000(student)
 
root@ldap-client:~# finger amengsk
Login: amengsk        			Name: Arcturus Mengsk
Directory: /home/amengsk            	Shell: /bin/bash
Never logged in.
No mail.
No Plan.

Parola utilizatorului amengsk trebuie setata folosind ldappasswd.

Revedeti Laboratorul 1: http://ocw.cs.pub.ro/courses/saisp/labs/01/contents/06

Observăm că acum sistemul furnizează informații despre utilizatori din baza de date LDAP. Întrucât a fost instalat și configurat simultan pachetul libpam-ldap, vom putea sa ne și autentificăm la utilizatorul amengsk. Putem face acest lucru folosind comanda ssh de pe sistemul fizic:

student@mjolnir:~/vm/kvm$ ssh -l amengsk 192.168.0.3
amengsk@192.168.0.3's password: 
[...]
Could not chdir to home directory /home/amengsk: No such file or directory
amengsk@ldap-client:/$

Observăm că nu a fost creat directorul home pentru utilizator pe stația client. Pentru aceasta cel mai simplu este să activăm modulul pam_mkhomedir prin editarea fișierului /etc/pam.d/common-session și adăugarea liniei:

session required        pam_mkhomedir.so skel=/etc/skel/ umask=0022

După configurarea liniei de mai sus va funcționa conectarea la stația client și crearea directorului home al utilizatorului cu care a fost realizată autentificarea:

razvan@einherjar:~/vm/kvm$ ssh -l amengsk 192.168.0.3
amengsk@192.168.0.3's password: 
Creating directory '/home/amengsk'.
[...]
amengsk@ldap-client:~$ 

Mai sus apare mesajul creării directorului home al utilizatorului amengsk. Sistemul funcționează corespunzător cu autentificarea utilizatorilor prin intermediul LDAP.

2013/11/11 00:49

02. [15p] Configurare grupuri POSIX în LDAP

Pentru a avea granularitate la oferirea de drepturi, putem folosi grupuri POSIX în LDAP. Un grup POSIX este identificat în LDAP de un atribut cn și necesită un identificator de grup, adică atributul gidNumber.

Creați două fișiere LDIF denumite cn-fighters.ldif și cn-politicians.ldif în care creați două grupuri:

  • grupul politicians identificat de cn=politicians,dc=labs,dc=cs,dc=pub,dc=ro, cu gidNumber la valoarea 1500 și având în componență pe amengsk și vmengsk;
  • grupul fighters identificat de cn=fighters,dc=labs,dc=cs,dc=pub,dc=ro, cu gidNumber la valoarea 1501 și având în componență pe raynor, horner, zeratul și artanis.

După ce creați cele două fișiere LDIF încărcați-le în LDAP și verificați prezența noilor grupuri folosind comanda getent și a apartenței utilizatorilor la grupuri folosind comanda id.

Fiecare membru al unui grup este indicat în fișierul LDIF de o linie de forma:

memberUid: <uid>

unde <uid> este identificatorul literal al utilizatorului care face parte din grup. De exemplu, amengsk sau artanis.

Clasa LDAP folosită pentru grupuri este posixGroup. Consultați schema acesteia pe stația server în fișierul /etc/ldap/schema/nis.schema; căutați în fișier după posixGroup.

Reporniți NSCD pentru a încărca noile configurații.

2013/11/11 00:49

03. [10p] Configurare autentificare LDAP pentru anumite grupuri

Ne propunem ca pe stația client să se autentifice doar utilizatorii din grupul POSIX politicians stocat în baza de date LDAP. Realizați această configurare și testați-o. Urmăriți și mesajele de jurnalizare din fișierul /var/log/auth.log pentru verificare.

Indicații despre configurarea unui anumit grup găsiți aici: https://wiki.debian.org/LDAP/PAM, secțiunea “Allowing logins on a per-group basis”.

Parola utilizatorului raynor trebuie setata folosind ldappasswd.

Revedeti Laboratorul 1: http://ocw.cs.pub.ro/courses/saisp/labs/01/contents/06

2013/11/11 00:49

04. [15p] Configurare hostname prin LDAP

Modul în care se face interogarea numelor de stații (hostname) este descris în /etc/nsswitch.conf, componenta hosts. De obicei se întâmplă prin DNS și prin intermediul fișierului /etc/hosts. Putem adăuga intrări și prin LDAP.

Configurați suport de LDAP în NSS (Name Service Switch) pe stația client astfel încât serverul LDAP să fie accesibil prin numele server, clientul prin numele client iar sistemul fizic prin numele host. Pentru validare folosiți getent și ping.

Folosiți pe post de dn valorile:

  • cn=server,dc=labs,dc=cs,dc=pub,dc=ro
  • cn=client,dc=labs,dc=cs,dc=pub,dc=ro
  • cn=host,dc=labs,dc=cs,dc=pub,dc=ro

Va trebui sa creati fisiere ldif care sa descrie valorile de mai sus, iar apoi sa adaugati intrarile respective in baza de date LDAP.

Urmăriți schema clasei ipHost descrisă în fișierul /etc/ldap/schema/nis.schema de pe stația server.

Urmăriți exemplul de configurare de aici: https://wiki.archlinux.org/index.php/LDAP_Hosts

2013/11/11 00:49

05. [10p] Actualizare configurare pentru server

Serverul de LDAP are două tipuri de baze de date. O bază de date internă, pentru configuare, și o bază de date cu informații LDAP. Baza de date internă permite serverului de LDAP configurarea acestuia tot prin comenzi LDAP; se asigură astfel o interfață unificată și, mai mult, posibilitatea de a realiza configurații fără a fi nevoie de repornirea serverului.

Pentru a urmări și configura întreaga bază de date de internă a serverului rulăm, pe stația de tip server, comanda

root@ldap-server:~# ldapsearch -Y EXTERNAL -H ldapi:/// -b "cn=config"
[...]

Sunt afișate foarte multe informații, practic toată baza de date internă a serverului LDAP. Dacă vrem să afișăm doar informațiile ce țin de configurarea informațiilor, vom investiga intrarea olcDatabase={1}hdb,cn=config:

root@ldap-server:~# 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=labs,dc=cs,dc=pub,dc=ro
[...]

Dacă vrem să afișăm informații legate strict de configurarea serverului LDAP (număr de thread-uri folosite, nivel de jurnalizare, certificat) vom investiga doar baza intrării cn=config:

root@ldap-server:~# ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b "cn=config" -s base
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
dn: cn=config
objectClass: olcGlobal
cn: config
olcArgsFile: /var/run/slapd/slapd.args
olcLogLevel: none
olcPidFile: /var/run/slapd/slapd.pid
olcTLSCACertificateFile: /etc/ssl/certs/cacert.org_root.pem
olcTLSCertificateFile: /etc/ssl/certs/slapd-cert.pem
olcTLSCertificateKeyFile: /etc/ssl/private/slapd-key.pem
olcToolThreads: 1

Directivele de configurare în serverul LDAP sunt atribute în intrările cu dn-uri care se termină în cn=config. Atributele încep cu prefixul olc însemnând OpenLDAP Configuration.

Dorim să configurăm nivelul de jurnalizare al serverului LDAP. Directiva de configurare se numește olcLogLevel, așa cum este documentată aici. Observăm că area valoarea none. Vrem să-i schimbăm valoarea la stats.

Pentru aceasta construim un fișier LDIF:

change-log-level.ldif
dn: cn=config
changetype: modify
replace: olcLogLevel
olcLogLevel: stats

apoi încărcăm fișierul în baza de date LDAP:

root@ldap-server:~# ldapadd -Y EXTERNAL -H ldapi:/// -f change-log-level.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"

și verificăm faptul că a fost încărcat corespunzător:

root@ldap-server:~# ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b "cn=config" -s base olcLogLevel
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
dn: cn=config
olcLogLevel: stats

În exemplul de mai sus am creat un fișier LDIF care a modificat valoarea atributului olcLogLevel la valoarea stats. Putem observa informațiile de jurnalizare generate de serverul de LDAP în fișierul /var/log/syslog de pe stația server; eventual facem niște cereri de interogare LDAP (folosind ldapsearch) de pe stația client.

Exercițiu: Modificați nivelul de jurnalizare al serverului LDAP astfel încât să jurnalizeze și mesaje de tipul stats și mesaje de tipul stats2. E ceva simplu :-)

2013/11/11 00:49

06. [10p] Instalare server de LDAP

Ne propunem să urmărim pașii instalării unui server de LDAP. Pentru aceasta o să instalăm un server LDAP pe stația client. Nu este util să existe două servere de LDAP, dar este mai ușor să instalăm un server de la zero decât să dezinstalăm și apoi să reinstalăm pe stația server.

Pachetul pentru serverul de LDAP se numește slapd; îl instalăm

root@ldap-client:~# apt-get install slapd

O să fie cerută parola serverului de LDAP. Introduceți o parolă dorită; recomandăm parola student pentru “unformitate”.

După ce am instalat serverul urmărim că ascultă conexiuni pe portul LDAP 389

root@ldap-client:/etc/ldap/ldif/lab-02-solution# netstat -tlpn | grep slapd
tcp        0      0 0.0.0.0:389             0.0.0.0:*               LISTEN      5985/slapd      
tcp6       0      0 :::389                  :::*                    LISTEN      5985/slapd 

Nu ni s-au cerut alte opțiuni pentru configurare. Asta pentru că serverul LDAP consideră că base dn-ul este FQDN-ul stației. În cazul de față este vorba de FQDN-ul tasks.cs.pub.ro, deci base dn-ul va fi dc=tasks,dc=cs,dc=pub,dc=ro. Putem urmări aceste lucru prin interograrea serverului LDAP local:

root@ldap-client:~# ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -s base -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=tasks,dc=cs,dc=pub,dc=ro
[...]
 
root@ldap-client:~# ldapsearch -x -LLL -H ldap://localhost -b "dc=tasks,dc=cs,dc=pub,dc=ro" dn
dn: dc=tasks,dc=cs,dc=pub,dc=ro
 
dn: cn=admin,dc=tasks,dc=cs,dc=pub,dc=ro

Pe moment, la nivel de date, baza de date LDAP conține doar intrarea pentru base dn și pentru contul de administrator (cn=admin).

Dacă dorim să facem configurări în cadrul serverului de LDAP, vom crea fișiere LDIF și apoi le vom încărca în baza de date LDAP folosind comanda ldapadd.

2013/11/11 00:49
saisp/labs/02.1384123597.txt.gz · Last modified: 2014/01/25 23:01 (external edit)
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0