WordPress a ztráta hesla – obnovení přístupu

Dnešní doba se nese ve znamení nutnosti autentizovat se vůči celé řadě různých subjektů, od státní správy, přes internetové bankovnictví až po poslední e-shop. Na uživatele je tak kladena povinnost mít celou řadu rozličných hesel, která je nucen si pamatovat či je mít jiným způsobem bezpečně poznamenána. Redakční systém WordPress v tomto pochopitelně není výjimkou.

Co se však stane, pokud přijdeme o heslo a z nějakého důvodu není možné použít obnovení hesla prostřednictvím interního WordPress nástroje pro reset pomocí e-mailu? Nebo snad pokud jsme například převzali do správy webovou prezentaci zákazníka, který svůj login do WP ani nikdy neměl? Lze se do WP dostat i v případě, že neznáme ani uživatelské jméno?

Odpověď na všechny tyto otázka je kladná, jak na to si ukážeme v následujícím článku. Dopředu však musíme upozornit, že se nejedná o návod k neoprávněnému přístupu do cizího systému, níže uvedené postupy předpokládají administrátorský přístup k serveru, MySQL databázi nebo FTP účtu hostingu, na kterém WordPress běží.

Veškeré níže popsané postupy jsou předkládány bez jakékoliv záruky a používáte je na vlastní riziko. Autor článku nenese odpovědnost za případné škody vzniklé jejich použitím.

Možnosti obnovení hesla ve WordPress jsou mimo jiné tyto:

Obnovení hesla pomocí e-mailu

Tak jako řada různých webových služeb i WordPress obsahuje funkci umožňující obnovení zapomenutého hesla prostřednictvím odkazu zaslaného e-mailem na adresu, jež je s uživatelským účtem asociována. Jedná se o základní a nejjednodušší možnost, jak se k zapomenutému heslu dostat. Pravděpodobně bude tím prvním, co postižený uživatel intuitivně vyzkouší, ještě než na internetu začne hledat nějaké návody, nicméně pro úplnost ji v tomto článku zmíníme také. Odkaz na resetování hesla tímto způsobem naleznete na přihlašovací obrazovce pod přihlašovacím formulářem.

WordPress - reset hesla přes přihlašovací obrazovku

Ve většině případů ztráty hesla je tato první a nejsnazší možnost dostačující, avšak co dělat, pokud nám z nějakého důvodu e-maily s výzvou ke změně hesla nedocházejí, nemáme do to této e-mailové schránky přístup nebo pokud není e-mailová adresa u našeho administrátorského účtu vůbec vyplněna? To si popíšeme v následujících odstavcích.

Změna hesla z administrace prostřednictvím jiného administrátorského účtu

Ještě předtím, než se začneme věnovat složitějším variantám resetu hesla, teoreticky by se zde mohla nabízet ještě jedna snadná možnost, tedy alespoň za předpokladu, že WordPress používáme s více než jedním administrátorským účtem. V takovém případě není nic snazšího, než se přihlásit odlišným účtem a našemu standardnímu účtu heslo skrze administraci změnit, případně o provedení této akce požádat oprávněného vlastníka dalšího administrátorského účtu.

Stačí si rozkliknout postižený profil přes administraci Uživatelé -> Přehled uživatelů. Ve spodní části naleznete kolonku pro zadání nového hesla.

WordPress - reset hesla jiného uživatele

Obnovení hesla v databázi WordPress pomocí nástroje phpMyAdmin

Známe-li přihlašovací údaje k MySQL databázi a zároveň má pro nás náš poskytovatel webhostingu k dispozici nástroj phpMyAdmin, lze obnovení hesla ve WordPress provést pohodlně přímo z našeho webového prohlížeče. Tyto údaje bývají součástí e-mailu od poskytovatele webhostingu s oznámením o zřízení služby nebo jsou dostupné v  zákaznické administraci.

Na adrese phpMyAdminu našeho poskytovatele bude třeba se těmito údaji přihlásit:

phpMyAdmin - přihlášení

Po úspěšném přihlášení bychom měli vidět webové rozhraní sloužící ke správě MySQL databáze, obdobné jako to, jež je vidět na obrázku níže. V levém sloupci nyní zvolíme jméno databáze, kterou naše instalace systému WordPress používá. Zde se poohlédneme po tabulce se jménem wp_users, kterou pokud rozklikneme, měli bychom vidět výpis uživatelských účtů, mezi nimi i ten náš, u něhož potřebujeme změnit heslo.

phpMyAdmin a WordPress

Zde vybereme řádek odpovídající našemu uživatelskému účtu a vlevo na jeho začátku zvolíme možnost „Upravit“. Na obrazovce, jež se nám zobrazí dále, uvidíme výčet sloupců a v nich pro tento záznam uložených hodnot. Zastavíme se u třetího řádku user_pass a ve třetím sloupci se záhlavím „funkce“ pro tento třetí řádek v drop-down rolovátku vybereme volbu „MD5“. Řetězec zdánlivě náhodných znaků ve vedlejším textovém poli ve sloupci se záhlavím „Hodnota“ nahradíme naším novým požadovaným heslem, viz obrázek níže.

