Languages

User login


LDAP per l'autenticació d'usuaris a Linux


Avui he realitzat l'autenticació d'usuaris via LDAP en el línux. Ha estat relativament senzill. Bé, ha estat molt senzill.

Instal·lació de LDAP

El primer que cal fer és instal·lat l'LDAP. A debian només cal executar aquesta comanda.

apt-get install slapd ldap-utils

Configuració d'una BD

El següent pas es modificar el fitxer de configuració LDAP per crear una nova base de dades. En el nostre cas, l'anomenarem "dc=guifi,dc=net" i quedarà guardada a "/var/lib/ldap/guifi_net".

Per fer això afegim les següents línies al final del fitxer "/etc/ldap/slapd.conf":

# Directives per a la base de dades de guifi.net:
database        bdb                             # Tipus de BD (berckley DB)
suffix          "dc=guifi,dc=net"               # La base del teu directori de la database #1
rootdn          "cn=admin,dc=guifi,dc=net"      # L'usuari root d'aquesta BD
rootpw          {SSHA}XgmwZgs/sx6HiTdktcqa5DlpImCwfvMv  # El password obtingut amb slappasswd
directory       "/var/lib/ldap/guifi_net"       # On es guardarà físicament la BD
#index           objectClass eq                  # Indexing options for database
#lastmod         on                              # Save the time that the entry gets modified, f$
#replogfile     /var/lib/ldap/guifi_net/replog  # Where to store the replica logs for database 

Un cop configurada la nova base de dades, no ens oblidem de crear el directori "/var/lib/ldap/guifi_net". I re-iniciar el servei LDAP.

Crear l'objecte arrel

Per a que existeixi la BD cal crear l'objecte arrel d'aquesta BD. Per fer això ho farem amb un fitxer LDIF com aquest "arrel.ldif":

version: 1

#
# Estructura principal de l'arrel de l'arbre
# -- No permet crear l'arrel sense la classe d'objecte "objectClass"
# --
dn: dc=guifi,dc=net
objectClass: dcObject
dc: guifi
objectClass: organization
o: guifi.net
description: LDAP del projecte guifi.net

Per enviar-ho executarem la següent comanda:

ldapadd -H ldap://localhost -x -D "cn=admin,dc=guifi,dc=net" -f arrel.ldif  -W

On -H indica el lloc on es troba el servidor LDAP, -x indica el tipus d'autenticació (SASL), -D indica l'usuari que realitzarà l'afegit, -f indica el fitxer amb les dades a afegir, -W indica que demanarà la contrasenya.

Afegir l'arbre d'usuaris i de grups

Com la majoria sabeu un Linux funciona amb grups i usuaris, així el nostre directori LDAP també els haurà de tenir si volem poder-los gestionar. I els crearem mitjançant unitats d'organització de tipus "posix". El següent fitxer "arbre.ldif" conté aquestes dues branques:

version: 1


# 
# Estructura de grups
# --
dn: ou=groups,dc=guifi,dc=net
objectClass: top
objectClass: organizationalUnit
ou: groups


#
# Estructura d'usuaris
# --
dn: ou=users,dc=guifi,dc=net
objectClass: top
objectClass: organizationalUnit
ou: users

I s'afegeix amb la mateix instrucció anterior:

ldapadd -H ldap://localhost -x -D "cn=admin,dc=guifi,dc=net" -f arbre.ldif  -W

Crear un usuari i un grup de prova

Ara només ens queda crear un usuari i un grup de prova per tenir un usuari LDAP que puguem autenticar. El fitxer "usuari_grup.ldif" contindrà aquests elements:

#
# Usuari de prova per provar l'identificació al servidor
# --
# -- uid: Identificador de l'usuari (req)
# -- userPassword: Password de l'usuari (opt)
# -- uidNumber: Número d'identificador de l'usuari (req)
# -- gidNumber: Numero de l'identificar del grup (req)
# --
dn: uid=tester,ou=users,dc=guifi,dc=net
objectClass: top
objectClass: account
objectClass: posixAccount
uid: tester
cn: Usuari de Proves
userPassword: passwd_tester
uidNumber: 2000
gidNumber: 2000
homeDirectory: /home/tester   
loginShell: /bin/bash


 
# 
# Creem un grup per a aquest usuari
# -- 
dn: cn=testing,ou=groups,dc=guifi,dc=net
objectClass: top
objectClass: posixGroup
cn: testing
gidNumber: 2000

Si us hi fixeu hi ha la classe posixAccount i posixGroup que són les que busquen els sistemes d'autenticació de Linux. El "gidNumber" i "uidNumber", són el número d'usuari i grup que el sistema d'arxius usarà per aquell usuari, i el "uid" serà el nom de l'usuari. Si algun dia s'eliminés aquest usuari, el sistema d'arxius, mostraria el número uidNumber per identificar el propietari dels fitxers.

