Bitte diesen Post bis zum Ende lesen und erst wenn es verstanden und akzeptiert wurde durchführen.
Melde dich an der Linux Shell der Debian 3CX als root an. Führe folgende Kommandos aus:
Bash:
for _service in $(systemctl list-unit-files --state=enabled |grep -i 3CX |awk '{printf "%s\n", $1}'); do systemctl stop $_service; done
_dbtable=$(sed -n 's/DBName = \(.*\)/\1/p' /var/lib/3cxpbx/Bin/3CXPhoneSystem.ini)
_dbport=$(sed -n '0,/DBPort = \(.*\)/s//\1/p' /var/lib/3cxpbx/Bin/3CXPhoneSystem.ini)
_dbuser=$(sed -n 's/MasterDBUser = \(.*\)/\1/p' /var/lib/3cxpbx/Bin/3CXPhoneSystem.ini)
_dbpassword=$(sed -n 's/MasterDBPassword = \(.*\)/\1/p' /var/lib/3cxpbx/Bin/3CXPhoneSystem.ini)
echo "127.0.0.1:$_dbport:$_dbtable:$_dbuser:$_dbpassword" > ~/.pgpass
chmod 600 ~/.pgpass
Damit werden alle 3CX Dienste zwangsweise beendet (der SQL Server läuft aber weiter) und man holt sich die Zugangsdaten zum SQL Server. Bis hier hin alles harmlos.
Den nächsten Befehl musst du für dich modifizieren. Du solltest die interne Nebenstellennummer des Systemeigentümers kennen. Deren aktuelle Daten fragst du jetzt ab. Das Beispiel hier fragt die Daten der Nebenstelle 200 ab. Wenn das bei dir eine andere Nebenstelle ist, dann musst du die Zahl 200 innerhalb der beiden
' fast ganz am Ende durch die gewünschte Nebenstellennummer ersetzen:
Bash:
psql -d $_dbtable -h 127.0.0.1 -p $_dbport -U $_dbuser -c "select usv.dn, usv.display_name, usv.iddn, dnp.name, dnp.value from users_view as usv, dnprop as dnp where usv.iddn=dnp.fkiddn and dnp.name='SERVICES_ACCESS_HASH' and usv.dn='200';"
Wenn die Nummer richtig eingegeben wurde, dann wird eine kleine Tabelle mit genau einer langen Zeile an Daten erzeugt (ein breites Putty Fenster ist hier von Vorteil). Wenn dem nicht so ist, dann stimmt die Nummer nicht. Wenn ein Fehler ausgegeben wird, dann hast du den Befehl nicht richtig ausgeführt bzw. fehlerhaft verändert. Diese Tabelle kontrollierst du jetzt.
Die erste Spalte sollte die von dir angegebene Nummer der Nebenstelle des Systemeigentümer sein. Wenn nicht, dann brich hier ab und kontrolliere den zuvor eingegebenen Befehl.
Die zweite Spalte ist der Anzeigename des Nutzers der Nebestelle. Das sollte dir bekannt sein und das sollte auch passen. Wenn nicht, dann brich hier ab und kontrolliere den zuvor eingegebenen Befehl.
Die dritte Spalte brauchen wir. Das ist immer eine Nummer, eine ID. Merke dir diese ID, die brauchen wir gleich für den nächsten Befehl zum Ändern des Passwortes, s.u..
Die vierte Spalte enthält nur den Namen SERVICES_ACCESS_HASH zur Kontrolle. Das kann sonst ignoriert werden.
Die fünfte Spalte enthält den aktuellen Service Hash des dir im Moment unbekannten Passwortes dieser Nebenstelle.
Zur Sicherheit kopierst du dir die gesamte Ausgabe in eine Textdatei und speicherst die irgendwo ab. Grundsätzlich nutzt die dir vmtl. nichts und du wirst sie nie brauchen, aber gelöscht ist sie schnell und man hat sie erstmal sicher.
Auch den nächsten Befehl musst du für dich modifizieren. Damit wird für die Nebenstelle des Systemeigentümer ein neues, dir jetzt bekanntes Passwort gesetzt. Das Beispiel hier setzt das Passwort für die Nebenstelle mit der ID 60. Das wird mit Sicherheit bei dir eine andere sein. Hier wird die ID aus der dritten Spalte der vorigen Abfrage (s.o.) benötigt. Du setzt diese deine ID an Stelle der Zahl 60 innerhalb der beiden
' fast ganz am Ende und führst dann den Befehl aus:
Bash:
psql -d $_dbtable -h 127.0.0.1 -p $_dbport -U $_dbuser -c "update public.dnprop set value='AAAAAMAnCQAgAAAA2ol/7jzFNBcvseZwKUN5l8lvw1Ywo8S7E0ix21vHgOEgAAAA6MOOVJHpCQ5UzQ3rNVjUWMa3gcYVlz2j3FrKQQv1KV4=' where name='SERVICES_ACCESS_HASH' and fkiddn='60';"
Das war's. Wenn in der Ausgabe steht UPDATE 1 dann wurde etwas - hoffentlich der Passwort Hash - wie gewünscht geändert. Danach wird mittels des Befehl
reboot die 3CX sauber neu gestartet.
Wenn die 3CX neu gestartet ist, dann kannst du dich mit der Nummer der Nebenstelle des Systemeigentümer und dem vorhin gesetzten Passwort anmelden.
Das Passwort für den vorhin gesetzten Hash lautet
ChangeMeN0w. (ja, das ist eine Null und kein großes O und ja, auch inklusive des Punkt am Ende).
Das Passwort sollte umgehend geändert werden. Meine Empfehlung dazu: Aktiviere unter Admin / System / Optionen / Apps die Option 'Passwortänderung für 3CX-Apps zulassen'. Dann lade zur Sicherheit z.B. mit F5 das Browserfenster neu, klick auf der 3CX Seite oben rechts auf das Männchen, dort auf Einstellungen, dort dann auf Passwort ändern, gib das vorhin gesetzte Passwort ein und zwei mal ein neues welches den 3CX Passwortrichtlinien entspricht und speichere das. Wenn das richtig erfolgt, dann wirst du an der 3CX abgemeldet und musst dich mit dem eben von dir neu gesetzten Passwort anmelden. Wenn das nicht funktioniert, dann darfst du diesen gesamten Post noch einmal von vorn abarbeiten.
Zum Thema Blacklist: da musst du dich selber kümmern. Die Einträge dazu stehen in der SQL Tabelle blacklist. Mit gestoppten 3CX Diensten und den ganzen Anweisungen von oben kannst du dir vor dem Neustart mit der Abfrage
Bash:
psql -d $_dbtable -h 127.0.0.1 -p $_dbport -U $_dbuser -c "select * from blacklist;"
alle Einträge anzeigen lassen und das Problem finden. Ein Beispiel zur Anpassung: mit der Anweisung
Bash:
psql -d $_dbtable -h 127.0.0.1 -p $_dbport -U $_dbuser -c "update blacklist set ipaddr='192.168.99.0' where ipaddr='172.16.0.0';"
kannst du einen Eintrag ändern. Es sollte aber schon einer sein, den du kennst und benötigst. Ich denke, mehr muss ich dazu nicht erklären. Neustart der 3CX nicht vergessen.
Die obligatorischen Hinweise am Schluss:
Diese Vorgehensweise ist höchst inoffiziell, wird seitens 3CX nicht unterstützt und es wird entschieden davon abgeraten.
Auch wenn es problemlos funktioniert: das Anwenden erfolgt auf eigene Gefahr (aber kein Verlust des 3CX Support da nicht nachweisbar).
Ein vollständig vorhandenes Backup, z.B. mittels 3CXBackupCmd erzeugt, ist immer von Vorteil.
Suchstichwort: password reset