Быстрый сброс пароля админа Drupal

Опубликовано admin - сб, 01/19/2013 - 22:44

Часто возникает ситуация, когда нужно быстро получить админский доступ к Drupal для проведения изменения, но мы не знаем пароля админа. В этой заметке в первой части рассмотрим, как можно выйти из этой ситуации, при помощи drush, т.е. мы заменим пароль админа, а потом после всех манипуляций вернем старый пароль админа на место. А во второй части - без drush.

Вариант 1

Для начала посмотрим вывод команды:

drush sqlq "SELECT name, pass FROM users WHERE uid = 1;"

Вывод будет, например, таким:

name	pass
admin	$S$DDVoaxqGiaiWMqjIgdeTmd8ySy4B7Gp/KFRWbQJrZttsdOOSwhlo

Это означает, что имя пользователя администратора "admin", а в поле pass находится хэш его пароля. Сохраним значение хэша пароля, чтобы после наших манипуляций мы могли вернуть его на место.
Теперь устанавливаем новый пароль для пользователя admin:

drush upwd admin --password=newpassword

Теперь можно провести все необходимые изменения на сайте, так как мы знаем пароль пользователя с админским доступом.
После проведения всех изменений необходимо вернуть старый пароль на место. Сделать это можно следующей командой:

drush sqlq "update users set pass='$S$DDVoaxqGiaiWMqjIgdeTmd8ySy4B7Gp/KFRWbQJrZttsdOOSwhlo' where uid = 1;"

Добавлено
Так же можно использовать команду

drush uli

для получения одноразовой ссылки для авторизации под администратором сайта.
P.S. Спасибо пользователю kalabro за подсказку;)

Вариант 2

Сброс пароля для Drupal 6
Зайти в mysql:

mysql -uuser -ppass

Просмотреть список баз данных:

SHOW DATABASES;

Найти свою и установить её для дальнейшего использования:

USE drupal_database;

Выполнить команду, которая установит пароль “password” для пользователя с именем admin:

UPDATE users SET pass = MD5('password') WHERE name = ‘admin’;

Таким образом мы в запросе передали пароль и на “лету” выполнили его шифрование.

Сброс пароля для Drupal 7
Перейти в директорию с сайтом и выполнить команду:

./scripts/password-hash.sh new_password

В этой команде выполняется скрипт, которому параметром передается новый пароль “new_password”. Скрипт пароль шифрует с помощью алгоритма SHA512 и выдает зашифрованный пароль в виде хеша:

$S$D6kfEggLdwCHweucG1Yuriy1mHDdMvhcq4ANcomv3K3iz29NL7j2

Также хеш с новым паролем можно сгенерировать следующим образом:
Создать в корне сайта файл с расширением .php, например hash.php и поместить в него код:

<?php
  define('DRUPAL_ROOT', getcwd());
  require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
  require_once DRUPAL_ROOT . '/includes/password.inc';
  drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
  echo user_hash_password('new_password');
  die();
?>

Где “new_password” - новый пароль

После этого перейти на адрес:

http://example.com/hash.php

Замените “example.com” на имя вашего домена

И вы получите хеш нового пароля.
По окончанию удалите файл hash.php!
Далее установим хеш с новым паролем для учетной записи, к примеру admin.

Установка нового пароля
Зайти в mysql:

mysql -uuser -ppass

Просмотреть список баз данных:

SHOW DATABASES;

Найти свою и установить её для дальнейшего использования:

USE drupal_database;

Выполнить команду, которая установит хеш с паролем для пользователя с именем admin:

UPDATE users SET pass ='$S$CTo9G7Lx28rzCfpn4WB2hUlknDKv6QTqHaf82WLbhPT2K5TzKzML' WHERE name = ‘admin’;

Вариант 3

Бывают случаи, при которых получить доступ к SSH не удается, а пароль поменять надо.
Для этих целей можно написать скрипт, который производит загрузку ядра Drupal и предоставляет доступ к функциям учетной записи. Этот пример работает только для Drupal 7.

Создать файл с расширение .php и случайным именем, например dy32h3.php в корне сайта с кодом:

<?php
  define('DRUPAL_ROOT', getcwd());
  require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
  drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
  require_once DRUPAL_ROOT . '/includes/password.inc';
  if (isset($_GET['pass']) && !empty($_GET['pass'])) {
    $newhash =  user_hash_password($_GET['pass']);
  }
  else {
    die('Retry with ?pass=PASSWORD set in the URL');
  }
  $updatepass = db_update('users') 
    ->fields(array(
      'pass' => $newhash,
  // Uncomment the following lines to reset username and/or email address
  //    'name' => 'admin',
  //    'mail' => 'yourmail@example.com'
    ))
    ->condition('uid', '1', '=')
    ->execute();
  print "Complete! Please delete this file immediately!";
  drupal_exit();
?>

При выполнении скрипта происходит смена пароля для учетной записи с uid 1, то есть для самой главной учетной записи.

Также помимо пароля можно поменять имя учетной записи и адрес электронной почты. Для этого уберите комментарии со строк и укажите новое имя и адрес электронной почты.:

//    'name' => 'admin',
//    'mail' => 'yourmail@example.com'

Открыть браузер и перейти по адресу, замените “example.com” и “new_password” на имя вашего домена и новый пароль:

http://example.com/dy32h3.php?pass=new_password

Если скрипт выполнится успешно, то появится сообщение:

Complete! Please delete this file immediately!

По окончанию удалите файл dy32h3.php!

Как по мне, так uli намного удобнее. Пароль останется паролем, в логах всё красиво, старых хеш не надо хранить, SQL не надо писать :)

Добавить комментарий

Filtered HTML

  • Допустимые HTML-теги: <a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd>
  • Строки и абзацы переносятся автоматически.
  • Web page addresses and email addresses turn into links automatically.