Si no voleu que l'usuari pugui identificar-se en algun moment, podeu eliminar el password o posar-hi una loginShell que no existeix (no l'esborreu, sinó n'agafarà una per defecte).

Per afegir aquest grup i usuari, fem el mateix d'abans:

ldapadd -H ldap://localhost -x -D "cn=admin,dc=guifi,dc=net" -f usuari_grup.ldif  -W

Bé, ara encara no podem identificar-nos, doncs el sistema no sap que ha de buscar els usuaris en el directori LDAP. Podeu provar-ho si voleu. El directori de l'usuari l'haureu de crear vosaltres, el sistema no el crea automàticament.

Instal·lar el client libnss-ldap

Per a que el sistema localitzi els usuaris, grups i passwords cal instal·lar la següent llibreria, i configurar-la adequadament. Sota Debian cal executar la següent comanda:

apt-get install libnss-ldap

Un cop això, ja podem modificar el fitxer de configuració per permetre identificacions. Modifiquem el fitxer "/etc/nsswitch.conf" per a que aquestes línies quedin més o menys així:

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

El paràmetre "passwd" indica on buscar un nom d'usuari, el "group" on buscar un nom de grup, i "shadow" on trobar la contrasenya. Es recomana que primer miri en els fitxer per defecte del sistema i després a LDAP, i que mai s'esborri l'usuari root dels fitxers del sistema, per poder-hi entrar si falla l'LDAP.

Activar l'autenticació PAM

Tot això que hem fet fins ara només ha servit per que el sistema sàpiga on trobar els usuaris, els grups i els passwords. Però encara no ens permet identificar-nos. Per això hem d'instal·lar el paquet "libpam-ldap". En debian és fa així:

apt-get install libpam-ldap

Un cop instal·lat això haurem de configurar-lo indicant-li en quina BD LDAP ha de buscar les dades per la identificació. El fitxer de configuració serà "/etc/pam_ldap.conf".

host 127.0.0.1
base dc=guifi,dc=net
ldap_version 3

També hi ha el fitxer "pam_ldap.secret" que hauria de tenir permisos de root 600, on hi haurà el password d'accés a l'LDAP. Aquest pot ser en text pla obtingut mitjançant "slappasswd".

Activar els comptes LDAP, l'identificació i el canvi de password

Per poder activar els comptes, identificació i permetre a l'usuari que es canviï la contrasenya haurem de configurar els fitxer "common-account", "common-auth" i "common-password" del directori "/etc/pam.d", per a que quedin semblants a això:

common-account

account sufficient      pam_ldap.so
account required        pam_unix.so

common-auth

auth    sufficient      pam_ldap.so
auth    required        pam_unix.so nullok_secure

common-password

password        sufficient      pam_ldap.so
password        required        pam_unix.so nullok obscure min=4 max=8 md5

Fí, i altres coses

Bé, ara ja hauria de funcionar. Proveu-ho. I si canvieu el password veureu que us indica que aquest es canviarà en el directori LDAP.

tester@bandoler:~$ passwd
Enter login(LDAP) password: 

Si mireu en el mateix directori PAM (/etc/pam.d) veureu que hi ha fitxers per configurar altres serveis com: su, ftp, cron, cvs, login, samba, ssh, ...
En principi si aquestes serveix usen els mateixos usuaris del sistema no hi haurà cap problema per a que no calgui canviar-ho (per exemple "su" i "ssh" em funcionen perfectament), però en canvi FTP utilitza una altra forma d'identificar-se i caldria configurar-ho adientment.

Per a fer-ho només he hagut d'afegir aquestes línies:

auth    sufficient      pam_ldap.so
account sufficient      pam_ldap.so
session sufficient      pam_ldap.so

O com fa el ssh, afegir-hi un include:

@include common-auth
@include common-account
@include common-session

Comentaris

Comment viewing options

Selecciona la vostra manera preferida de visualitzar els comentaris i feu clic en "Desa la configuració" per activar els canvis.

no entenc aquesta comanda

Hola, sóc bastant nou en Linux, i estic realitzant el crèdit de síntesi sobre l'autenticació d'usuaris.

El que no acabo d'entendre de tot aixó és que significa que per enviar-ho, executarem la següent comanda. Què és el que s'envia?

--------------------

Per enviar-ho executarem la següent comanda:

ldapadd -H ldap://localhost -x -D "cn=admin,dc=guifi,dc=net" -f arrel.ldif  -W

-------------------

Gràcies, i perdoneu per la poca experiència en Linux, però d'alguna manera es comença!