Vous êtes ici

Récupérer le mot de passe admin d'un site Drupal

Vous avez 30 secondes ?
S'abonner au flux d'actualités
Rubrique: 
Astuce
Difficultée: 
Facile
Avant de commencer, soyons clair : si vous êtes complètement déconnectés, que vous n'avez pas drush d'installé (gestion de votre site en ligne de commande), que php ne fonctionne pas en ligne de commande, que vous n'avez pas accès au code (via FTP, SSH ou le gestionnaire de fichier peu importe), ni à la base de données ; c'est très très mal barré ! Dans le cas où l'un de ces accès est possible, il reste de l'espoir ! Voyons cela :

Cas 1 : Je suis connecté en admin, mais je n'ose pas me déconnecter car je n'ai plus le mot de passe (et mon site est capable d'envoyer des emails)

Nous sommes ici dans le cas le plus simple. En effet, étant connecté à votre compte admin, vous allez pouvoir très simplement en changer le mot de passe. Pour cela :
  1. Rendez-vous sur cette page : /user/password
    Vous allez alors pouvoir récupérer un nouveau mot de passe par email : problème résolu !

Cas 2 : Je suis connecté en admin, mais je n'ose pas me déconnecter car je n'ai plus le mot de passe (et mon site n'est pas capable d'envoyer des emails)

Dans ce cas, il va nous falloir changer le mot de passe admin. Seulement Drupal demande le mot de passe actuel pour autoriser le changement du mot de passe (question de sécurité !). Nous allons donc devoir au préalable installer un module pour changer ce comportement. Chose que vous pouvez faire puisque dans ce cas de figure, vous êtes déjà connecté en admin :
  1. Installer le module No Current Password, disponible ici (la version 8 est disponible pour l'instant ici)
  2. Visiter la page d'édition de profil: /user/1/edit
  3. Modifier votre mot de passe
  4. Désinstaller le module No Current Password

Cas 3: J'ai l'outil drush de configuré pour gérer mon site

Drush est un utilitaire permettant la gestion de votre site Drupal en ligne de commande. Si drush est configuré pour votre site, changer le mot de passe administrateur est très simple :
  1. Lancer une invite de commande à la racine de votre site Drupal
  2. Lancer la commande suivante, en changeant bien entendu USERNAME par votre nom d'utilisateur administrateur et SOMEPASSWORD par votre mot de passe :
    drush user-password "USERNAME" --password="SOMEPASSWORD"
  3. Vous pouvez maintenant vous connecter à votre site avec votre nouveau mot de passe

Cas 4 : Je ne suis pas connecté, mais php fonctionne en ligne de commande, et j'ai accès à ma base de donnée

Sans plus de suspens, commençons la procédure:
  1. Ouvrir une invite de commande et taper la commande suivante :
    php --version
    Si vous obtenez autre chose qu'une erreur, c'est que nous allons pouvoir utiliser php via la ligne de commande !
  2. Ouvrir l'invite de commande à la racine de votre site Drupal
  3. Lancer la commande :
    php ./core/scripts/password-hash.sh newpwd 
    La réponse à cette commande devrait avoir la forme suivante :

    password: newpwd   hash: $S$EfBWHEcMVMvfRq0QQ/bTq43na9Wr9QbKgbCcQSR2sHRX3oePxteO

  4. Maintenant, dans une invite SQL, lancer cette commande :
    UPDATE users_field_data SET pass ='$S$EfBWHEcMVMvfRq0QQ/bTq43na9Wr9QbKgbCcQSR2sHRX3oePxteO' WHERE uid = 1;
    Note : vous pouvez aussi modifier à la main via phpMyAdmin la colonne pass dans la table users_field_data, pour le user dont le uid vaut 1.
  5. Reste un petit détail: vider le cache admin pour prendre en compte notre modification. Pour cela, lancer la commande SQL suivante :
    DELETE FROM cache_entity WHERE cid = 'values:user:1';
  6. Vous pouvez maintenant vous connecter à votre site avec votre nouveau mot de passe : newpwd
  7. Pour changer ce mot de passe, rendez-vous désormais à la page : /user/1/edit
Le hash généré représente votre nouveau mot de passe, qui est désormais newpwd. Pour des raisons de sécurité, ce mot de passe est "hashé et salé". C'est une opération destructrice car la méthode de hashage n'est pas bijective. Sans vous faire un cours de maths, sachez que cela signifie que vous ne pouvez pas retrouver votre mot de passe à partir du hash. Comment Drupal fait pour savoir que votre mot de passe est le bon lorsque vous le tapez ? Tout simplement en hashant ce que vous avez tapé dans le formulaire, et en comparant les hashs entre eux !

Cas 5 : J'ai accès aux fichiers Drupal

Pour réaliser cette astuce, vous avez simplement besoin de pouvoir ajouter un nouveau fichier dans votre installation Drupal, par la méthode de votre choix: FTP, SQL, ou autre.
  1. Télécharger le fichier admin-pass-reset.php en bas de cet article (dans le zip)
  2. Copier ce fichier à la racine de votre site Drupal, c'est à dire au même endroit que le fichier index.php
  3. Renommer ce fichier du nom que vous souhaitez, par exemple : foobar.php
  4. Ouvrir votre navigateur à l'URL : <votresite.com>/foobar.php?pass=newpwd
    Bien évidement, remplacer foobar.php par le nom choisi à l'étape 3, et newpwd par le mod de passe souhaité
  5. Une fois le script executé avec succès, supprimer ce fichier
  6. Vous pouvez désormais vous connecter avec le nouveau mot de passe choisi.
Pensez à bien supprimer ce fichier qui permettrait sinon à n'importe qui de changer le mot de passe administrateur de votre site !
Fichier(s) joint(s): 
Notation: 
Average: 5 (1 vote)
Vous avez aimé: