29-11-2011 : Remettre dans le débat politique les principes du Conseil National de la Résistance
29-01-2012 : Parce que nous sommes un peuple debout, agissons pour rester dignes et responsables !
Logo de mon site
Logo de mon site
Faire un don

Luxpopuli / eZ Publish / Trucs & astuces / eZ Publish : login et mot de passe perdus





Right menu

Logo du site ez.no  Logo XHTML 1.O du W3C  Logo XHTML 1.O du W3C  Site francophone officiel de Firefox

eZ Publish : login et mot de passe perdus

Date de publication: le samedi 9 juin 2007 à 19h38
Dernière modification: par Pascal BOYER le mercredi 6 mai 2009 à 19h38
» Article suivant: MySQL : sauvegarder et restaurer une base de données

Avant propos

Dans certaines circonstances, il arrive de perdre le login et/ou le mot de passe permettant l'accès à l'interface d'administration de eZ Publish. Bien que très embarrassante, cette situation n'est pas désespérée puisqu'il est tout à fait possible de réinitialiser le login et/ou le mot de passe à des valeurs par défaut connue.

La méthode présentée est celle de la ligne de commande.

Cependant, pour ceux qui ont installé phpMyAdmin , il peuvent arriver au même résultat bien plus simplement.

La table ezuser

Les mots de passe sont stockés, sous forme cryptée, dans la table ezuser de la base données créée lors de l’installation de eZ publish.

L’algorithme de cryptage utilisé est MD5

Visualisons le contenu de la table ezuser.

On commence par se connecter au serveur MySQL:

mysql -u root -p

Enter password: On tape le mot de passe de l’admin de MySQL 
 
mysql> 

:
Toutes les commandes SQL doivent se terminer par un ; (point virgule) et si possible être tapées en majuscules.

Comme il y a de fortes chances qu’on ne se souvienne plus du nom de la base de données utilisée par eZ publish, on commence par lister toutes les bases de données présentes:

mysql> SHOW DATABASES;

+------------------+
| Database         |
+------------------+
| ez_test          |
| ezpublish_39     |
| mysql            |
+------------------+
21 rows in set (0.20 sec)

On sélectionne à présent la base de données:

mysql> USE ez_test;

Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
 
Database changed

Par principe, listons les tables de la base de données ez_test

mysql> SHOW TABLES;

+--------------------------------+
| Tables_in_ez_test              |
+--------------------------------+
| audio                          |
| audiopls                       |
| ezapprove_items                |
| ezbasket                       |
| ezbinaryfile                   |
| ezcollab_group                 |
| ezcollab_item                  |
| ezcollab_item_group_link       |
| ezcollab_item_message_link     |
| ezcollab_item_participant_link |
| ezcollab_item_status           |
| ezcollab_notification_rule     |
| ezcollab_profile               |
| ezcollab_simple_message        |
| ezcontent_language             |
| ezcontentbrowsebookmark        |
| ezcontentbrowserecent          |
| ezcontentclass                 |
| ezcontentclass_attribute       |
| ezcontentclass_classgroup      |
| ezcontentclassgroup            |
| ezcontentobject                |
| ezcontentobject_attribute      |
| ezcontentobject_link           |
| ezcontentobject_name           |
| ezcontentobject_tree           |
| ezcontentobject_version        |
| ezcurrencydata                 |
| ezdiscountrule                 |
| ezdiscountsubrule              |
| ezdiscountsubrule_value        |
| ezenumobjectvalue              |
| ezenumvalue                    |
| ezforgot_password              |
| ezgeneral_digest_user_settings |
| ezimage                        |
| ezimagefile                    |
| ezimagevariation               |
| ezinfocollection               |
| ezinfocollection_attribute     |
| ezkeyword                      |
| ezkeyword_attribute_link       |
| ezmedia                        |
| ezmessage                      |
| ezmodule_run                   |
| ezmultipricedata               |
| eznode_assignment              |
| eznotificationcollection       |
| eznotificationcollection_item  |
| eznotificationevent            |
| ezoperation_memento            |
| ezorder                        |
| ezorder_item                   |
| ezorder_status                 |
| ezorder_status_history         |
| ezpackage                      |
| ezpaymentobject                |
| ezpdf_export                   |
| ezpending_actions              |
| ezpolicy                       |
| ezpolicy_limitation            |
| ezpolicy_limitation_value      |
| ezpreferences                  |
| ezproductcategory              |
| ezproductcollection            |
| ezproductcollection_item       |
| ezproductcollection_item_opt   |
| ezrole                         |
| ezrss_export                   |
| ezrss_export_item              |
| ezrss_import                   |
| ezsearch_object_word_link      |
| ezsearch_return_count          |
| ezsearch_search_phrase         |
| ezsearch_word                  |
| ezsection                      |
| ezsession                      |
| ezsite_data                    |
| ezstats                        |
| ezsubtree_notification_rule    |
| eztipafriend_counter           |
| eztipafriend_request           |
| eztrigger                      |
| ezurl                          |
| ezurl_object_link              |
| ezurlalias                     |
| ezuser                         |
| ezuser_accountkey              |
| ezuser_discountrule            |
| ezuser_role                    |
| ezuser_setting                 |
| ezuservisit                    |
| ezvatrule                      |
| ezvatrule_product_category     |
| ezvattype                      |
| ezview_counter                 |
| ezwaituntildatevalue           |
| ezwishlist                     |
| ezworkflow                     |
| ezworkflow_assign              |
| ezworkflow_event               |
| ezworkflow_group               |
| ezworkflow_group_link          |
| ezworkflow_process             |
+--------------------------------+
104 rows in set (0.06 sec)

