SSO et apache

Déployant pas mal de solution en entreprise, il se pose toujours la question du SSO (Single Sign On) automatique des utilisateurs membres de l’annuaire de l’entreprise, en général Active Directory.

Je fais cet article en parallèle du déploiement de la solution MediaWiki mais son contenu est réutilisable du moment que le service web gère la variable d’environnement REMOTE_USER.

Pré-requis

Nous utiliserons l’infrastructure suivante pour nos essais:

  • Serveur Ubuntu 12.04 LTS x64
  • Apache 2.2.22
  • PHP 5.3.10
  • Librairie libapache2-mod-php5

Vous pouvez installer tout ceci via:

sudo apt-get install apache2
sudo apt-get install php5
sudo apt-get install libapache2-mod-php5

Mettre ensuite en place la synchronisation de l’heure, pré-requis critique:

# aptitude install ntp

Editer le fichier /etc/ntp.conf pour modifier la liste des serveurs.

Éventuellement reconfigurer la « time zone » pour refléter le fuseau horaire via: dpkg-reconfigure tzdata

Pour la suite, il va nous falloir des informations sur le domaine Windows comme le fqdn des contrôleurs de domaine, ou le nom Netbios de ce dernier.

Pour celui-ci nous pouvons l’obtenir via la composant enfichable Active Directory:

netbiosname

1) your domain DNS name
2) your domain Netbios Name

Création d’une stratégie de groupe (GPO) permettant:

  • l’authentification LAN Manager avec le paramètre: Envoyer LM et NTLM – utiliser la sécurité de session NTLM2 si négociée
    Configuration ordinateur > Stratégies > Paramètres Windows > Paramètres de sécurité >Stratégies locales/Options de sécurité >Sécurité réseau > Sécurité réseau : niveau d’authentification LAN Manager
  • l’ajout du site dans la zone intranet local qui dispose d’un niveau de sécurité permettant l’authentification automatique
    Configuration utilisateur > Stratégies > Modèles d’administration > Composants Windows/Internet Explorer/Panneau de configuration Internet/Onglet Sécurité > Liste des attributions de sites aux zones
    Ajouter le site et attribué lui la zone 1

Configuration générique d’apache pour test

Installation du module AuthenNTLM d’apache:

# aptitude install libapache2-authenntlm-perl

Modification du fichier de conf apache:

# vi /etc/apache2/apache.conf

Ajouter les lignes suivantes en les personnalisant:

<Directory « /var/www/ »>
PerlSetVar debug ntlmdebug
PerlAuthenHandler Apache2::AuthenNTLM
AuthType ntlm,basic
AuthName Basic
require valid-user
PerlAddVar ntdomain « YOUR.DOMAIN.FQDN dc1.domain.local dc2.domain.local »
PerlSetVar defaultdomain YOUR.DOMAIN.FQDN# YOUR.DOMAIN.FQDN = le nom netbios du domaine en majuscule!!#PerlSetVar ntlmdebug 2
PerlSetVar splitdomainprefix 1
PerlSetVar ntlmsemtimeout 2

Vérifier au passage que le  KeepAlive est sur On puis sauvegarder le fichier.

Maintenant modifions le fichier resolv.conf:

nameserver 192.168.0.X
nameserver 192.168.0.X
domain domain.local
search domain.local

Et redémarrer apache.

Nous allons créer une page php pour afficher les infos.

Créer un répertoire secure à la racine de /var/www. puis créer dans celui-ci un fichier index.php contenant:

<?php

phpinfo();

?>;

Lancer internet explorer et accéder à la page http://hostname/secure/index.php

Vous devriez avoir les informations suivantes et surtout la variable REMOTE_USER avec votre nom d’utilisateur:

php_info

Il ne vous reste plus qu’à réutiliser cette configuration dans un vHost de votre choix.

kiolul