Plesk Mariadb Admin Passwort: kann nicht mehr auf psa Databank zugreifen,

Elster

New Member
Hallo,

ich habe ein upgrade von MariaDB 5.5 auf 10.2 (CentOS 7.7) gemäß dieser anleitung gemacht: How to upgrade MySQL 5.5 to 5.6/5.7 or MariaDB 5.5 to 10.0/10.1/10.2 on Linux?

MariaDB 10.2 läuft auch. Benutzer/Websites können auf ihre datenbanken zugreifen. Aber "admin" und damit Plesk selbst kann nicht mehr auf die datenbank zugreifen, weil sich aus irgendwelchen Gründen das Admin-Passwort geändert hat. Beispiel

Code:
MYSQL_PWD=`cat /etc/psa/.psa.shadow` mysqldump -u admin --all-databases --routines --triggers > /tmp/all-databases-new.sql
  
Version check failed. Got the following error when calling the 'mysql' command line client
ERROR 1045 (28000): Access denied for user 'admin'@'localhost' (using password: YES)
FATAL ERROR: Upgrade failed
Dann habe ich versucht ein neues Passwort zu setzen.

Code:
systemctl stop mariadb
[[email protected] ~]# mysqld_safe --skip-grant-tables --skip-networking &
[1] 76597
[[email protected] ~]# 200317 08:23:11 mysqld_safe Logging to '/var/log/mariadb/mariadb.log'.
200317 08:23:11 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
[1]+ Done mysqld_safe --skip-grant-tables --skip-networking
[[email protected] ~]# mysql -u root
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111)
Irgendwelche Ideen, was zu tun ist?

Herzlichen Dank!
 

Elster

New Member
Vielen Dank. Einmal durchgeführt, aber das löst das Problem leider nicht.

Code:
[[email protected] system]# systemctl stop mariadb
[[email protected] system]# mysqld_safe --skip-grant-tables &
[1] 87773
[[email protected] system]# 200317 10:35:31 mysqld_safe Logging to '/var/log/mariadb/mariadb.log'.
200317 10:35:31 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
mysql
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111)
[1]+  Done                    mysqld_safe --skip-grant-tables
Plesk Obsidian übrigens (falls das relevant ist).
 

Elster

New Member
Vielen Dank für die Hilfe!

Lösung in den Logs gefunden und möglicherweise hilft das ja auch anderen mal: Mariadb konnte das pidfile nicht schreiben. Mariadb hat versucht das in /var/run/mariadb zu schreiben, was nicht existent war. Kann man wahlweise das Verzeichnis anlegen oder MariaDb in der Konfiguration ein anderes Verzeichnis für das pidfile vorgeben. Danach ließ sich "mysqld_safe --skip-grant-tables &" erfolgreich ausführen und in der Folge ein neues Passwort für den Datenbank-Nutzer admin setzen.

Plesk greift das Datenbank-Passwort für alle internen Zwecke ja in /etc/psa/.psa.shadow ab. Da habe ich das im Klartext hinterlegt, was auch funktioniert aber "suboptimal" ist. Weiß jemand, wie man das wieder als hash hinterlegt. War glaube ich als AES128-Hash hinterlegt, was dann ua. das richtige secret braucht?
 

Elster

New Member
Danke, aber das setzt soweit ich weiß nur das Plesk Admin Passwort neu, welches nicht identisch mit dem Passwort für den MySQL/MariaDB-User "admin" ist. Ich kann das Passwort für den MySQL/MariaDB-User "admin" auch problemlos neu setzen. Ich hätte es nur gern wieder als Hash statt im Klartext in der Datei abgelegt, die Plesk selbst nutzt.
 

Elster

New Member
Ich möchte wissen, wie ich den Hash für das von mir gesetzte Passwort für den Mariadb-user "admin" generiere, so dass Plesk den aus der Datei /etc/psa/.psa.shadow lesen kann. Also sinngemäß ein Befehl "GenerateAES128-Hash <secret> <password>"
 

Elster

New Member
Weil ein aktuelles PHP kein mcrypt mehr kennt, habe ich es mit Openssl nachgebaut. Hat leider nicht funktioniert. Plesk kann den so generierten String offenbar nicht entschlüsseln und somit nicht auf die Datenbank zugreifen. Der Artikel bezieht sich ja auf Plesk 11. Möglicherweise hat Plesk bei Plesk 18 Parameter geändert?

Code:
<?php 
$tmp = explode('$', '<alter string aus /etc/psa/.psa.shadow>');
$cipher = $tmp[1];
$base64Iv = $tmp[2];
$base64Key = '<string aus /etc/psa/private/secret_key Base64kodiert>';
$newPass = '*******';
$encryptedPass = openssl_encrypt(
    $newPass, 
    'AES-128-CBC', 
    base64_decode($base64Key), 
    OPENSSL_RAW_DATA,
    base64_decode($base64Iv));

printf('$%s$%s$%s',
    $cipher,
    $base64Iv,
    base64_encode($encryptedPass));
?>
 
Top