...et oui, il en a 104 !

Pour afficher la structure de la table ezuser c’est à dire les caractéristiques des champs de cette table:

mysql> DESCRIBE ezuser;

+--------------------+--------------+------+-----+---------+-------+
| Field              | Type         | Null | Key | Default | Extra |
+--------------------+--------------+------+-----+---------+-------+
| contentobject_id   | int(11)      |      | PRI | 0       |       |
| email              | varchar(150) |      |     |         |       |
| login              | varchar(150) |      |     |         |       |
| password_hash      | varchar(50)  | YES  |     | NULL    |       |
| password_hash_type | int(11)      |      |     | 1       |       |
+--------------------+--------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

Et pour visualiser le contenu de ces champs:

mysql> SELECT * FROM ezuser;

+------------------+-----------------------+------------------+----------------------------------+--------------------+
| contentobject_id | email                 | login            | password_hash                    | password_hash_type |
+------------------+-----------------------+------------------+----------------------------------+--------------------+
|               10 | nospam@ez.no          | anonymous        | 4e6f6184135228ccd45f8233d72a0363 |                  2 |
|               14 |                       |                  | 6b4827b8eac5759e2e181bcab32bbb47 |                  2 |
+------------------+-----------------------+------------------+----------------------------------+--------------------+
2 rows in set (0.00 sec)

:
Le tableau ci-dessus est un très bel exemple de tables corrompue.
En effet, on peut voir sur la deuxième ligne qu’il n’y a ni login ni adresse e-mail associé au mot de passe crypté présent dans la colonne/champs password_hash

Le fichier db_data.dba

Le fichier share/ db_data.dba contient l’ensemble des valeurs par défaut de la base de données utilisée lors de l’installation de eZ publish

Il contient donc le hashage (ou empreinte) du mot de passe par défaut de l’utilisateur admin

Pour retrouver la valeur de ce hashage:

cd /usr/local/www/monsite/share

grep -A40 "ezuser" db_data.dba |grep -B2 -A2 "admin"

0 => '14',
1 => 'nospam@ez.no',
2 => 'admin',
3 => 'c78e3b0f3d9244ed8c6d1c29464bdff9',
4 => '2',

Et l’on constate immédiatement que la valeur de l’empreinte renvoyée par la commande grep ne correspond plus à celle présente dans la table ezuser, ce qui est somme toute normal puisque lors de l’installation de eZ publish il nous est demandé de définir le mot de passe de l’administrateur.

