15%

Сэкономьте 15% на всех хостинговых услугах

Проверьте свои навыки и получите скидку на любой тарифный план

Используйте код:

Skills
Начать
21.10.2024

Как вручную сбросить пароль администратора WordPress

Потеря доступа к учётной записи администратора WordPress не означает потерю контроля над сайтом. Если стандартный процесс восстановления через письмо «Забыли пароль?» не работает — из-за неправильно настроенных параметров почты, недоступного адреса электронной почты или повреждённой записи пользователя — его можно полностью обойти, сбросив пароль напрямую на уровне базы данных, файловой системы или командной строки.

В этом руководстве рассматриваются четыре проверенных метода: phpMyAdmin, FTP через functions.php, WP-CLI через SSH и аварийный скрипт сброса пароля WordPress. Каждый метод описан с точными шагами, предупреждениями по безопасности и конкретными сценариями, в которых он является правильным выбором.

Когда стандартный процесс сброса не работает

Прежде чем прибегать к ручному методу, разберитесь, почему встроенный сброс не работает. Наиболее распространённые причины:

  • Нарушена доставка почты WordPresswp_mail() зависит от функции mail() PHP или SMTP-плагина. Если ни то, ни другое не настроено, письмо со сбросом пароля молча отбрасывается.
  • Нет доступа к зарегистрированному почтовому ящику — учётная запись была создана с недействующим адресом.
  • Повреждённая таблица wp_users — редко, но возможно после неудачной миграции или конфликта плагинов.
  • Полная блокировка wp-admin — плагины защиты от перебора паролей (Wordfence, Limit Login Attempts) могут заблокировать сам эндпоинт сброса.

Важно определить первопричину, поскольку некоторые методы (WP-CLI, phpMyAdmin) исправляют пароль, не затрагивая почтовую систему, тогда как другие (аварийный скрипт) требуют HTTP-доступа к сайту.

Метод 1: Сброс пароля через phpMyAdmin

Лучше всего подходит для: сред на общем хостинге, где SSH недоступен, но доступен cPanel или аналогичная панель управления.

phpMyAdmin предоставляет прямой доступ на чтение/запись к базе данных MySQL или MariaDB, в которой хранятся все учётные данные пользователей WordPress. Пароли хранятся в виде хешей bcrypt (WordPress 6.x+) или хешей MD5 (устаревшие установки). Встроенный селектор функций phpMyAdmin автоматически выполняет хеширование.

Шаг 1: Откройте phpMyAdmin из панели управления

Войдите в панель управления хостингом — cPanel, DirectAdmin или пользовательскую панель. Найдите раздел Базы данных и нажмите phpMyAdmin. Если вы используете VPS с cPanel, путь обычно выглядит так: cPanel > Базы данных > phpMyAdmin.

Шаг 2: Выберите базу данных WordPress

На левой боковой панели нажмите на имя базы данных, связанной с вашей установкой WordPress. Если вы не уверены, какая база данных правильная, откройте wp-config.php в корневом каталоге сайта и найдите константу DB_NAME.

Шаг 3: Откройте таблицу wp_users

Разверните таблицы базы данных и нажмите на wp_users. Если в вашей установке используется пользовательский префикс таблиц (определяемый $table_prefix в wp-config.php), таблица будет называться <prefix>_users — например, site7_users.

Шаг 4: Отредактируйте строку администратора

  1. Найдите строку, в которой user_login совпадает с вашим именем пользователя администратора. В большинстве стандартных установок это строка с ID = 1.
  2. Нажмите Изменить (значок карандаша).
  3. Найдите поле user_pass.
  4. В выпадающем списке Функция рядом с user_pass выберите MD5.
  5. В поле Значение введите новый пароль в виде обычного текста.
  6. Прокрутите вниз и нажмите Вперёд.

