[Obm] [sso] OBM et LemonLDAP::NG

Thomas Chemineau thomas.chemineau at gmail.com
Wed Sep 9 15:00:51 CEST 2009


Bonjour,

Dans le cadre du déploiement d'OBM en environnement SSO, j'ai
participé à l'élaboration du connecteur LemonLDAP::NG dans OBM
(http://lemonldap.ow2.org). Cette fonctionnalité est maintenant
proposé depuis la version 2.2.5. Cependant, elle souffre encore de
bugs que j'ai déjà soulevés et corrigés:

https://www.obm.org/bugzilla/show_bug.cgi?id=607
https://www.obm.org/bugzilla/show_bug.cgi?id=612
https://www.obm.org/bugzilla/show_bug.cgi?id=614
https://www.obm.org/bugzilla/show_bug.cgi?id=647

+1 patch de mise à jour pour soulager un peu les synchronisations
entre OBM et son annuaire, à venir.
+1 second patch pour éviter de lancer l'automate en global et ne gérer
que de l'incrémental.

Alors, pour rappel, cette fonctionnalité permet pour le moment:
- L'utilisateur s'authentifie sur le portail SSO LemonLDAP::NG, qui
s'appuie sur l'annuaire d'entreprise tiers ;
- Authentification SSO sur OBM ;
- Auto-création à la connexion de compte utilisateur OBM depuis les
infos de l'annuaire tiers ;
- Synchronisation des informations utilisateurs entre l'annuaire tiers et OBM ;
- Synchronisation des mots de passe entre l'annuaire tiers et OBM ;
- Synchronisation des comptes utilisateurs entre OBM et l'annuaire
LDAP OBM (pas d'intervention manuelle).
- Possibilité de mapper les attributs LDAP de l'annuaire tiers sur les
informations utilisateurs d'OBM;

Comme ça manque cruellement d'informations, j'ai réalisé rapidement un
tutoriel de mise en place à partir d'un système Debian fraichement
installé. Je suppose qu'OBM est déjà patché avec les derniers
correctifs. Peut-être que ce document souffre encore de quelques
manques, mais c'est une première version.

Le document est en pièce jointe. L'objectif est de proposer ce
document sur le wiki d'OBM.org, avec mise en forme et plus
d'explications je pense. A votre avis ?

Bonne après-midi,

--
Thomas Chemineau
-------------- next part --------------

OBM 2.2.10+ / LemonLDAP-NG 0.9.4+ / Debian Lenny

================================================================================
 Definition
================================================================================

URL Portail SSO: sso.example.com
URL OBM: obm.example.com
Domaine OBM: example.com

================================================================================
 LemonLDAP::NG
================================================================================

aptitude -y install apache2
a2enmod ssl rewrite
aptitude -y install libxml-simple-perl libjs-jquery libapache-session-perl \
  libnet-ldap-perl libhtml-template-perl libjs-jquery libxml-libxml-perl \
  libxml-libxslt-perl libstring-random-perl libapache-session-perl libwww-perl \
  libcache-cache-perl libapache2-mod-perl2 liburi-perl libdbi-perl \
  libcache-cache-perl libregexp-assemble-perl libcrypt-rijndael-perl
wget wget http://download.forge.objectweb.org/lemonldap/lemonldap-ng-0.9.4_debian.deb.tar.gz
tar zxf lemonldap-ng-0.9.4_debian.deb.tar.gz
dpkg -i liblemonldap-ng-conf-perl_0.9.4-1_all.deb \
  liblemonldap-ng-handler-perl_0.9.4-1_all.deb \
  liblemonldap-ng-manager-perl_0.9.4-1_all.deb \
  liblemonldap-ng-portal-perl_0.9.4-1_all.deb \
  lemonldap-ng-doc_0.9.4-1_all.deb lemonldap-ng_0.9.4-1_all.deb
/etc/init.d/apache2 restart

Créer le fichier /etc/lemonldap-ng/init-apache2.conf:

8<--------
# Perl environment
PerlRequire /var/lib/lemonldap-ng/handler/MyHandler.pm
PerlOptions +GlobalRequest
<Files ~ "\.(pl)$">
   SetHandler      perl-script
   PerlHandler     ModPerl::Registry
   PerlSendHeader  On
</Files>
8<--------

Créer les liens symboliques:

ln -s /etc/lemonldap-ng/init-apache2.conf /etc/apache2/conf.d/lemonldap-ng.conf
ln -s /etc/lemonldap-ng/portal-apache2.conf /etc/apache2/sites-enabled/001-lemonldap-ng-portal
ln -s /etc/lemonldap-ng/manager-apache2.conf /etc/apache2/sites-enabled/002-lemonldap-ng-manager

Editer le fichier /etc/lemonldap-ng/apply.conf et ajouter la ligne suivante:

8<--------
obm.example.com http://obm.example.com/reload
8<--------

Editer le fichier /etc/lemonldap-ng/apps-list.xml et ajouter les lignes
suivantes dans la catégorie "Example":

8<--------
<application id="obm">
  <name>OBM</name>
  <uri>http://obm.example.com/</uri>
  <description>Access to OBM</description>
  <logo>wheels.png</logo>
  <display>auto</display>
</application>
8<--------

Ensuite, renommer les hôtes virtuel d'administration:

sed -i 's/manager.example.com/manager.sso.example.com/g' /etc/lemonldap-ng/manager-apache2.conf
sed -i 's/auth.example.com/sso.example.com/g' /etc/lemonldap-ng/portal-apache2.conf
sed -i 's/<VirtualHost \*>/<VirtualHost \*:80>/g' /etc/lemonldap-ng/portal-apache2.conf /etc/lemonldap-ng/manager-apache2.conf

Ajuster la configuration dans /etc/lemonldap-ng/manager-apache2.conf:

8<--------
<Directory /var/lib/lemonldap-ng/manager>
  Order deny,allow
  Allow from All
  Options +ExecCGI
</Directory>
8<--------

Et commenter la ligne suivante dans /etc/lemonldap-ng/portal-apache2.conf:

8<--------
# require SOAP::Lite;
8<--------

Activer le stockage des mots de passe en session dans le fichier
/var/lib/lemonldap-ng/portal/index.pl:

8<--------
storePassword      => 1,
8<--------

Redémarrer le serveur Apache:

/etc/init.d/apache2 restart

Aller sur le manager de LemonLDAP, et configurer les paramètres d'authentication

Type d'authentification: ldap
Portail d'authentification: http://sso.example.com
Domaine: example.com

Puis ajuster les paramètres LDAP (DN, mot de passe, etc...). Par exemple:

Base de recherche LDAP => ou=people,dc=example,dc=com
Port du serveur LDAP => 389
Serveur LDAP => 192.168.0.1
Compte de connexion LDAP => cn=manager,dc=example,dc=com
Mot de passe LDAP => secret

Ajouter les attributs à exporter suivants:

c => c
facSimileTelephoneNumber => facSimileTelephoneNumber
givenName => givenName
l => l
mail => mail
mailQuota => mailQuota
postalCode => postalCode
serialNumber => serialNumber
sn => sn
telephoneNumber => telephoneNumber
uid => uid

Ensuite, créer un hôte virtuel nommé "obm.example.com", et créer les entêtes
suivantes:

OBM_C => $c
OBM_FACSIMILETELEPHONENUMBER => $facSimileTelephoneNumber
OBM_GIVENNAME => $givenName
OBM_GROUPS => $groups
OBM_L => $l
OBM_MAIL => $mail
OBM_MAILQUOTA => $mailQuota
OBM_POSTALCODE => $postalCode
OBM_SERIALNUMBER => serialNumber
OBM_SN => $sn
OBM_TELEPHONENUMBER => $telephoneNumber
OBM_UID => $uid
OBM_USERPASSWORD => $_password

Vous pouvez fixer en dur le mail de l'utilisateur dans OBM, et ensuite les
ajuster dans l'annuaire LDAP plus tard:

OBM_MAIL => "$uid\@example.com"

Les variables obligatoirement non vide sont: OBM_UID, OBM_USERPASSWORD, OBM_SN
et OBM_MAIL.

Puis configurer les règles de cet hôte virtuel:

^/logout => logout_sso http://sso.example.com
default => allow

Enregistrer la configuration. Ensuite, vous pouvez sécuriser l'interface
d'administration, via une authentification LDAP par exemple:

8<--------
<Directory /var/lib/lemonldap-ng/manager>
  Order deny,allow
  Allow from All
  Options +ExecCGI

  AuthType Basic
  AuthName "LemonLDAP::NG manager interface"
  AuthBasicProvider ldap
  AuthzUserAuthoritative On
  AuthzLDAPAuthoritative Off
  AuthLDAPBindDN cn=manager,dc=example,dc=com
  AuthLDAPBindPassword secret
  AuthLDAPURL ldap://127.0.0.1:389/ou=accounts,ou=system,dc=example,dc=com?uid?one?(objectClass=person)

  Require valid-user
</Directory>
8<--------

Attention à activer les modules d'authentification LDAP dans Apache.

Finalement, pour la nouvelle configuration de LemonLDAP::NG soient prise en
compte, redémarrer le serveur Apache:

/etc/init.d/apache2 restart

================================================================================
 OBM
================================================================================

Editer le fichier /etc/apt/sources.list.d/obm.list :

8<--------
deb http://deb.obm.org stable obm
deb http://deb.obm.org oldstable obm
8<--------

wget -q  http://deb.obm.org/obmgpg.pub -O - | apt-key  add -
aptitude update
aptitude -y install obm

cp /usr/share/doc/obm-ui/apache-virtualhost_obm.conf.sample /etc/apache2/sites-available/obm
ln -s /etc/apache2/sites-available/obm /etc/apache2/sites-enabled/003-obm
 
Puis compléter le fichier /etc/apache2/sites-available/obm, pour inclure les
règles de réécriture à la fin de ce fichier dans un hôte virtuel:

8<--------
<virtualhost *:80>
  servername obm.example.com
  <IfModule mod_rewrite.c>
    <IfModule mod_ssl.c>
        RewriteEngine On
        RewriteCond %{HTTPS} !=on
        RewriteRule . https://%{SERVER_NAME}%{REQUEST_URI} [L]
    </IfModule>
  </IfModule>
</virtualhost>
8<--------

Maintenant, il faut se connecter à l'interface d'OBM et créer tout ce qu'il faut.
Par défaut, c'est le domaine "example.com" qui est utiliser dans ce document.

Une fois la configuration terminée, editer le fichier /etc/apache2/sites-available/obm
et inclure les directives suivantes dans l'hôte virtuel SSL d'OBM:

8<--------
# SSO protection
PerlHeaderParserHandler My::Package
# Configuration reload mechanism (only 1 per physical server is
# needed): choose your URL to avoid restarting Apache when
# configuration change
<Location /reload>
  Order deny,allow
  Deny from all
  Allow from 127.0.0.0/8
  PerlHeaderParserHandler My::Package->refresh
</Location>
8<--------

Indiquer que certains points d'accès n'ont pas besoin de SSO:

8<--------
#obm#<Location /funambol>
#obm#ProxyPass ajp://_TOMCAT_SERVER_:8009/funambol
#obm#PerlHeaderParserHandler My::Package->unprotect
#obm#</Location>

#obm#<Location /obm-sync>
#obm#ProxyPass ajp://_TOMCAT_SERVER_:8009/obm-sync
#obm#PerlHeaderParserHandler My::Package->unprotect
#obm#</Location>

#obm#<Location /minig>
#obm#ProxyPass ajp://_TOMCAT_SERVER_:8009/minig
#obm#PerlHeaderParserHandler My::Package->unprotect
#obm#</Location>

#<Location /webmail/images>
#ProxyPass ajp://_TOMCAT_SERVER_Minig:8009/minig/images
#PerlHeaderParserHandler My::Package->unprotect
#</Location>
8<--------

Et fixer le nom de l'hôte virtuel dans :

8<--------
  servername obm.example.com
8<--------

On suppose que le serveur ne dipose que d'OBM, il faut forcer la redirection
HTTPS dans le handler. Editer le fichier /var/lib/lemonldap-ng/handler/MyHandler.pm:

8<--------
https => 1,
8<--------

Editer ensuite le fichier /etc/obm/obm_conf.inc, et configurer les directives
suivantes:

$auth_kind = 'LemonLDAP';

"auto_update"           => true,
"url_logout"            => "http://sso.example.com/logout",

OBM attends les entêtes HTTP déclarées dans LemonLDAP::NG, plusieurs d'entre
elles sont obligatoires: OBM_UID, OBM_USERPASSWORD, OBM_SN et OBM_MAIL.


More information about the Obm mailing list