Mapserver, PostGis et les mots de passe…

Août 18, 2009 géomatique

Lorsqu’on utilise Mapserver avec PostGIS, il faut créer dans le mapfile l’objet LAYER sous cette forme:

LAYER
NAME "Word"
  PROJECTION
    "init=epsg:4326"
  END
  STATUS ON
  METADATA
    "wms_title" "Le monde"
    "wms_feature_info_mime_type" "text/html"
    "wms_include_items" "all"
    "wms_srs" "epsg:4326"
  END
  CONNECTIONTYPE POSTGIS
  CONNECTION "host=127.0.0.1 dbname=lupis password=toto user=postgres"
  DATA "the_geom FROM (SELECT id, name, the_geom FROM  spatial_reference_unity ) AS QUERY USING srid=4326 USING UNIQUE id"
  TYPE POLYGON
  OPACITY 100
  CLASS
    COLOR 255 255 255
    OUTLINECOLOR 0 0 0
  END
END

Il suffit, pour n’importe quel utilisateur, de récupérer l’url du fichier MAP (par exemple http://localhost/france.map) pour récupérer votre mot de passe de la base de données PostGIS (ici pour l’exemple « toto »). Il s’agit d’une faille de sécurité majeure pour votre système d’information.

La solution que j’utilise est l’outil msencrypt fourni par Mapserver (depuis sa version 4.10).

Voici les étapes à suivre pour crypter le mot de passe dans le lien ci-dessus:

  1. Générer une clé de chiffrement (à noter que cette clé ne doit pas être stockée n’importe où sur votre serveur Web, mais bien dans un répertoire à accès restreint):
    msencrypt -keygen « D:\site\
    restricted_folder\mykey.txt »
    Ce fichier de clé généré contient quelque chose comme:
    2137FEFDB5611448738D9FBB1DC5905
  2. Crypter le mot de passe de votre base de données PostGis en utilisant:
    msencrypt -key « D:\site\
    restricted_folder\mykey.txt » « toto »
    Ceci retourne le mot de passe crypté qui doit ressembler à cela:
    8A1B6A098F1BF956
  3. Modifier le mapfile pour s’assurer que le ficheier de clé ‘mykey.txt’ peuvent être trouvé:utiliser la variable d’environnement « MS_ENCRYPTION_KEY » . Le paramètre de configuration à l’intérieur de l’objet MAP peut être utilisé pour définir une variable d’environnement:
    MAP

    CONFIG « MS_ENCRYPTION_KEY » « D:/site/restricted_folder/myPostGisKey.txt »

    FIN # mapfile
  4. Modifier la chaîne connexion de la couche d’utiliser le mot de passe généré clés, en prenant soin d’utiliser les « { } » entre crochet autour de la clé:
    CONNECTION « host=127.0.0.1 dbname=lupis password={8A1B6A098F1BF956} user=postgres »

C’est tout !

Référence: http://mapserver.org/utilities/msencrypt.html