Authentification Apache avec base de donnée

Fermé
Lune0613 - 13 févr. 2023 à 17:15
 Lou - 17 févr. 2023 à 17:31

Bonjour,

J'ai configuré un page web avec l'authentification basique d'Apache, liée à une base de données grâce au module mod_auth_dbd.

J'ai deux petites questions concernant les mots de passe.

1.

J'ai suivi la configuration suivante pour mon site web :

# configuration de mod_dbd
# MISE À JOUR pour inclure la mise en cache de l'authentification
DBDriver pgsql
DBDParams "dbname=apacheauth user=apache password=xxxxxx"

DBDMin  4
DBDKeep 8
DBDMax  20
DBDExptime 300

<Directory "/usr/www/mon-serveur/private">
  # configuration de mod_authn_core et mod_auth_basic
  # pour mod_authn_dbd
  AuthType Basic
  AuthName "Mon serveur"

  # Pour mettre en cache les données d'authentification, placez socache
  # avant dbd
  AuthBasicProvider socache dbd

  # Aussi nécessaire à la mise en cache : dire au cache de mettre en
  # cache les recherches dbd !
  AuthnCacheProvideFor dbd
  AuthnCacheContext mon-serveur

  # configuration de mod_authz_core
  Require valid-user

  # la requête SQL de mod_authn_dbd pour authentifier un utilisateur
  AuthDBDUserPWQuery "SELECT password FROM authn WHERE user = %s"
</Directory>

Cependant, pour le mot de passe de la base de données, je ne souhaite pas que le mot de passe soit mis en clair ... Connaissez-vous un moyen de passer un hash dans ce paramètre ? Ou cela n'est vraiment pas possible ?

2.

J'utilise htpasswd pour générer les mots de passe en MD5. Si j'ai bien compris, cela génère avec la commande suivante un hash md5 salé :

htpasswd -bnm user password

Cependant, je me pose la question suivante : comment Apache retrouve le sel correspondant ? Car je n'indique aucun fichier où stocker les mots de passe, donc je me pose cette question ..

La commande ci-dessus retourne :

user:$apr1$rVTM60En$vjbyUJOz8gRk7DSNOZAY2/
A voir également:

1 réponse

Salut,

je ne suis pas un spécialiste d'Apache mais tout doit être stocké dans la configuration du serveur. Sauf si vous précisez autrement(dans ce cas voir lien en fin de message).

Pourquoi justement ne pas utiliser la base de données pour vérifier le mot de passe en PHP?

Cela serait plus simple et efficace/standard il me semble.

Tout dépends de votre but mais pour accéder ou non à  des pages(Intranet ou pages privées) il n'y a pas mieux il me semble. Vous ne précisez pas pourquoi vous voulez(ni le contexte) cela et la majorité des cas(sinon tous) seront mieux avec une identification par un programme avec mot de passe sur la BDD.

Quant au cryptage je vois peu d'intérêt si les données sont transmisses en https comme cela semble être le cas:

https://www.howtogeek.com/devops/how-to-setup-basic-http-authentication-on-apache/

0

Bonjour et merci pour votre réponse. 

Navré pour le manque d'informations.

L'objectif est de donner accès à des listes de fichiers qui seront directement injectables dans un outil bien spécifique. 

C'est pourquoi, j'ai choisi l'authentification basique car celle-ci est compatible avec l'outil qui doit pouvoir récupérer les fichiers.

J'ai souhaité tout faire dans le fichier de configuration, par simplicité, mais s'il faut passer par du PHP pour des questions de sécurité, je le ferai sans soucis. Cela pourra se faire avec l'authentification basique ?

Pour le chiffrement, en effet SSL est configuré mais je souhaitais que le mot de passe ne soit pas en clair dans la base de données. J'ai donc appris que htpasswd utilisait un sel de 8 caractères pour le md5, compatible avec le module mod_auth_dbd d'Apache.

"doit être stocké dans la configuration du serveur." 

Vous savez à quel endroit ? Car je ne trouve aucun fichier qui contient les informations d'identification.

1
Lou > Lune0613
17 févr. 2023 à 17:31

A mon avis, il n'y a pas de "fichiers" qui contiennent les idd dans ce cas, l'algo MD5 utilisé est spécifique à Apache (bouclé plusieurs fois + sel)

0