:
La valeur du hashage dans le fichier db_data.dba est celle du mot publish
Pour vous en convaincre, il suffit de faire le test suivant:

echo -n -e "admin\npublish"|md5sum

c78e3b0f3d9244ed8c6d1c29464bdff9

:
Si on lance cette commande:

grep -A40 ’ezuser’ db_data.dba |grep -B2 -A2 "anonymous"

0 => '10',
1 => 'nospam@ez.no',
2 => 'anonymous',
3 => '4e6f6184135228ccd45f8233d72a0363',
4 => '2',

...on retrouve exactement les mêmes valeurs que dans le tableau ci-dessus. A condition bien sûr de ne pas avoir modifié, après l’installation de eZ publish, le mot de passe de l’utilisateur anonymous

Revenons donc à nos commandes MySQL...

Modifier le mot de passe

Il s’agit donc maintenant de remplacer la valeur inscrite dans la base de données par c78e3b0f3d9244ed8c6d1c29464bdff9

msql> UPDATE ezuser SET password_hash="c78e3b0f3d9244ed8c6d1c29464bdff9" WHERE contentobject_id="14";

Query OK, 1 row affected (0.21 sec)
Rows matched: 1 Changed: 1 Warnings: 0

On vérifie le résultat:

mysql> SELECT * FROM ezuser;

+------------------+--------------+-----------+----------------------------------+--------------------+
| contentobject_id | email        | login     | password_hash                    | password_hash_type |
+------------------+--------------+-----------+----------------------------------+--------------------+
|               10 | nospam@ez.no | anonymous | 4e6f6184135228ccd45f8233d72a0363 |                  2 |
|               14 |              |           | c78e3b0f3d9244ed8c6d1c29464bdff9 |                  2 |
+------------------+--------------+-----------+----------------------------------+--------------------+
2 rows in set (0.00 sec)

Tout est parfait.

Modifier le login

Puisque dans mon exemple le login est manquant, nous allons en définir un:

mysql> UPDATE ezuser SET login="admin" WHERE contentobject_id="14";

Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

...et on vérifie une nouvelle fois le résultat:

mysql> SELECT * FROM ezuser;

+------------------+--------------+-----------+----------------------------------+--------------------+
| contentobject_id | email        | login     | password_hash                    | password_hash_type |
+------------------+--------------+-----------+----------------------------------+--------------------+
|               10 | nospam@ez.no | anonymous | 4e6f6184135228ccd45f8233d72a0363 |                  2 |
|               14 |              | admin     | c78e3b0f3d9244ed8c6d1c29464bdff9 |                  2 |
+------------------+--------------+-----------+----------------------------------+--------------------+
2 rows in set (0.00 sec)

Tout est encore nickel.

Puisqu’on y est, ajoutons l’adresse mail de l’administrateur.

Modifier l’email

On prend la même commande et on recommence:

mysql> UPDATE ezuser SET email="pascal@linuxorable.net" WHERE contentobject_id="14";

Query OK, 1 row affected (0.00 sec)
 
Rows matched: 1 Changed: 1 Warnings: 0

On vérifie:

mysql> SELECT * FROM ezuser;

+------------------+------------------------+-----------+----------------------------------+--------------------+
| contentobject_id | email                  | login     | password_hash                    | password_hash_type |
+------------------+------------------------+-----------+----------------------------------+--------------------+
|               10 | nospam@ez.no           | anonymous | 4e6f6184135228ccd45f8233d72a0363 |                  2 |
|               14 | pascal@linuxorable.net | admin     | c78e3b0f3d9244ed8c6d1c29464bdff9 |                  2 |
+------------------+------------------------+-----------+----------------------------------+--------------------+
2 rows in set (0.00 sec)

...et on ferme la session:

mysql> QUIT;

Bye

Ultime test

Il ne reste plus à présent qu'à s’assurer que l’utilisateur admin peut effectivement se connecter à eZ publish avec le mot de passe publish à partir de la page de login.

Commentaires