dimarts, 25 d’octubre del 2016

Validació LDAP en Linux Ubuntu

Introducció i objectius

LDAP (Ligthweight Directory Access Protocol) és la combinació de:
  • Una base de dades no relacional, si no jeràrquica, optimitzada per fer consultes ràpides, i per guardar dades molt heterogènies amb una despesa d'espai mínim. L'estructura de la base de dades la podeu veure aquí: http://somebooks.es/?p=3444
  • Un servei de directori de xarxa: els serveis de xarxa proporcionen funcions del tipus client que fa un requeriment -> servidor que li respon; els directoris de xarxa són contenidors virtuals de definicions de objectes/recursos que estan disponibles en una xarxa. Els serveis de directori de xarxa proporcionen accés als clients per fer consultes sobre el directori de xarxa, situat en el servidor.
  • Un protocol d'accés al directori; un protocol de xarxa és un conjunt de normes d'accés a un servei, de forma que un client i un servidor poden comunicar-se, fins i tot si tenen sistemes operatius diferents. Això és possible per que tots dos instal·len el mateix protocol que utilitzen per comunicar-se.
  • Un conjunt de programari i fitxers de configuració; per exemple, en el servidor ha d'haber un procés de sistema, que és un "dimoni" en el cas de Linux i la implementació de LDAP anomenada OpenLDAP que es diu slapd (Standalone LDAP Daemon).
El ús típic que se li dona a LDAP és el de validació d'usuaris: per accedir als recursos distribuïts en una xarxa cal identificar-se com a usuari; el servei LDAP pot fer-ho de forma molt eficient, i en xarxes heterogènies. 

Els objectius que ens plantegem són: instal·lar i configurar un servidor i un client OpenLDAP de forma que des del client es pugui iniciar sessió en el servidor usant un compte d'usuari LDAP, en lloc d'usar els comptes d'usuari inclosos en el servidor. La màquina que fa de servidor inicialment va ser un un Debian 8.5 server, però vaig veure que hi havien problemes de dependències de paquets auxiliars amb la darrera versió d'OpenLDAP, la 3, així que finalment s'ha fet amb un Ubuntu 14.04 amb 1Mb de RAM; com a clients utilitzarem un altre Ubuntu 14.04 i un Windows 7.

Instal·lació i configuració del servidor OpenLDAP

Per instal·lar el servei fem:

sudo apt-get install slapd ldap-utils

on slapd és el servei (daemon) LDAP, i ldap-utils un paquet de comandaments en línia per LDAP, com ara ldapadd per afegir objectes al directori, veure https://wiki.debian.org/LDAP/LDAPUtils  per més detalls.Ens preguntarà la password que vole donar a l'administrador LDAP: escric alumne.

La configuració inicial de LDAP la fem així:

 dpkg-reconfigure slapd

  • Ens preguntarà l'adreça DNS de l'arrel de l'arbre LDAP , en el meu cas és asix.org, (que posteriorment en nomenclatura LDAP es transformarà en DC=asix, DC=org). 
  • Després pregunta el nom de l'organització, en el meu cas, asix.
  • Haurem de donar la que serà la contrasenya de l'administrador LDAP.
  • Després ens pregunta la nostra preferència sobre el "motor" de base de dades que usarà LDAP, acceptem HDB. 
