mardi 13 janvier 2009

Configuration du séparateur décimal sur IIS Web Server

Introduction
Voici un article tout droit issus du cauchemar du jour.
D'un côté, nous faisons fonctionner une application Web dans laquelle nous demandons à nos utilisateurs d'encoder les valeurs numériques avec un point comme séparateur décimal.
D'un autre côté, le serveur Web fonctionne sous Windows. Nous utilisons des fonctions de conversion pour transformer les nombres encodés (texte) en valeur numérique avant de les stoquer en mémoire.
Ces mêmes fonctions de conversion s'appuyant sur les paramètres de Windows pour effectuer cette conversion.

Windows est un système d'exploitation suffisament flexible pour permettre de définir le format des nombres.
Suivant les distributions de Windows, pour un Anglais le séparateur décimal sera un "point" tandis que pour un Français (ou un Belge Néerlandophone), ce même séparateur sera une "virgule".

Le noeud du cauchemar

Pour des raisons historiques, les routines de conversions de notre application s'appuie sur Windows.
Nous n'avons pas de problème si le système d'exploitation Windows sur lequel fonctionne le Serveur Web est en Anglais. En effet, dans ce cas nous convertissons du texte contenant des nombres utilisant le "point" comme séparateur décimal et Windows utilise également ce même "point" comme séparateur décimal.
Par contre, si le Serveur Web est une distribution  Française... c'est nettement moins marrant!
Dans ce cas, nous essayons de convertir une zone de texte contenant un nombre utilisant le "point" comme séparateur décimal. Cependant, en configuration française, Windows utilise la virgule comme séparateur décimal et... le point comme sépareteur de milliers! C'est la catastrophe.
Suivant la configuration de la machine, le texte "4.001" peut être soit converti/interprété comme un peu supérieur à 4 (Windows en anglais) soit comme la valeur 4001 (Windows en français).


Une solution simple

Et bien, dans le cadre d'un utilisateur quelconque, il suffit simplement de modifier les "régional settings" (paramètres régionaux) pour remplacer le séparateur décimal.
Le graphique suivant montre quel est la suite d'opération à effectuer (Cliquer pour agrandir):


Cependant, cela ne saurait pas être aussi simple pour un serveur web.
Un serveur WEB utilise un utilisateur d'impersonification (et non l'utilisateur courant manipulant le PC) pour initialiser les paramètres du serveur WEB. Modifier la configuration de l'utilisateur courant n'aura aucun effet sur la configuration du serveur web.


Modifier le séparateur décimal
Voici un petit guide pratique pour modifier la configuration du séparateur décimal utilisé par le serveur Web.

Identifier l'utilisateur d'impersonification
Cette étape va identifier l'utilisateur d'impersonification utilisé par le serveur web pour initialiser ses paramètres. 
1) So Logger comme administrateur sur la machine.

2) Start | Settings | Control Panel
3) Sélectionner l'entrée "Administrative Tools" puis "Internet Information Services"
4) Effectuer les opérations suivantes dans la console Internet Information Services - IIS pour les intimes (voir graphique ci-dessous).
5) L'utilisateur d'impersonification identifié (IUSR_W2KSRV-SP4 dans le cas présent), modifier le mot de passe à utiliser pas IIS (pour cet article il sera initialisé a PASSWORD).


(Cliquer pour agrandir)


Modifier les droits de l'utilisateur d'impersonification
Pour pouvoir modifier les paramètres de l'utilisateur d'impersonification, il convient d'abord de lui donner plus de droits.
Dans le cas contraire, toutes les modifications apportées au profil IUSR_W2KSRV-SP4 seraient perdues lorsque la machine serait redémarrée.
Effectuer les étapes suivantes:

Etape 1 - Modifier le mot de passe

1) Menu démarrer | Paramètres | Panneau de Control
2) Sélectionner "Administrative Tools" (Outils administratifs)
3) Sélectionner "Computer Management" (Gestion de l'ordinateur)
4) Dans la fenêtre "Computer Management":
4.1) Sélectionner le noeud "Local User and Groups"
4.2) Sélectionner le noeud "Users"
Dans dans l'exemple ci-dessous l'utilisateur d'impersonification IUSR_W2KSRV-SP4 est visible dans la liste (cliquer pour agrandir).

4.3) Sélectionner l'utilisateur d'impersonification (IUSR_W2KSRV-SP4 dans le cas présent).
4.4) Invoquer le menu contextuel et sélectionner "Set Password". 
Introduire le mot de passe tel qu'encodé précédemment dans la console d'IIS (dans cet article, le mot de passe est PASSWORD).


Etape 2 - Modifier les groupes
Par défaut, l'utilisateur d'impersonnification IUSR_W2KSRV-SP4 n'appartient qu'au groupe "Guests" (invités).
Ce groupe n'offre pas de privilèges suffisants pour modifier les paramètres de cet utilisateur de façon permanente.

Effectuer les opérations suivantes en repartant du point 4.3 de l'étape 1.

a) Invoquer le menu contextuel et sélectionner "Propiétés".
b) Selectionner le volet "Member of" (membre de). Ce volet ne présente que le groupe "Guests" (invités).
c) Ajouter les groupes "Users", "Administrators", "Power Users" (voir image ci-dessous).
Normalement, l'ajout du groupe "Users"devrait être suffisant pour mener l'opération à bien.

Modifier les paramètres de l'utilisateur d'impersonification
1) Faire un log-out de l'utilisateur courant (normalement Adminsitrator)
2) Se logger comme utilisateur  IUSR_W2KSRV-SP4 avec le mot de passe adéquant (dans notre exemple, il s'agit de PASSWORD)

3) Tout comme au début de l'article, modifier les paramètres pour changer le séparateur décimal a notre convenance (un point).

Dans notre cas, nous avons également modifié l'option de localisation à "English (United Kingdom)"


Application des paramètres
Pour que les paramètres soient sauvés de façon permanente et appliqués au serveur WEB, le plus facile est encore de rebooter/redémarrer la machine.

Note: lors de nos essais, il a été constaté qu'un IISReset ne fonctionnait pas comme attendu. En effet, les nouveaux paramètres de l'utilisateur d'impersonification n'étaient pas correctement appliqués. C'est probablement parce que l'utilistaire IISReset tue sauvagement certains processus du serveur web avant de les redémarrer.

La sécurité
Maintenant que les paramètres de  IUSR_W2KSRV-SP4 sont correctement sauvegardés dans le système, il faut re-modifier son profile pour ne pas laissé de trous de sécurités béants.
Il est impératif de retirer les groupes que nous avons ajoutés à l'utilisateur d'impersonification IUSR_W2KSRV-SP4. Seul le groupe "Guests" présent à l'origine doit rester sélectionné.

Sans cette modification de sécurité, n'importe quel bug dans l'application internet fonctionnant sur le serveur web offrirait une porte dérobée aux hackers expérimentés. Sans modification, le serveur web utiliserait le compte IUSR_W2KSRV-SP4 avec des droits d'administrations (groupe "Administrators"). En cas de bug, le hacker pourrait alors prendre le contrôle complet de la machine sans aucune difficulté.



Aucun commentaire: