L'authentification dans Apache (et II): digérer et mySQL

Print E-mail
Technologie - Général
Thursday, 18 March 2010 14:39

Apache Nous continuons aujourd'hui avec deux autres méthodes d'authentification dans Apache. La première chose à voir les problèmes de gestion récupère les logins et mots de passe, mais aborde la question du transfert de mots de passe en clair, sans l'aide de SSL. Est d'utiliser l'authentification Digest. La procédure, comme vous le verrez est très similaire à celui observé l'autre jour avec l'authentification de base, mais la modification de certaines des directives, et en utilisant l'utilitaire htdigest htpassword au lieu de créer le fichier de mot de passe. Le module d'authentification doit vient généralement avec Apache, mais pas activé par défaut. Pour utiliser l'utilitaire a2enmod activer et puis redémarrez le serveur Apache:

$ sudo a2enmod auth_digest
$sudo /etc/init.d/apache2 restart

Ensuite, nous avons inclus un article comme celui-ci dans le fichier de configuration de notre hôte virtuel:

<Directory " /var/www/miweb/privado ">
Order deny,allow
AuthType Digest
AuthName " dominio "
AuthUserFile " /etc/claves/digest.txt "
<Limit GET POST>
Require valid-user
</Limit>
</Directory>

Comme on le voit, est très semblable à la configuration requise de l'authentification de base. Seules deux notes: le fichier dans lequel les mots de passe sont laissées à la politique déclarée AuthDigestFile jusqu'à la version 2.2 d'Apache. Maintenant, comme vous voyez dans l'exemple, est AuthUserFile. Et deux: la directive AuthName dans l'authentification de base est utilisée pour afficher un message dans la fenêtre qui demande le nom d'utilisateur et mot de passe, est désormais également utilisé pour identifier un nom de domaine (realm) qui doit correspondre à celui qui apparaît plus tard dans le fichier de mot de passe. Cela dit, nous allons générer ce fichier avec l'utilitaire htdigest:

# htdigest -c /etc/claves/digest.txt dominio josemaria
Adding password for josemaria in realm dominio.
New password:
Re-type new password:

Comme ce fut le cas avec htpassword, l'option-c (créer), nous utilisons uniquement pour créer le fichier avec le premier utilisateur. Puis ajouter les autres utilisateurs en dehors d'elle. Nous voyons ensuite un fichier qui est généré après l'ajout d'un deuxième utilisateur:

josemaria:dominio:8d6af4e11e38ee8b51bb775895e11e0f
gemma:dominio:dbd98f4294e2a49f62a486ec070b9b8c

La dernière méthode, nous verrons utilise une base de données MySQL comme un référentiel de mots de passe. Cela nous permettra d'établir facilement une page pour gérer par des non-expert, voire de permettre aux utilisateurs finals eux-mêmes d'apporter des changements à elle seule, créer une méthode de récupération de courrier électronique automatique, etc. Ceci, combiné avec le cryptage SSL, est un moyen pratique, souple et suffisamment sûr pour la plupart des cas. La première chose à faire est d'installer le module qui fournit ce modèle d'authentification, activez-la et redémarrez notre Apache:

$ sudo apt-get install libapache2-mod-auth-mysql
$sudo a2enmod auth_mysql
$sudo /etc/init.d/apache2 restart

Maintenant nous avons besoin de créer une base de données appropriées sur le serveur MySQL. Les seuls domaines essentiels restent les deux pour le nom d'utilisateur et mot de passe, comme le montre l'image ci-dessous. Le reste, comme nous aimons et selon que vous comptez faire quelques fonctionnalités page à gérer et nous voulons avoir (nom, prénom, adresse email, etc.)

base de datos para autenticación con Apache

Également besoin d'un utilisateur MySQL avec accès à ces tables de sorte que Apache peut l'utiliser. D'accorder des privilèges à lire (SELECT) est suffisante pour nous:

usuario para la autenticación

Nous avons ajouté quelques enregistrements à notre base de données pour le test:

usuarios para las pruebas de acceso

Enfin, modifiez la section correspondante dans la configuration de notre hôte virtuel Apache et demander de faire un rechargement de la même:

<Directory " /var/www/miweb/privado ">
AuthType Basic
AuthName " Zona Privada "
AuthBasicAuthoritative Off
AuthUserFile /dev/null
AuthMYSQL on
AuthMySQL_Authoritative on
AuthMySQL_DB httpdauthmysql
Auth_MySQL_Host localhost
Auth_MySQL_User apacheauth
Auth_MySQL_Password 4pache3Sql
AuthMySQL_Password_Table usuarios
AuthMySQL_Username_Field login
AuthMySQL_Password_Field pwd
AuthMySQL_Empty_Passwords off
AuthMySQL_Encryption_Types Plaintext
Require valid-user
</Directory>

La signification des champs à personnaliser pour notre configuration est facile de distinguer:

  • AuthMySQL_DB et Auth_MySQL_Host déterminer les noms de la base de données et le serveur sur lequel il réside, nous allons utiliser pour l'authentification des utilisateurs.
  • Auth_MySQL_Password sont Auth_MySQL_User et les données utilisateur que apache va utiliser pour la lecture de la base de données précédente.
  • AuthMySQL_Password_Table, AuthMySQL_Username_Field et AuthMySQL_Password_Field décrivent, respectivement, la table où sont stockées les informations d'identification des utilisateurs avec autorisation d'accès et les champs que nous utilisons pour stocker vos logins et mots de passe.

Le champ Auth_MySQL_Encryption_Types permet enfin de définir la manière dont le mot de passe est stocké dans notre base de données et soutient de multiples façons. Comme il est dans l'exemple ci-dessus, indique que le mot de passe est enregistré en texte clair. Si on fait un peu plus au sérieux et ne pas enregistrer votre mot de passe afin que nous puissions, par exemple, un hachage magasin de celui-ci. Il existe plusieurs méthodes pour cela, mais le plus simple est de faire varier la valeur de ce champ par le texte suivant:

AuthMySQL_Encryption_Types Crypt

Cela nous permet d'utiliser les mêmes signatures généré par l'utilitaire htpasswd que nous avons vu ici ou en général, ceux qui sont créés après l'appel à crypt () function. Copiez le hachage au champ pwd dans la base de données générées avant, nous faisons à nouveau notre recharger Apache et viennent.


Font