Важное техническое примечание: Выбор MD5 здесь достаточен для немедленного входа, поскольку WordPress выполняет устаревшую проверку MD5 при входе, а затем автоматически повторно хеширует пароль с использованием более надёжного алгоритма phpass или bcrypt после успешной аутентификации. Вам не нужно вручную генерировать хеш bcrypt.

Шаг 5: Проверьте изменение

Перейдите на страницу входа WordPress и войдите с новым паролем. Если вход выполнен успешно, WordPress автоматически обновит хеш в базе данных до текущего алгоритма.

Метод 2: Сброс пароля через FTP путём изменения functions.php

Лучше всего подходит для: ситуаций, когда phpMyAdmin недоступен, но есть доступ к учётным данным FTP/SFTP.

Этот метод внедряет вызов сброса пароля непосредственно в цикл выполнения WordPress, временно добавляя код в файл functions.php активной темы.

Шаг 1: Подключитесь через FTP

Используйте FTP-клиент, например FileZilla или Cyberduck. Введите FTP-хост, имя пользователя, пароль и порт (21 для обычного FTP, 22 для SFTP — всегда предпочитайте SFTP, если он доступен). Перейдите в:

/public_html/wp-content/themes/<your-active-theme>/

Чтобы определить активную тему без входа в wp-admin, проверьте таблицу wp_options в phpMyAdmin по ключу параметра template.

Шаг 2: Загрузите и отредактируйте functions.php

Загрузите functions.php на локальный компьютер. Откройте его в редакторе кода (VS Code, Sublime Text или любом редакторе, который сохраняет кодировку UTF-8 без BOM). Добавьте следующую строку в самый конец файла:

<?php
// Temporary password reset — REMOVE IMMEDIATELY AFTER USE
add_action( 'init', function() {
    wp_set_password( 'YourNewSecurePassword123!', 1 );
});

Замените 'YourNewSecurePassword123!' на выбранный пароль. Второй аргумент (1) — это ID пользователя. Если ваша учётная запись администратора не имеет ID 1, сначала выполните запрос к таблице wp_users для подтверждения правильного ID.

Обёртывание вызова в add_action( 'init', ... ) безопаснее, чем прямой вызов wp_set_password() на верхнем уровне файла, поскольку это гарантирует полную загрузку основных функций WordPress перед выполнением.

Шаг 3: Загрузите файл и войдите в систему

Сохраните файл и загрузите его обратно на сервер, перезаписав оригинал. Загрузите любую страницу вашего сайта WordPress (даже главную), чтобы активировать хук init и выполнить смену пароля. Затем перейдите на /wp-login.php и войдите с новым паролем.

Шаг 4: Немедленно удалите код

Этот шаг обязателен. Если оставить код сброса в functions.php, каждая загрузка страницы будет сбрасывать пароль до жёстко заданного значения, создавая критическую уязвимость безопасности. Снова загрузите functions.php, удалите добавленные строки и повторно загрузите файл.

Метод 3: Сброс пароля через WP-CLI (командная строка SSH)

Лучше всего подходит для: разработчиков и системных администраторов с SSH-доступом к VPS или выделенному серверу. Это самый быстрый и чистый метод.

WP-CLI — официальный интерфейс командной строки для WordPress. Он позволяет управлять пользователями, плагинами, темами и операциями с базой данных без использования браузера. Если вы используете WordPress на тарифном плане VPS Хостинг или Выделенный сервер, WP-CLI почти наверняка уже доступен или легко устанавливается.

Шаг 1: Проверьте, установлен ли WP-CLI

wp --info

Если команда не найдена, установите её:

curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp

Шаг 2: Перейдите в корневой каталог WordPress

cd /var/www/html

Скорректируйте путь в соответствии с вашим фактическим корневым каталогом документов. Убедиться, что вы находитесь в правильном каталоге, можно, проверив наличие wp-config.php:

ls wp-config.php

Шаг 3: Сбросьте пароль

wp user update 1 --user_pass="YourNewSecurePassword123!" --allow-root

Флаг --allow-root обязателен, если вы выполняете команду от имени пользователя root. При необходимости замените 1 на фактический ID пользователя. Чтобы сначала найти правильный ID:

wp user list --fields=ID,user_login,user_email --allow-root

Шаг 4: Подтвердите обновление

По завершении WP-CLI выведет Success: Updated user 1.. Вы можете немедленно проверить изменение:

wp user get 1 --field=user_pass --allow-root

Это вернёт новый хеш bcrypt, подтверждая обновление записи. Войдите в wp-admin для завершения процесса.

Особый случай — мультисайтовые установки: В WordPress Multisite добавьте к команде префикс --url=yoursite.com для указания нужного подсайта:

wp user update 1 --user_pass="YourNewSecurePassword123!" --url=yoursite.com --allow-root

Метод 4: Сброс пароля через аварийный скрипт WordPress

Лучше всего подходит для: сценариев, когда есть FTP-доступ, но нет SSH, нет phpMyAdmin, а метод functions.php неприменим (например, активная тема является блочной темой без functions.php).

Кодекс WordPress предоставляет автономный PHP-скрипт аварийного сброса (emergency.php), который работает независимо от установки WordPress. Он запрашивает новый пароль, правильно хеширует его и записывает непосредственно в базу данных, используя учётные данные из wp-config.php.

Шаг 1: Получите скрипт

Загрузите скрипт из официального репозитория WordPress на GitHub или из Кодекса. Официальный источник:

https://codex.wordpress.org/Resetting_Your_Password#Through_the_emergency_password_reset_script

Сохраните файл как emergency.php.

Шаг 2: Загрузите в корневой каталог WordPress

С помощью FTP-клиента загрузите emergency.php в тот же каталог, который содержит wp-config.php — обычно /public_html/ или /var/www/html/.

Шаг 3: Выполните скрипт в браузере

Откройте браузер и перейдите по адресу:

https://yourdomain.com/emergency.php

Скрипт автоматически прочитает wp-config.php для получения учётных данных базы данных, затем отобразит форму для ввода и подтверждения нового пароля. Отправьте форму для применения изменений.

Шаг 4: Немедленно удалите скрипт

Это критически важно. Скрипт не имеет уровня аутентификации — любой, кто знает URL, может использовать его для захвата вашего сайта. Удалите его сразу после восстановления доступа:

rm /var/www/html/emergency.php

Или удалите через FTP. Проверьте удаление, попытавшись снова загрузить URL — он должен вернуть ошибку 404.

Сравнение методов

МетодТребует SSHТребует FTPТребует доступа к БДИзменяет файлы темыСкоростьРиск безопасности при активном состоянии
phpMyAdminНетНетДа (через панель)НетБыстроОтсутствует
`functions.php` через FTPНетДаНетДаСреднеКритический
WP-CLI через SSHДаНетНетНетБыстрее всегоОтсутствует
Аварийный скриптНетДаНетНетСреднеКритический

Усиление безопасности после сброса пароля

Восстановление доступа — лишь первый шаг. Принудительный ручной сброс часто сигнализирует о более глубокой проблеме — скомпрометированной учётной записи, неправильно настроенном сервере или неработающей почтовой системе. Устраните эти проблемы немедленно:

  • Проверьте последние входы в систему. Проверьте wp_usermeta на наличие session_tokens для просмотра активных сессий. Завершите все сессии с помощью wp user session destroy --all --allow-root.
  • Смените секретные ключи. Сгенерируйте новые значения на https://api.wordpress.org/secret-key/1.1/salt/ и замените соответствующие константы в wp-config.php. Это аннулирует все существующие куки.
  • Исправьте доставку почты WordPress. Установите SMTP-плагин (WP Mail SMTP, Postman SMTP) и подключите его к сервису транзакционной почты (SendGrid, Mailgun, Amazon SES), чтобы стандартный процесс сброса работал в будущем.
  • Включите двухфакторную аутентификацию. Плагины, такие как WP 2FA или Google Authenticator, добавляют второй уровень проверки, что значительно снижает вероятность блокировки из-за перебора паролей.
  • Проверьте права доступа к файлам. wp-config.php должен иметь права 640 или 600. Файл functions.php должен иметь права 644. Файлы с открытым доступом на запись (777) — немедленный тревожный сигнал.
  • Проверьте наличие несанкционированных учётных записей администраторов. Выполните wp user list --role=administrator --allow-root и удалите все незнакомые учётные записи.