phpMyAdmin a WordPress - obnovení hesla

Volbu potvrdíme stiskem tlačítka „Proveď“. To je vše, vaše heslo bylo změněno, nyní se můžete jít zkusit přihlásit.

Pozor, v jedné databázi může být nainstalováno více instancí systému WordPress. Ty se od sebe budou odlišovat prefixy před názvy tabulek, tedy místo wp_users například dev_users. Pokud uvidíte více tabulek končících na _users, velmi dobře zvažte další postup. Pokračujte, pouze pokud jste si naprosto jistí, že tabulka patří k právě té instalaci, u níž potřebujete změnit heslo. Pokud si jisti nejste, raději přejděte na další kapitolu, kde je možnost omylu podstatně snížena.

Obnovení hesla pomocí PHP skriptu nahraného přes FTP

Další a mnohými preferovaná možnost, jak změnit heslo, představuje úprava záznamu v databázi prostřednictvím PHP skriptu, který tuto změnu provede. Tento skript musíme nějakým způsobem dostat na server do adresáře, kde je náš WordPress nainstalován. To se obvykle provádí nahráním souboru pomocí FTP, méně častěji pak pomocí SFTP. Přihlašovací údaje (jméno, heslo, adresa serveru, případně protokol a port) obvykle bývají součástí e-mailu od poskytovatele webhostingu oznamujícího zřízení služby, případně jsou dostupné v zákaznické administraci na jeho webu.

Ve Windows pro přístup na FTP a FTPS použijte Total Commander, pro SFTP pak WinSCP. Princip použití je u obou velmi podobný. V Linuxu si pro vše vystačíte s mc, tedy Midnight Commanderem. Pokud potřebujete podrobnější návod pro práci s FTP, než jaký uvádíme níže, podívejte se na náš starší článek Jak pracovat s FTP a jaký zvolit program (klient pro Windows a Linux).

V Total Commanderu zvolte ve vodorovném horním menu položku „Síť“, z objevivšího se drop-down menu vyberte „Protokol FTP – Připojit k serveru…“. V novém okně, jež se právě objevilo, klikněte na tlačítko „Nové připojení“. Do textových políček v nově se objevivším okně vepište hodnoty, jež máte od poskytovatele webhostingu, vizte příklad na obrázku níže.

TotalCommander

Záznam pomocí tlačítka OK potvrďte a uložte a následně zvolte v předešlém okně „Připojit“. Nyní máte otevřené spojení na FTP server, na kterém běží váš webhosting. Adresářová struktura se bude napříč různými poskytovateli lišit, nicméně měli byste být schopni najít kořenový adresář domény, na níž je nainstalovaný WordPress, u něhož potřebujete měnit heslo. Obsah adresáře obsahujícího instalaci systému WordPress může vypadat přibližně takto:

WordPress přes TotalCommander (FTP)

Sem je třeba nahrát soubor obsahující PHP skript, který provede změnu hesla. Jeden takový jsme pro vás připravili. Můžete si ho buď zkopírovat a uložit nebo rovnou stáhnout ZDE.

<?php

# 
# passwd_reset.php
#
# wpmax.cz 
# 09-2021
# CC BY-NC-SA

include('wp-config.php');

$UZIVATELSKE_JMENO = "uzivatel";
$NOVE_HESLO = "nastavit";

$TABULKA = $table_prefix."users";

$conn = mysqli_connect(DB_HOST,DB_USER,DB_PASSWORD) or die("Nelze se pripojit k serveru: ". mysqli_error($conn));   
mysqli_select_db($conn,DB_NAME) or die("Nelze vybrat databazi: ". mysqli_error($conn));   

$sql = "UPDATE ".$TABULKA." SET user_pass = MD5('".$NOVE_HESLO."') WHERE ".$TABULKA.".user_login = '".$UZIVATELSKE_JMENO."';";
mysqli_query($conn,$sql) or die ("Nastala chyba: ".mysqli_error($conn));

if (mysqli_affected_rows($conn) > 0) {
  echo "Zmena hesla uzivatele ".$UZIVATELSKE_JMENO." probehla uspesne!";
} else {
  echo "Heslo uzivatele ".$UZIVATELSKE_JMENO." nebylo zmeneno!";
}

?>

Soubor uložte jako passw_reset.php a v nějakém rozumném textovém editoru (PSPad, Notepad++ apod.) jej otevřete. Zde hned na začátku vepište do uvozovek hodnotu proměnných UZIVATELSKE_JMENO a NOVE_HESLO, kde první z nich je uživatelské jméno, kterým jste se přihlašovali (na velikosti písmen záleží) a druhá nové heslo, které si přejete nastavit. Skript nahrajte do adresáře, kde máte instalovaný WordPress, jenž jsme si určili výše. Poté ve webovém prohlížeči otevřete adresu vašeho webu, za kterou doplníte /passwd_reset.php, tedy například http://moje-pekna-domena.cz/passwd_reset.php.

Odpovědí by vám měla být zpráva o úspěšném provedení změny:

WordPress - obnovení hesla pomocí PHP skriptu

Hotovo! Ihned poté soubor passwd_reset.php z adresáře na FTP serveru odstraňte.

