Configurarea serverului ejabberd cu LDAP
Articolul este preluat de pe jurnalul lui Victor [1]
Pentru a configura eJabberd cu LDAP trebuie să urmați pașii de mai jos:
Notă: fișierul de configurare se află în majoritatea cazurilor în
/etc/ejabberd/ejabberd.cfg
Cuprins |
Notificarea utilizatorilor conectați
Deși pare o glumă, e foarte important ca „firul” să fie liber. Nu pentru că ar periclita cumva configurarea, ci pentru a nu provoca confuzie și întreruperi ale serviciului (care uneori pot fi foarte deranjante) printre utilizatorii conectați. Nimeni nu ar dori ca în mijlocul conversației private cu vărul din America, să se întrerupă conexunea pentru că „adminul se joacă la server”.
Pentru a lista utilizatorii conectați se poate folosi de pe sistemul care găzduiește serverul ejabberd, comanda:
ejabberdctl connected-users
Având o listă cu utilizatorii conectați, varianta cea mai simplă e trimiterea unui mesaj „manual” fiecăruia dintre ei, dacă sunt puțini. Altfel, ar fi nevoie de mod_announce + comenzi Ad-hoc, ceea ce nu face obiectul articolului de față :-)
Dezactivarea autentificării interne
Tot ce e de făcut aici este de căutat linia:
{auth_method, internal}.
...și comentată prefixând-o cu
%%.
Activarea autentificării multiple (Opțional)
Dacă e dorită cumularea utilizatorilor interni ai ejabberd cu cei aflați în directorul LDAP, atunci vor trebui comentate toate liniile care definesc
{auth_method, "ceva"}
și adăugată o nouă linie:
{host_config, "ceata.org", [{auth_method, [internal, ldap]}]}.
Am activat aici pentru gazda ceata.org autentificarea multiplă, prin care atât conturile interne ale ejabberd, cât și cele aflate în LDAP, vor fi validate.
Atenție: dacă vor exista conturi duplicat între ejabberd și LDAP, serverul va da eroare, cerând renunțarea la unul dintre ele! (probabil cel intern ar fi soluția acceptată în majoritatea cazurilor)
Configurarea ejabberd + LDAP
În această fază, avem următoarele instrucțiuni de vânat în ejabberd.cfg:
%% Authentication using LDAP %% {auth_method, ldap}. %% %% List of LDAP servers: {ldap_servers, ["localhost"]}. %% %% Encryption of connection to LDAP servers (LDAPS): %%{ldap_encrypt, none}. %%{ldap_encrypt, tls}. %% %% Port connect to LDAP server: {ldap_port, 389}. %% %% LDAP manager: %%{ldap_rootdn, "cn=admin,dc=example,dc=com"}. %% %% Password to LDAP manager: %%{ldap_password, "mysecurepasswd"}. %% %% Search base of LDAP directory: {ldap_base, "ou=people,dc=ceata,dc=org"}. %% %% LDAP attribute that holds user ID: {ldap_uids, [{"uid", "%u"}]}. %% %% LDAP filter: {ldap_filter, "(objectClass=inetOrgPerson)"}.
Acum, luate linie cu linie:
{auth_method, ldap}.
- se configurează ejabberd să rezolve autentificarea prin LDAP
{ldap_servers, ["localhost"]}. - se definește o listă de server LDAP pe baza cărora să se facă autentificarea. În cazul nostru este doar unul, dar se pot introduce mai multe, separate prin virgulă.
%%{ldap_encrypt, none}. %%{ldap_encrypt, tls}.
- comentăm ambele linii, deoarece gazda LDAP este pe mașina locală (în cazul nostru). Configurarea lor depinde în mare măsură de modul în care se preferă interacțiunea cu serverul LDAP.
{ldap_port, 389}. - evident, portul de conectare la LDAP
%% LDAP manager: %%{ldap_rootdn, "cn=admin,dc=example,dc=com"}. %% %% Password to LDAP manager: %%{ldap_password, "mysecurepasswd"}.
Important: în cazul nostru, utilizatorii se vor conecta la ejabberd prin aceleași parole definite în LDAP. Alternativ, se poate defini un cont care rezolvă autentificarea, dar în majoritatea cazurilor nu pare să fie nevoie.
{ldap_base, "ou=people,dc=ceata,dc=org"}.
Important: unde se face căutarea în schema LDAP (nodul în care sunt definiți utilizatorii)
{ldap_uids, [{"uid", "%u"}]}.
Important: câmpul dindirectorul LDAP care corespunde numelui de utilizator folosit pentru autentificarea în ejabberd. Alternativ, putem avea:
{ldap_uids, [{"email", "%u@example.com"}]}.
- pentru situațiile specifice unei rețele interne, nu intru în detalii.
{ldap_filter, "(objectClass=inetOrgPerson)"}.
- Opțional: un filtru suplimentar, pentru a asigura accesul la server numai utilizatorilor găsiți într-o anumită clasă.
Putem afla simplu aceste variabile prin comanda (exemplu concret):
ldapsearch -b "uid=user,ou=people,dc=ceata,dc=org" -D "uid=user,ou=people,dc=ceata,dc=org" -W -x -h ceata.org
urmată de introducerea parolei proprii (trebuie înlocuit „user” cu un utilizator real).
Test!
Folosind
/etc/init.d/ejabberd restart
(poate varia în funcție de distribuție) ar trebui să se restarteze serverul jabber.
În caz de nevoie, setarea
{loglevel, 5}.
(debug) în ejabberd.cfg și aruncarea unei priviri pe
/var/log/ejabberd/ejabberd.log
ar putea oferi indicii prețioase.
Acum, ar trebui să fie totul configurat pentru a comunica prin XMPP folosind contul de LDAP. Pentru orice problemă întâmpinată în configurarea unui asemenea mediu, sau sugestii de îmbunătățire a configurării, aștept pe mail întrebări etc.