Avui he realitzat l'autenticació d'usuaris via LDAP en el línux. Ha estat relativament senzill. Bé, ha estat molt senzill.
El primer que cal fer és instal·lat l'LDAP. A debian només cal executar aquesta comanda.
apt-get install slapd ldap-utils
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.
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.
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
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.
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.
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".
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ò:
account sufficient pam_ldap.so account required pam_unix.so
auth sufficient pam_ldap.so auth required pam_unix.so nullok_secure
password sufficient pam_ldap.so password required pam_unix.so nullok obscure min=4 max=8 md5
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
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:
-------------------
Gràcies, i perdoneu per la poca experiència en Linux, però d'alguna manera es comença!