Alternativně je možné obdobným způsobem použít celou řadu podobných skriptů, uvádíme odkaz aspoň na některé z nich:

Reset přes SSH či lokální konzoli

Poslední možnost obnovení hesla je použitelná v případě, kdy WordPress běží na vašem vlastním či pronajatém serveru, kam máte přístup přes SSH, popřípadě kam jste schopni se přihlásit na konzoli jiným způsobem (lokálně, přes IPMI, iDRAC, ILO apod.). Následující postupy předpokládají alespoň základní uživatelskou zkušenost s Linuxem nebo jinými UNIXovými systémy a orientaci v rozhraní příkazové řádky.

Po úspěšném přihlášení do konzole máme několik možností. Buď můžeme změnit heslo přímo v databázi pomocí konzolového MySQL klienta, pomocí utility wp-cli nebo v předešlé kapitole uvedeným způsobem pomocí PHP skriptu.

Wp-cli

Konzolová utilita wp-cli je pro obsluhu systému WordPress z rozhraní příkazové řádky nejefektivnější, avšak není součástí standardní instalace. Pokud ji do své customizované instalace nedoplnil poskytovatel hostingového řešení, bude třeba ji stáhnout a nainstalovat ručně:

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

Dále vizte https://make.wordpress.org/cli/handbook/guides/installing/.

Použití je velice snadné, pomocí jednoho příkazu (wp user list) jsme schopni vylistovat si přítomné uživatele a druhým (wp user update <ID uživatele> –password=<nové heslo>) rovnou vybranému z nich heslo změnit, vizte screenshot.

WordPress - obnovení hesla pomocí SSH - použití wp-cli

Konzolový MySQL klient

Další možností je změna v databázi pomocí konzolového MySQL klienta, kterého spustíme příkazem mysql. Pokud neznáme přihlašovací údaje a jméno databáze, můžeme si pomoci konfiguračním souborem wp-config.php z naší instalace. Přepněme se tedy do adresáře, kde máme náš WordPress nainstalován a pomocí následujícího příkazu si z něho vyfiltrujeme proměnné, které nás zajímají:

grep 'DB' wp-config.php

Se zjištěným uživatelským jménem a heslem již nebude problém se přihlásit:

mysql –user=<uživatelské jméno, DB_USER> --password

V případě, že MySQL server běží na jiném stroji než na tom, na kterém se právě nacházíme, a v konfiguračním souboru wp-config.php bude u proměnné DB_HOST jiná proměnná než localhost nebo 127.0.0.1, specifikujeme jej v parametru:

mysql –host=<IP nebo hostname databázového serveru, DB_HOST> --user=<uživatelské jméno, DB_USER> --password

Po úspěšném přihlášení do MySQL se musíme přepnout do správné databáze, specifikované v souboru wp-config.php v proměnné DB_NAME, a to pomocí SQL příkazu USE (pozor na středník na konci):

USE <jméno databáze>;

Následně si již můžeme vylistovat přítomné uživatele a zjistit ID našeho účtu, kterému budeme měnit heslo:

SELECT ID,user_login FROM wp_users;

Výsledkem by měla být pěkná tabulka, vizte obrázek níže.

WordPress - obnovení hesla přes SSH a konzolového MySQL klienta

Nyní již můžeme přikročit k samotné změně hesla. Tu provedeme SQL příkazem UPDATE:

UPDATE wp_users SET user_pass=md5('Nase_nove_heslo') WHERE ID=<ID uživatele>;

A je to. Vrátila-li se vám hláška „Query OK, 1 row affected“, máte hotovo. Příkazem quit můžete MySQL opustit.

Pokud náhodou došlo k chybě a vrací se vám místo toho hláška o neexistující tabulce, je pravděpodobné, že tabulky naší instalace systému WordPress používají nějaký nestandardní prefix. V takovém případě opusťte MySQL a příkazem grep zjistěte ze souboru wp-config.php, jaký prefix se používá namísto standardního „wp_“:

grep 'table_prefix' wp-config.php

Pokud se vám u proměnné $table_prefix vypíše např. ‚pokus_‘, v předešlých krocích nahradíte jméno tabulky wp_users za pokus_users.

Jak postupovat v případě, že nemáme k dispozici ani FTP, ani SSH, ani přístup do MySQL?

Pokud by nastala situace, kdy nebude možné výše uvedené postupy použít, jelikož nemáme k dispozici přístupové údaje k FTP ani databázi, bude třeba tyto přístupy získat přímo od poskytovatele webhostingu. To samozřejmě pouze za předpokladu, že jsme oprávněni s předmětným hostingem nakládat a že máme tuto skutečnost jak prokázat jeho poskytovali. V případě vlastnictví přihlašovacích údajů k zákaznickému účtu daného webhostingu by mělo být možné přístupové údaje k MySQL i FTP získat či nově vytvořit po přihlášení přímo ve webovém rozhraní zákaznické administrace, případně oslovením zákaznické podpory. Přesný postup se však bude poskytovatel od poskytovatele lišit a jeho podrobný popis je již nad rámec tohoto článku.

Napsat komentář