HDB (Hummer Data Base) és un motor de BD en xarxa, desenvolupat en llenguatge C destinat a aplicacions de telecomunicacions bancàries, sistemes MIS (https://en.wikipedia.org/wiki/Management_information_system), terminals mòbils i PDAs, etc. 
  • Podem contestar que no es purgui la BD; la resta de preguntes acceptem la resposta per defecte.

Afegir contingut a la BD LDAP

Ho farem directament amb comandaments, tot i que es podria usar utilitats amb interfície gràfica, com ara JXplorer (Java) o phpldapadmin (interfície web: cal instal·lar Apache + PHP + MySQL i configurar-ho).

Creem un fitxer de text pla, que li dic grups.ldif,  amb un editor com ara gedit, nano, etc. En aquest fitxer escriurem la definició dels camps de cada entrada que volem afegir a la BD. Per començar,  creem dues unitats organitzatives:



Els objectclass són els tipus de dades de LDAP; les dades de tipus organizationalUnit defineixen contenidors per altres objectes. Per importar aquest fitxer a LDAP fem:

ldapadd -x -D cn=admin,dc=asix,dc=org -W -f grups.ldif

Després creem un altre fitxer de text amb els usuaris, en el meu cas només un:

Els ObjectClass indiquen que l'entrada és del tipus "persona de l'organització", "compte d'usuari segons l'estàndard POSIX", i compte de seguretat (shadowAccount). Els camps estan relacionats amb aquests tipus d'objecte; per exemple, és obligatori indicar el uid (user identifier) per entrades de tipus inetOrgPerson. Importem aquest fitxer com abans:


ldapadd -x -D cn=admin,dc=asix,dc=org -W -f usuari.ldif

Podem comprovar que s'ha importat tot bé amb el comandament slapcat que llistarà el contingut de tota la BD.

Autenticació d'usuaris usant LDAP


Per usar el servei LDAP per autenticar comptes d'usuaris caldrà reconfigurar la autenticació del servidor, que ara com ja sabem està utilitzant uns fitxers situats en /etc  (com ara /etc/passwd, etc/groups ...); el servei que llegeix aquests fitxers i realitza l'autenticació estàndard d'usuaris s'anomena NSS (Name Services Switch) i la configuració d'aquests servei es fa amb el fitxer /etc/nsswitch.conf. Per tant, el que cal fer es "connectar" el servei NSS amb el servei LDAP.

LDAP - NSS


Per fer-ho tenim el paquet libnss-ldap; per instal·lar aquest paquet:

apt-get install libnss-ldap -y

  • Ens demanarà la IP o nom del servidor LDAP, podem posar la IP o bé donar un nom, com ara ldapserver.asix.org, que previament haurem afegit al fitxer /etc/hosts o encara millor, en un servidor DNS de la xarxa local.
  • A continuació ens demana el nom de l'arrel de l'àrbre LDAP, en el meu cas vaig posar DC=asix, DC=org
  • Després ens pregunta per la versió d'OpenLDAP, posem la 3. A continuació ens fa una pregunta una mica críptica sobre una llibrería anomenada PAM.

PAM (Plug-in Authentication Module) és un altre component del mecanisme d'autenticació en Linux; és un plug-in: un complement que permet que aplicacions diverses puguin també fer autenticació d'usuaris; per exemple, si instal·lem un Wordpress en aquesta màquina i volem que els usuaris locals siguin reconeguts com usuaris Wordpress, caldrà que Wordpress "es connecti" al plug-in PAM
Connexions entre LDAP i PAM

  • Les utilitats que usin PAM-LDAP per l'autenticació veuran tot com si estiguessin treballant amb les contrasenyes locals de la màquina (les de /etc), però de fet estaran guardades en un fitxer diferent al que només l'administrador tindrà accés. Acceptem.
  • El següent pas l'acceptem tal com ve: tothom pot fer consultes a la BD LDAP sense necessitat d'autenticar-se.
  • Ara ens demana el nom de l'administrador LDAP i després la seva password, prenem bona nota!


  • La darrera pregunta és si volem o no encriptar les passwords, acceptem encriptar-les

Configuració dels clients Linux per tal de que validin els usuaris usant el servidor LDAP

Per fer una primera prova, configurarem el propi servidor per que puguem entrar i iniciar sessió amb els usuaris LDAP, a més a més de amb els usuaris del sistema. Fem:

auth-client-config -t nss -p lac_ldap

L'opció nss diu que modifiquem l'autenticació estàndard d'usuaris NSS, "connectant-la" amb LDAP usant el fitxer de configuració lac_ldap, que s'ha generat automàticament al configurar el paquet libnss-ldap en el pas anterior.  Aquest comandament no retorna cap missatge.

Després, actualitzem la configuració del plug-in PAM:

pam-auth-update

Veurem que ens pregunta quins mètodes de autenticació de usuaris volem activar:


La 2a veiem que és LDAP; si ho deixem així, els usuaris seran reconeguts per qualsevol d'aquests mètodes.

Ja podem fer una prova: obrim una consola de text usant Control + Alt + F1 (o bé en Virtual Box Control dret + F1, i provem a obrir sessió amb l'usuari LDAP, que no és usuari estàndard Linux.







Instal·lació d'un servidor NFS sobre Ubuntu

NFS (Network File System) és un sistema de fitxers especialment dissenyat per compartir fitxers en xarxa. Permet muntar localment carpetes remotes com si estiguessin en la màquina local.

A continuació instal·lem i configurem un servidor de fitxers NFS, i un client, per fer proves.

Servidor NFS

Utilitzo una màquina virtual Ubuntu 15.04. Primer de tot faig un apt-get update per actualitzar els repositoris. Després:

sudo apt-get install nfs-kernel-server nfs-common rpcbind

El paquet nfs-kernel-server  és el servidor NFS, 

Configuració de les carpetes compartides

Cal editat el fitxer /etc/exports i afegir allí les carpetes que volem compartir a la xarxa. Conté una linea per cada directori del servidor que volem compartir. L'estructura d'aquesta linea és:

directorio equipo1(opcion11,opcion12) equipo2(opcion21,opcion22)
  • directori: És el directori a compartir.
  • Equipo1, equipo2, ...: Clients que tindran accés al directori compartit. Aquests equips es podran indicar per la seva IP o adreça DNS (per exemple: pc010.ibc.org o 192.168.0.69).
    option: Són les opcions que ens permetran tenir accés a aquests directoris amb determinats privilegis, només veiem les més necessàries, que poden ser
    • ro | rw: read-only o read-write
    • sync | async : amb sync (síncron) NFS no respon a les peticions fins que els canvis que efectua l'usuari realitzats siguin escrits al disc. Amb l'opció async (asíncron) es permet millorar el rendiment i agilitar el funcionament global, però suposa un risc de corrupció de dades si es produeixn fallos del servidor o de la xarxa.
    • Secure /insecure: especifica que NFS pot no usar/usar els ports amb nombre superior al 1024; segons experiència pròpia, si treballem amb una màquina virtual cal especifica l'opció insecure.
Exemple:

/home/user/compartit 10.0.2.0/255.255.255.0(rw,insecure)

especifica que els ordinadors de la xarxa 10.0.2.x poden accedir al directori /home/user001/compartit amb drets de lectura i escriptura per NFS usant qualsevol port. Caldrà que donem els permisos chmod 777 al directori compartit del servidor.

Nosaltres ara farem simplement:

/home/ubuntu        *(ro)

significa compartir la carpeta local /home/ubuntu  amb drets de només lectura; caldrà assegurar-se que aquesta carpeta te els permisos oberts per el grup altres (others).

Reiniciem el servei:

/etc/init.d/nfs-kernel-server restart



Alternativament, en comptes de reiniciar el servidor, podem forçar a que s'actualitzi fent exportfs -r
Ja podem provar a accedir-hi; abans de provar amb una màquina client, està bé provar a accedir-hi des de el propi servidor. Per fer-ho, cal muntar la carpeta compartida (que ara és com si sigues remota) en un directori local; suposem que volem muntar la carpeta remota IP_servidor://home/ubuntu en la carpeta local /mnt/prova-nfs, farem:

mount 127.0.0.1://home/ubuntu /mnt/prova-nfs

Un cop muntada ja podem fer proves d'accés a la carpeta muntada. 


Fig. 1: accedim a /home/ubuntu a través de /mnt/prova-nfs

Per accedir des d'un client, caldrà que aquest tingui instal·lat els paquets nfs-common rpcbind; després, per accedir a les carpetes compartides, simplement les muntem com hem fet en el servidor. Cap complicació addicional.



Gestió d'usuaris i grups en Linux

Usuaris i grups Linux  Els comptes de Linux són com els comptes de Windows o MacOS; però els detalls no, així que cal explicar alguns detall...