Postgresql et l'authentification Apache

Comment utiliser Postgresql pour l'authentification Apache

Apache permet de protéger, à l'aide d'un login et d'un mot de passe, l'accès à un répertoire ou à un fichier, par utilisateur ou groupe d'utilisateurs. Apache permet d'utiliser plusieurs méthodes pour gérer les droits des utilisateurs. L'administrateur Web a à sa disposition un script Apache, « htpasswd », et des fichiers de configuration de type texte. Il peut utiliser un annuaire LDAP ou une base de données Postgresql. L'utilisation de Postgresql permet de simplifier la programmation. La gestion des droits d'accès dans le site Web se fait en modifiant les tables, users et groups. Pour mettre en place cette technique il faut configurer Apache et Postgresql, cette documentation explique comment faire.

Préalable

Considérons que vous avez un serveur Web Apache et une base de données Postgresql fonctionnels. Si vous souhaitez modifier dynamiquement les droits Apache, il faut que vous sachiez vous connecter à Postgresql de Apache/Web/PHP, par exemple. Les fichiers de configuration donnés en exemple, sont ceux utilisés sur une distribution Linux RedHat Enterprise.

Installation et configuration

Vous avez donc installé et configuré un serveur web Apache et une base de données Postgresql.

Il vous reste à:

  • Ajouter les tables « users » et « groups » dans une base de données Postgresql.
  • Installer le module Apache mod_auth_pgsql.
  • Configurer le fichier Apache /etc/httpd/conf.d/auth_pgsql.conf
  • Ajouter des fichiers .htaccess dans les répertoires à protéger.

La suite décrit chacune de ces tâches.

Descriptif des tables users et groups Postgresql

Il faut ajouter à votre base de données Postgresql, les tables « users » et « groups », si vous conservez les noms standards des tables. Les tables users et groups doivent être conformes au format attendu par Apache. De plus les tables « users » et « groups » seront lu fréquemment par Apache, elles n'ont pas pour vocation de gérer des données des utilisateurs, hors le login, le mot de passe et l'appartenance à un ou plusieurs groupes d'utilisateurs. Il y a une clé étrangère dans la table « users » proposée. Elle permet des jointures avec une table qui gère les identités des utilisateurs.

Exemple de tables users et groups

CREATE TABLE users
(
user_name character varying(64) NOT NULL,
user_passwd character varying(32) NOT NULL,
"uIdIdentite" integer NOT NULL,
CONSTRAINT users_pkey PRIMARY KEY (user_name),
CONSTRAINT "idIdentite" FOREIGN KEY ("uIdIdentite")
REFERENCES "TIdentite" ("IdIdentite") MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITH (OIDS=FALSE);
ALTER TABLE users OWNER TO basecnl;

CREATE TABLE groups
(
user_name character varying(64) NOT NULL,
user_group character varying(20) NOT NULL,
CONSTRAINT groups_pkey PRIMARY KEY (user_name, user_group),
CONSTRAINT groups_user_name_fkey FOREIGN KEY (user_name)
REFERENCES users (user_name) MATCH FULL
ON UPDATE CASCADE ON DELETE CASCADE
)
WITH (OIDS=FALSE);
ALTER TABLE groups OWNER TO basecnl;

La modification de users et groups, à l'aide de pgadmin3 par exemple, permet de gérer finement les droits d'accès au site Web. Vous pouvez aussi le faire dynamiquement par programmation.

La base de données et les tables qu'Apache utilise pour l'authentification, sont à définir dans /etc/httpd/conf.d/auth_pgsql.conf.

Installer le module Apache mod_auth_pgsql

La façon de faire dépend de la distribution linux, il faut installer mod_auth_pgsql.so.

Configuration de Apache 2 pour Postgresql

Nous utiliserons le module Apache2, mod_auth_pgsql, avec une authentification type: mod_auth_basic".

/usr/lib64/httpd/modules/mod_auth_pgsql.so

Exemple de fichier /etc/httpd/conf.d/auth_pgsql.conf

Dans le fichier /etc/httpd/conf.d/auth_pgsql.conf, vous reconnaîtrez le nom des tables et des champs que vous avez défini dans Postgresql.

LoadModule auth_pgsql_module modules/mod_auth_pgsql.so
<Directory /var/www>
   AuthName "PostgreSQL group authenticated zone"
   AuthType Basic
   Auth_PG_database basecnl
   Auth_PG_pwd_table users
   Auth_PG_uid_field user_name
   Auth_PG_pwd_field user_passwd
   Auth_PG_grp_table groups
   Auth_PG_grp_user_field user_name
   Auth_PG_grp_group_field user_group 
</Directory>

Configuration de Apache – .htaccess des répertoires Web

Les fichiers .htaccess sont des fichiers de configuration d'Apache, permettant de définir des règles dans un répertoire et dans tous ses sous-répertoires (qui n'ont pas de tel fichier à l'intérieur).

Exemple de fichier .htaccess

Ce fichier autorise l'accès au répertoire pour les utilisateurs du groupe « correspondant »

AuthName "Acces restreint aux correspondants "
AuthType basic
#AuthBasicAuthoritative off
Auth_PG_authoritative on
Auth_PG_host localhost
Auth_PG_port xxxx
Auth_PG_user xxxx
Auth_PG_database xxxx
#Auth_PG_pwd xxxxxxxx
Auth_PG_pwd_table "users"
Auth_PG_uid_field user_name
Auth_PG_pwd_field user_passwd
Auth_PG_grp_table "groups"
Auth_PG_grp_user_field user_name
Auth_PG_grp_group_field user_group
Auth_PG_grp_whereclause " and user_group = 'correspondant' "
Auth_PG_encrypted off
<LIMIT GET POST>
require valid-group
</LIMIT>

« AuthBasicAuthoritative off » et « Auth_PG_pwd xxxxxxxx » sont en commentaire. Dans certaines configurations, il faut enlever les commentaires.

Descriptif des champs

Auth_PG_host : Nom ou adresse IP du serveur Postgresql
Auth_PG_port : Port utilisé, par default 5432
Auth_PG_user : Nom de l'utilisateur Postgresql
Auth_PG_pwd : Mot de passe de l'utilisateur
Auth_PG_database : Nom de la base de données
Auth_PG_pwd_table : Nom de la table ou sont stockés les utilisateurs
Auth_PG_uid_field : Nom du champ qui contient le Login de l'utilisateur
Auth_PG_pwd_field : Nom du champ qui contient les mots de passe
Auth_PG_encrypted : Si off les mots de passe sont stockés en clair dans la table
Auth_PG_hash_type : Soit MD5 ou CRYPT

Conclusion

Postgresql est particulièrement performant pour gérer l'authentification Apache. Choisir Postgresql pour réaliser des sites Web dynamique, c'est choisir la garanti d'avoir un produit à la fois professionnel et libre.

Références

mod_auth_pgsql documentation officielle en anglais : http://www.giuseppetanzilli.it/mod_auth_pgsql2/
Apache france: http://forums.apachefrance.com/
Wikipedia les fichiers .htaccess Apache : http://fr.wikipedia.org/wiki/Htaccess
Postgresqlfr le site de la communauté francophone; http://www.postgresql.fr/

Pascal Brognez , le 16 juin 2009