О сайтах и не о сайтах

Теперь и в tg!

tg

Переехал с твиттера на t.me/tulvit_blog, если что.

Обнуление пароля в Drupal

Иногда бывает так, что напрочь забываешь пароль к одному из своих сайтов на Drupal'e. Вводишь, вводишь, а на выходе получаешь следующее сообщение:

Sorry, there have been more than 5 failed login attempts for this account. It is temporarily blocked. Try again later or request a new password.

И хорошо если система восстановления пароля работает, но частенько либо почтовый ящик указан случайный, либо почтовый сервер не поднят (например, если это чисто дев-сайт на локалхосте). Поэтому единственное, что остается - это сбросить пароль на новый. Для этого, собственно, надо сделать два действия - обнулить количество неудачных попыток ввода пароля, чтобы снялась блокировка, ну и заменить старый пароль на новый.

Обнуление количества попыток ввода пароля

Неудачные попытки ввода пароля хранятся в базе данных, в таблице flood. Все что нам надо сделать, это очистить ее. После чего блокировка будет снята.

Создание нового пароля

Хэш нашего старого пароля хранится в таблице users в столбце pass напротив нужного пользователя (нулевого пользователя не существует, пользователь #1 и есть админ, своего рода root).

Следовательно, нам надо удалить старый хэш и вставить новый, соответствующий новому же паролю. И если в Drupal 6 хэш пароля представлял из себя обычный md5, то в семерке все несколько сложнее, и алгоритм уже sha512, и соль используется для каждого сайта индивидуальная, и итерационно берется хеш от хеша раз пятнадцать.

Собственно, вариантов сгенерировать хэш несколько. Это и попытаться разобраться в исходниках (includes/password.inc), и написать свой модуль, где воспользоваться готовым АПИ (user_hash_password), и создать нового тестового пользователя на сайте с нужным паролем и скопировать из БД сгенерированный в результате хэш... Да, как-то все сложно. Но благо есть более простой и правильный путь.

Разработчики Друпал предусмотрели такое развитие событий и создали скриптик password-hash.sh, который лежит в каждом дистрибутиве Друпала в папке scripts.

Алгоритм действия такой:

  • Запускаем консоль.
  • Переходим в корень нашего сайта (это важно).
  • Запускаем скрипт password-hash.sh с единственным аргументом (паролем, для которого требуется сгенерировать хэш).
  • Получаем на выходе хэш.
  • Копируем его, вставляем в базу данных в соответствующую ячейку.

Сброс пароля в Друпал

Где NEWPASSWORD - наш новый пароль.

Все не так уж и сложно, оказывается.