LemonLDAP::NG is a WebSSO and access management free software.
The OBM integration with LemonLDAP::NG allows you to automatically create users form their first web connection. This means that you can handle all the user management on your current directory without using the OBM administration interfaces.
A good thing is that LemonLDAP::NG can forward to OBM data from you main user directory or database. For example you can import mail, quota, passwords and a lot of other things through simple HTTP headers.
LemonLDAP::NG offers a web user interface to change password as user. It applies changes directly on your LDAP directory or user database.
LemonLDAP::NG can be used to authenticate OBM users against LDAP directory, SQL database, OpenID, Twitter, SAML, CAS, etc.
1) Avant tout il est necessaire d'installer toutes les dépendances nécessaires.
aptitude update
aptitude install apache2 libapache2-mod-perl2 libapache-session-perl libnet-ldap-perl libcache-cache-perl libdbi-perl \ perl-modules libwww-perl libcache-cache-perl libxml-simple-perl libsoap-lite-perl libhtml-template-perl libregexp-assemble-perl \ libjs-jquery libxml-libxml-perl libcrypt-rijndael-perl libio-string-perl libxml-libxslt-perl libconfig-inifiles-perl \ libjson-perl libstring-random-perl libemail-date-format-perl libmime-lite-perl libcrypt-openssl-rsa-perl libcrypt-openssl-x509-perl \ libdigest-hmac-perl libclone-perl libauthen-sasl-perl
2) Ensuite il faut télécharger puis installer les librairies jquery.
wget http://archive.debian.org/debian-backports/pool/main/j/jquery/libjs-jquery_1.4.2-2~bpo50+1_all.deb wget http://archive.debian.org/debian-backports/pool/main/j/jqueryui/libjs-jquery-ui_1.8.dfsg-3~bpo50+1_all.deb
3) Enfin il faut installer ces librairies
dpkg -i libjs-jquery_1.4.2-2~bpo50+1_all.deb dpkg -i libjs-jquery-ui_1.8.dfsg-3~bpo50+1_all.deb
On peut à présent se lancer dans l'installation de LemonLDAP
1) Ajouter le dépôt de lemonldap-ng :
vi /etc/apt/sources.list.d/lemonldap-ng.list
2) Ajouter le contenu suivant dans lemonldap-ng
# LemonLDAP::NG repository deb http://lemonldap-ng.org/deb squeeze main deb-src http://lemonldap-ng.org/deb squeeze main
3) Prise en compte des nouveaux depots:
aptitude update
4) Lancement de l’installation de LemonLDAP-NG
aptitude install lemonldap-ng
5) Définition du domaine
Par défaut dans les configurations de LemonLDAP le domaine est “example.com”. Il faut donc remplacer ce domaine par celui que vous avez choisi pour le site.
sed -i 's/example\.com/mondomaine.com/g' /etc/lemonldap-ng/* /var/lib/lemonldap-ng/conf/lmConf-1 /var/lib/lemonldap-ng/test/index.pl
1) Dans Debian, le Virtual host par défaut est déjà créé, il suffit juste de vérifier si il est activé.
ls /etc/apache2/sites-enabled/000-default
2) S’il n’est pas dans le dossier « sites-enabled » il faut l’activer :
a2ensite default
3) Ensuite il faut ajouter la première ligne suivante au fichier ”/etc/apache2/sites-enabled/000-default” pour pouvoir l’utiliser avec un nom :
NameVirtualhost *:80
4) Enfin, il faut ajouter les redirections suivantes dans le fichier /etc/apache2/sites-enabled/000-default
<VirtualHost *:80>
[...]
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^manager\.mondomaine\.com$
RewriteRule . https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} ^auth\.mondomaine\.com$
RewriteRule . https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} mondomaine\.com$
RewriteRule . https://obm.mondomaine.com%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} !^localhost$
RewriteCond %{HTTP_HOST} !^127.0.0.1$
RewriteCond %{HTTPS} !=on
RewriteRule . https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301]
</VirtualHost>
Les lignes ci dessus servent simplement à faire une redirection HTTP en HTTPS (ainsi si vous tapez http://mondomaine.com le redirection suivante s’effectuera : https://mondomain.com). ATTENTION à bien penser à remplacer “mondomaine” par votre domaine.
1) Il est nécessaire d'éditer /etc/apache2/sites-enabled/obm.conf (/etc/httpd/conf.d/obm.conf sous RedHat/CentOS) et de verifier le nom du serveur :
ServerName obm.mondomaine.com
2) Ensuite il faut ajouter le Handler au fichier /etc/apache2/sites-enabled/obm.conf
PerlOptions +GlobalRequest PerlRequire /var/lib/lemonldap-ng/handler/MyHandler.pm PerlHeaderParserHandler My::Package
Le Handler sert à protéger les applications par l’authentification.
3) Il faut ensuite effectuer une déprotection des différents services d'OBM
Il s'agit de déprotéger les services obm-sync, active-sync, les répertoire images et sso. Commenter du coup les lignes suivantes :
ProxyPass /obm-sync http://localhost:8080/obm-sync ProxyPassReverse /obm-sync http://localhost:8080/obm-sync ProxyPass /funambol http://localhost:8080/funambol ProxyPassReverse /funambol http://localhost:8080/funambol <Location /minig> ProxyPass ajp://localhost:8009/minig </Location> ProxyPass /Microsoft-Server-ActiveSync http://localhost:8082/Microsoft-Server-ActiveSync ProxyPassReverse /Microsoft-Server-ActiveSync http://localhost:8082/Microsoft-Server-ActiveSync
Remplacer ensuite les lignes ci-dessus par les blocs suivants :
<Location /obm-sync>
Order Allow,Deny
Allow from All
ProxyPass http://127.0.0.1:8080/obm-sync
ProxyPassReverse http://127.0.0.1:8080/obm-sync
PerlHeaderParserHandler My::Package->unprotect
</Location>
<Location /funambol>
Order Allow,Deny
Allow from All
ProxyPass http://127.0.0.1:8080/funambol
ProxyPassReverse http://127.0.0.1:8080/funambol
PerlHeaderParserHandler My::Package->unprotect
</Location>
# <Location /minig>
# Order Allow,Deny
# Allow from All
# ProxyPass ajp://127.0.0.1:8009/minig
# PerlHeaderParserHandler My::Package->unprotect
# </Location>
<Location /Microsoft-Server-ActiveSync>
Order Allow,Deny
Allow from All
ProxyPass http://127.0.0.1:8082/Microsoft-Server-ActiveSync
ProxyPassReverse http://127.0.0.1:8082/Microsoft-Server-ActiveSync
PerlHeaderParserHandler My::Package->unprotect
</Location>
<Location /images>
Order Allow,Deny
Allow from All
PerlHeaderParserHandler My::Package->unprotect
</Location>
<Location /sso>
Order Allow,Deny
Allow from All
PerlHeaderParserHandler My::Package->unprotect
</Location>
On voit ici que l’on déprotège les services ci-dessus. Il est en effet inutile de protéger ces services car ils tournent en « background » (Ce serai embêtant par exemple d’imposer une authentification pour la synchronisation)
4) Commenter les lignes concernant la redirection :
#<IfModule mod_rewrite.c>
# <IfModule mod_ssl.c>
# RewriteEngine On
# RewriteCond %{HTTPS} !=on
# RewriteRule . https://%{SERVER_NAME}%{REQUEST_URI} [L]
# </IfModule>
#</IfModule>
5) Ajouter ce bloc concernant l'intégration de LemonLDAP dans apache ( /etc/apache2/sites-enabled/obm.conf ) : Attention de ne pas oublier de “décommenter” les lignes concernant la documentation en fonction de la distribution
#_LEMON_BEGIN_
## Rewrite rules ##
RewriteEngine On
RewriteCond %{HTTP_HOST} ^manager\.mondomaine\.com$
RewriteRule . https://obm.mondomaine.com/sso/manager%{REQUEST_URL} [L,R=301]
RewriteCond %{HTTP_HOST} ^auth\.mondomaine\.com$
RewriteRule . https://obm.mondomaine.com/sso/portal%{REQUEST_URL} [L,R=301]
## Prise en charge des fichiers Perl ##
<Files *.pl>
SetHandler perl-script
PerlResponseHandler ModPerl::Registry
</Files>
## Directory index ##
<IfModule mod_dir.c>
DirectoryIndex index.pl index.html
</IfModule>
## Configuration portail ##
Alias /sso/portal /var/lib/lemonldap-ng/portal/
<Directory /var/lib/lemonldap-ng/portal/>
Order allow,deny
Allow from all
Options +ExecCGI Includes FollowSymlinks
PerlHeaderParserHandler My::Package->unprotect
</Directory>
<Location /sso/portal>
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/javascript text/css
SetOutputFilter DEFLATE
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
</IfModule>
<IfModule mod_headers.c>
Header append Vary User-Agent env=!dont-vary
</IfModule>
</Location>
<Location /sso/portal/skins/>
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 1 month"
</IfModule>
</Location>
# SOAP functions for configuration access (disabled by default)
<Location /sso/portal/index.pl/config>
Order deny,allow
Deny from all
Allow from 127.0.0.0/8
</Location>
<Perl>
require Lemonldap::NG::Portal::SharedConf;
Lemonldap::NG::Portal::SharedConf->compile(
qw(delete header cache read_from_client cookie redirect unescapeHTML));
# Uncomment this line if you use Lemonldap::NG menu
require Lemonldap::NG::Portal::Menu;
# Uncomment this line if you use portal SOAP capabilities
#require SOAP::Lite;
</Perl>
## Configuration manager ##
Alias /sso/manager /var/lib/lemonldap-ng/manager/
<Directory /var/lib/lemonldap-ng/manager>
Order deny,allow
Deny from all
Allow from 127.0.0.0/8
#Order allow,deny
#Allow from all
Options +ExecCGI
PerlHeaderParserHandler My::Package->unprotect
</Directory>
# Alias vers la documentation pour RedHat / CentOS
#Alias /doc /var/lib/lemonldap-ng/doc/
#<Directory /var/lib/lemonldap-ng/doc>
# Alias vers la documentation pour Debian Lenny
#Alias /doc /usr/share/doc/lemonldap-ng-doc/
#<Directory /usr/share/doc/lemonldap-ng-doc>
# Partie commune aux deux distributions
# Order allow,deny
# Allow from all
# Options +ExecCGI
# PerlHeaderParserHandler My::Package->unprotect
#</Directory>
Alias /lib /var/lib/lemonldap-ng/doc/lib/
<Directory /var/lib/lemonldap-ng/lib>
Order allow,deny
Allow from all
Options +ExecCGI
PerlHeaderParserHandler My::Package->unprotect
</Directory>
Alias /javascript /usr/share/javascript/
<Directory /usr/share/javascript>
Order allow,deny
Allow from all
PerlHeaderParserHandler My::Package->unprotect
</Directory>
## Configuration handler ##
<Location /reload>
Order deny,allow
Deny from all
Allow from 127.0.0.0/8
PerlHeaderParserHandler My::Package->refresh
</Location>
#_LEMON_END_
On voit que dans la configuration du portail et du manager on effectue une « dé protection ». Pour le portail, il est complétement inutile d’appliquer une protection car son objectif principal est de protéger. Pour le manager (interface de gestion LemonLdap) il n'est pas imposé d’effectuer une « protection », mais une fois toutes les configurations effectuées il est préférable de protéger l’accès, en revanche lorsque l'on configure on peut déprotéger.
6) Redémarrage d'Apache
/etc/init.d/apache2 restart
Vérifier l'url de reload dans le fichier /etc/lemonldap-ng/lemonldap-ng.ini :
# URL used to reload configuration reload.mondomaine.com = https://obm.mondomaine.com/reload
Le reload va permettre de recharger les configurations qui seront effectuées dans lemonldap.
Editer le fichier /etc/hosts et ajouter l'enregistrement suivant :
127.0.0.1 reload.mondomaine.com
Il suffit d'éditer le fichier /etc/obm/obm_conf.inc en ajoutant les lignes suivantes
$auth_kind = 'LemonLDAP';
$lemonldap_config = Array(
"auto_update" => false,
"auto_update_force_user" => true,
"auto_update_force_group" => true,
"url_logout" => "https://obm.mondomaine.com/logout",
"server_ip_address" => "localhost",
"server_ip_check" => false,
"debug_level" => "debug",
// "debug_header_name" => "HTTP_OBM_UID",
// "group_header_name" => "HTTP_OBM_GROUPS",
"headers_map" => Array(
//"userobm_gid" => "HTTP_OBM_GID",
//"userobm_domain_id" => ,
"userobm_login" => "HTTP_AUTH_USER",
//"userobm_password" => "HTTP_OBM_USERPASSWORD",
//"userobm_password_type" => ,
//"userobm_perms" => "HTTP_OBM_PERMS",
//"userobm_kind" => ,
//"userobm_lastname" => "HTTP_OBM_SN",
//"userobm_firstname" => "HTTP_OBM_GIVENNAME",
//"userobm_title" => "HTTP_OBM_TITLE",
//"userobm_email" => "HTTP_OBM_MAIL",
//"userobm_datebegin" => "HTTP_OBM_DATEBEGIN",
//"userobm_account_dateexp" => ,
//"userobm_delegation_target" => ,
//"userobm_delegation" => ,
//"userobm_description" => "HTTP_OBM_DESCRIPTION",
//"userobm_archive" => ,
//"userobm_hidden" => ,
//"userobm_status" => ,
//"userobm_local" => ,
//"userobm_photo_id" => ,
//"userobm_phone" => "HTTP_OBM_TELEPHONENUMBER",
//"userobom_phone2" => ,
//"userobm_mobile" => ,
//"userobm_fax" => "HTTP_OBM_FACSIMILETELEPHONENUMBER",
//"userobm_fax2" => ,
//"userobm_company" => "HTTP_OBM_O",
//"userobm_direction" => ,
//"userobm_service" => "HTTP_OBM_OU",
//"userobm_address1" => "HTTP_OBM_POSTALADDRESS",
//"userobm_address2" => ,
//"userobm_address3" => ,
//"userobm_zipcode" => "HTTP_OBM_POSTALCODE",
//"userobm_town" => "HTTP_OBM_L",
//"userobm_zipcode" => "HTTP_OBM_POSTALCODE",
//"userobm_town" => "HTTP_OBM_L",
//"userobm_expresspostal" => ,
//"userobm_host_id" => ,
//"userobm_web_perms" => ,
//"userobm_web_list" => ,
//"userobm_web_all" => ,
//"userobm_mail_perms" => ,
//"userobm_mail_ext_perms" => ,
//"userobm_mail_server_id" => ,
//"userobm_mail_server_hostname" => ,
//"userobm_mail_quota" => "HTTP_OBM_MAILQUOTA",
//"userobm_nomade_perms" => ,
//"userobm_nomade_enable" => ,
//"userobm_nomade_local_copy" => ,
//"userobm_email_nomade" => ,
//"userobm_vacation_enable" => ,
//"userobm_vacation_datebegin" => ,
//"userobm_vacation_dateend" => ,
//"userobm_vacation_message" => ,
//"userobm_samba_perms" => ,
//"userobm_samba_home" => ,
//"userobm_samba_home_drive" => ,
//"userobm_samba_logon_script" => ,
// ---- Unused values ? ----
//"userobm_ext_id" => "HTTP_OBM_SERIALNUMBER",
//"userobm_system" => ,
//"userobm_nomade_datebegin" => ,
//"userobm_nomade_dateend" => ,
//"userobm_location" => ,
//"userobm_education" => ,
),
);
Une fois l'installation de LemonLDAP effectuée, il faut effectuer des configurations sur LemonLDAP via l'interface Manager en tapant l'adresse suivante dans votre navigateur : https://yourdomain.com/sso/manager. Vous trouverez les étapes de configuration à cette adresse : http://obm.org/doku.php?id=docs:configuration:lemonldap#configuration_du_manager
1) Ajouter le dépôt de lemonldap-ng :
vim /etc/yum.repos.d/lemonldap-ng.repo
2) Ajouter le contenu suivant dans lemonldap-ng
[lemonldap-ng] name=LemonLDAP::NG packages baseurl=http://lemonldap-ng.org/rpm/ enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-OW2
3) Prise en compte des nouveaux depots
yum update
4) Récupération de la signature GPG des paquets
wget http://lemonldap-ng.org/_media/rpm-gpg-key-ow2 rpm --import rpm-gpg-key-ow2
5) Installation du package
yum install lemonldap-ng
6) Définition du domaine
Par défaut dans les configurations de LemonLDAP le domaine est “example.com”. Il faut donc remplacer ce domaine par celui que vous avez choisi pour le site.
sed -i 's/example\.com/mondomaine.com/g' /etc/lemonldap-ng/* /var/lib/lemonldap-ng/conf/lmConf-1 /var/lib/lemonldap-ng/test/index.pl
Par défaut sous Centos (contrairement à Debian) il n’y a pas de virtual host par défaut. Il faut donc ajouter les lignes suivantes a la fin de /etc/httpd/conf/httpd.conf :
NameVirtualhost *:80
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog /var/log/httpd/error_log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/httpd/access_log combined
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^manager\.mondomaine\.com$
RewriteRule . https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} ^auth\.mondomaine\.com$
RewriteRule . https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} mondomaine\.com$
RewriteRule . https://obm.mondomaine.com%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} !^localhost$
RewriteCond %{HTTP_HOST} !^127.0.0.1$
RewriteCond %{HTTPS} !=on
RewriteRule . https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301]
</VirtualHost>
Les lignes ci dessus servent simplement à faire une redirection HTTP en HTTPS (ainsi si vous tapez http://mondomaine.com le redirection suivante s’effectuera : https://mondomain.com). ATTENTION à bien penser à remplacer “mondomaine” par votre domaine.
Voila pour la création du virtual host par défaut.. A présent il faut configurer le virtual host d’OBM.
La configuration étant la même que Debian, veuillez cliquer sur le lien ci-dessous :
http://obm.org/doku.php?id=docs:configuration:lemonldap#iii_configuration_du_virtual_host_obm
Cliquer sur le lien ci-dessous pour configurer LemonLDAP dans OBM :
http://obm.org/doku.php?id=docs:configuration:lemonldap#iv_configuration_lemonldap_dans_obm
Une fois l'installation de LemonLDAP effectuée, il faut effectuer des configurations sur LemonLDAP via l'interface Manager en tapant l'adresse suivante dans votre navigateur : https://yourdomain.com/sso/manager
1) Paramètres Généraux → Portail
URL : https://obm.mondomaine.com/sso/portal puis Appliquer Menu -> Modules -> Changement de mot de passe : désactivé puis Appliquer Menu -> Catégories et applications : Supprimer toutes les catégories Menu -> Catégories et applications : Nouvelle Catégorie - identifiant de la catégorie : 1OBM - nom à afficher : OBM puis Appliquer Menu -> Catégories et applications -> 1OBM : Nouvelle application - identifiant de l'application : 11OBM - nom à afficher : OBM - adresse : https://obm.mondomaine.com - logo : bookmark.png (étoile) - Description : Calendrier et contacts - Mode d'affichage : Automatic et Appliquer Menu -> Catégories et applications -> 1OBM : Nouvelle application - identifiant de l'application : 12WEBMAIL - nom à afficher : Webmail - adresse : https://obm.mondomaine.com/webmail - logo : mailappt.png (envellope) - Description : Accès aux mails - Mode d'affichage : Automatic et Appliquer Personnalisation -> Réinitialisation de mot de passe : désactivé Personnalisation -> Autocomplétion : activé Personnalisation -> Protection anti-frame : désactivé
2) Paramètres Généraux → Modules d'authentification
Paramètres LDAP -> Connexion -> Hôte : spécifier l'hôte ou l'ip du serveur ldap (localhost ?) puis Appliquer Paramètres LDAP -> Connexion -> Port : spécifier le port puis Appliquer Paramètres LDAP -> Connexion -> Base de recherche des utilisateurs : même paramètre que dans le script obm-admin (dc=local) puis Appliquer
3) Paramètres Généraux → Cookies
Domaine : mondomaine.com et Appliquer Cookie sécurisé (SSL) : Cookie sécurisé (HTTPS)
4) Paramètres Généraux → Sessions
Stocke le mot de passe de l'utilisateur en session : Activé Délai d'expiration des sessions : 15 min
5) Paramètres Généraux → Paramètres avancés
Transfert de déconnexion : Nouvelle Clef - OBM - https://obm.mondomaine.com/obm.php?action=logout et Appliquer Transfert de déconnexion : Nouvelle Clef - Roundcube - https://obm.mondomaine.com/webmail/?_task=logout et Appliquer
6) Variables
Attributs à exporter : Effacer les clefs mail et cn Attributs à exporter -> Nouvelle clef : obmDomain - obmDomain et Appliquer # seulement en cas de multi-domaines Attributs à exporter -> Nouvelle clef : login - login et Appliquer # seulement en cas de multi-domaines Macros : Supprimer la macro par défaut Macros -> Nouvelle clef : login - "$uid\@$obmDomain" et Appliquer # seulement en cas de multi-domaines
7) Hôtes virtuels
Supprimer les hôtes par défaut (test1 et test2) Nouvel hôte virtuel : obm.mondomaine.com et Appliquer
8) Hôtes virtuels → Règles
Editer la règles par defaut (default) : Remplacer deny par accept puis Appliquer Nouvelle règle : commentaire : logout - Règle : logout_sso https://obm.mondomaine.com/sso/portal/?logout=1 - Expression : ^/logout puis Appliquer Nouvelle règle : commentaire : unprotect_obm - Règle : unprotect - Expression : ^/obm.php?action=logout puis Appliquer Nouvelle règle : commentaire : unprotect_roundcube - Règle : unprotect - Expression : ^/webmail/?_task=logout puis Appliquer
9) Hôtes virtuels → En-têtes HTTP
Editer la clef Auth-User : Remplacer $uid par $login et Appliquer
Nouvelle Clef : Authorization - "Basic ".encode_base64("$uid:$_password") et Appliquer
10) Hôtes virtuels → Options
HTTPS : activé
11) Sauvegarde de la configuration
Cliquer sur sauver
Il est impossible de s'authentifier avec l'utilisateur admin0 car celui ci n'est pas dans l'annuaire