Для производственных сред, размещённых на Выделенном сервере, также проверьте /var/log/auth.log (или /var/log/secure в системах на основе RHEL) на наличие попыток SSH-перебора, которые могли предшествовать блокировке.

Если ваш сайт обрабатывает конфиденциальные данные пользователей или транзакции электронной коммерции, дополните усиленный вход правильно выданным SSL-сертификатом, чтобы учётные данные никогда не передавались в открытом виде.

Матрица решений: какой метод использовать?

Используйте этот контрольный список для выбора правильного метода в вашей ситуации:

  • У вас есть доступ к cPanel или DirectAdmin — используйте phpMyAdmin (Метод 1). Это самый безопасный вариант, не требующий изменения файлов.
  • У вас есть FTP/SFTP, но нет панели управления базой данных — используйте functions.php (Метод 2), но установите напоминание в календаре, чтобы удалить код в течение пяти минут после входа в систему.
  • У вас есть SSH-доступ к VPS или выделенному серверу — используйте WP-CLI (Метод 3). Это самый чистый вариант, не оставляющий остаточного кода и поддерживающий скриптинг для автоматизации.
  • У вас есть FTP, но активная тема не имеет functions.php (блочные темы, FSE-темы) — используйте аварийный скрипт (Метод 4) и удалите его до закрытия вкладки браузера.
  • Ни один из вышеперечисленных вариантов недоступен — обратитесь в службу поддержки вашего хостинг-провайдера. Они могут сбросить пароль базы данных на уровне инфраструктуры.

Часто задаваемые вопросы

В: Завершит ли сброс пароля через phpMyAdmin активные сессии?

Нет. Изменение user_pass в базе данных не аннулирует существующие куки аутентификации WordPress. Чтобы принудительно завершить все сессии, необходимо также обновить секретные ключи в wp-config.php или использовать wp user session destroy --all.

В: Таблица wp_users пуста или отсутствует. Что произошло?

Обычно это указывает на неудачную миграцию базы данных, повреждённый импорт или неправильно настроенный $table_prefix в wp-config.php. Убедитесь, что префикс соответствует фактическим именам таблиц в phpMyAdmin. Если таблица действительно отсутствует, восстановите её из резервной копии базы данных.

В: Можно ли использовать MD5 в phpMyAdmin, даже если WordPress теперь использует bcrypt?

Да. Уровень аутентификации WordPress обнаруживает пароли, хешированные с помощью MD5, при входе и принимает их для обратной совместимости, после чего немедленно повторно хеширует пароль с использованием текущего алгоритма (phpass/bcrypt). Хеш MD5 хранится лишь временно до следующего успешного входа.

В: Команда WP-CLI wp user update возвращает ошибку прав доступа. Как это исправить?

Обычно это означает, что WP-CLI запускается от имени системного пользователя, отличного от владельца файлов WordPress. Либо переключитесь на правильного пользователя с помощью sudo -u www-data wp user update ..., либо добавьте флаг --allow-root, если вы работаете от имени root.

В: Безопасно ли оставлять аварийный скрипт на сервере на несколько часов?

Нет. Аварийный скрипт не имеет никакой аутентификации. Любой посетитель, который обнаружит или угадает URL, может использовать его для сброса пароля администратора и получения полного контроля над вашим сайтом. Удалите его сразу после использования — относитесь к нему с той же срочностью, что и к раскрытому закрытому ключу.

15%

Сэкономьте 15% на всех хостинговых услугах

Проверьте свои навыки и получите скидку на любой тарифный план

Используйте код:

Skills
Начать