KeyHelp – Umzug auf einen neuen Server – IT-Praxis aus Oberschwaben
Zuletzt aktualisiert am 22. Oktober 2023, 20:10:06
Ich betreibe seit mehreren Jahren einen Server mit dem KeyHelp-Kontrollpanel. Die Hardwareressourcen gehen langsam zur Neige. Daher sollte auf einen neuen Server umgezogen werden, damit in der Zukunft ausreichend Ressourcen für neue Herausforderungen zur Verfügung stehen.
In diesem Beitrag beschreibe ich die notwendigen Schritte. Das Betriebssystem sowohl auf dem alten als auch auf dem neuen Server ist UEs wird Ubuntu Server 22.04.3 LTS verwendet. Es ist an diesem Punkt KeyHelp 23.2 (Build 3096) neueste Version Der Artikel basiert auf Anweisungen aus dem KeyHelp-Community-Forum.
Vorbereitungen
Ich übernehme keinerlei Gewährleistung, Haftung oder Verantwortung für eventuell dadurch entstehende Schäden oder Folgeschäden.
Aktueller Server
Aktivieren Sie den KeyHelp-Wartungsmodus (KeyHelp-Benutzeroberfläche -> Einstellungen -> Systemsteuerung -> Wartungsmodus). Bei Bedarf auch für verschiedene in der KeyHelp-Instanz angebotene Websites.
Stoppen/beenden Sie die Linux-Dienste „Postfix“, „Dovecot“, „proFTPD“.
systemctl stop postfix.service systemctl stop dovecot.service systemctl stop proftpd.service
Erstellen Sie über die KeyHelp-Benutzeroberfläche (Einstellungen -> Backup) ein aktuelles Backup in einem Remote-Repository. Zu diesem Zweck habe ich mir bei Hetzner eine Lagerbox gemietet. Die Datenübertragung dorthin erfolgt per SFTP.
Benutzerkonten vom MariaDB-Server über phpMyAdmin lesen und exportieren. Es ist wichtig, dass Sie sich zum Anmelden mit dem Konto „mysqladmin“ anmelden.
Anschließend erscheint ein neues Dialogfenster. Dort werden die notwendigen SQL-Befehle eingegeben. Am besten kopieren Sie den Inhalt 1:1 in einen Texteditor.
Neue Server
Richten Sie einen neuen (virtuellen) Server mit Ubuntu Server 22.04.3 LTS ein/installieren Sie ihn.
Richten Sie eine SSH-Sitzung ein und extrahieren Sie die Zeitdienstkonfiguration.
timedatectl
Stellen Sie die Zeitzone auf Europa/Berlin ein.
timedatectl set-timezone Europe/Berlin
Überprüfen Sie die Zeitdienstkonfiguration.
timedatectl
Installieren Sie KeyHelp mit dem Skript des Herstellers (Quelle:
wget -O install_keyhelp.sh ; bash install_keyhelp.sh ;
Installieren Sie alle erforderlichen PHP-Interpreter über die KeyHelp-Benutzeroberfläche über Konfiguration -> Funktionseinstellungen -> PHP-Interpreter. Wenn auf dem aktuellen KeyHelp-Server kein Interpreter installiert ist, kann dieser Punkt natürlich übersprungen werden.
Wenn Sie die Möglichkeit haben, können Sie einen Snapshot des gesamten Servers in seinem aktuellen Zustand erstellen. Es kann sicherlich nicht schaden. 😉
Wiederherstellung
Die nächsten Schritte sind auf dem neuen Server erledigt!
Erstellen Sie ein neues Verzeichnis mit dem Namen „recovery“.
mkdir /restore
Backup-Speicher hinzufügen
Da diese Schritte an verschiedenen Stellen wiederholt werden, habe ich mich entschieden, dies in einem Aufzählungspunkt zu beschreiben. So kann man immer wieder darauf zurückgreifen.
Öffnen Sie die KeyHelp-Benutzeroberfläche und gehen Sie zu Einstellungen -> Backup. Gehen Sie zur Repository-Verwaltung, um ein vorhandenes Repository hinzuzufügen.
Geben Sie die Parameter zum Hinzufügen des Repositorys ein und klicken Sie dann auf Speichern. Grundsätzlich sollten hier die gleichen Daten wie auf dem KeyHelp-Server eingetragen werden!
Wenn alles gut gelaufen ist, kehren Sie zur Übersicht zurück. Es gibt automatisch ein „Health Check/Update Stats“-Ereignis mit dem Status „Coming Soon“.
Dieser Vorgang stellt sicher, dass Snapshots im Backup-Repository gelesen und später verwendet werden können. Dieser Vorgang kann einige Minuten dauern. Seien Sie also nicht ungeduldig.
Benutzer- und Gruppenwiederherstellung
Wählen Sie dazu in der KeyHelp-Benutzeroberfläche das Menü Einstellungen -> Backup -> Backup wiederherstellen.
Stellen Sie das Verzeichnis /etc aus dem letzten Snapshot wieder her. Scrollen Sie dazu nach unten zum Abschnitt „Dateien und Verzeichnisse“.
Im Hauptmenü „Backup“ wird ein neuer Vorgang angezeigt. Sie wird dann im Rahmen des Wartungsintervalls durchgeführt. Wenn der Job korrekt abgeschlossen wurde, befindet sich im Verzeichnis „/restore“ ein Verzeichnis „etc“.
Erstellen Sie eine Kopie der Systemdateien
cp /etc/passwd /etc/passwd.$(date '+%Y-%m-%d_%H-%M-%S') cp /etc/shadow /etc/shadow.$(date '+%Y-%m-%d_%H-%M-%S') cp /etc/group /etc/group.$(date '+%Y-%m-%d_%H-%M-%S') cp /etc/gshadow /etc/gshadow.$(date '+%Y-%m-%d_%H-%M-%S')
Benutzerkonten
Lesen Sie alle Benutzerkonten aus der Datei „/restore/etc/passwd“. Generell beginnen alle von KeyHelp generierten Einträge mit der ID 5xxx.
egrep "[^:]:x:5[0-9]{3}:" /restore/etc/passwd | tail -n +2 > /restore/keyhelp_passwd
Stellen Sie sicher, dass der Inhalt der Datei „/restore/keyhelp_passwd“ vollständig ist.
cat /restore/keyhelp_passwd xdzs:x:5001:5001::/home/users/xdzs/:/bin/bash djth:x:5002:5002::/home/users/djth/:/bin/false zaco:x:5003:5003::/home/users/zaco/:/bin/bash epvm:x:5004:5004::/home/users/epvm/:/bin/false vaon:x:5005:5005::/home/users/vaon/:/bin/false apnk:x:5006:5006::/home/users/apnk/:/bin/false ahlm:x:5007:5007::/home/users/ahlm/:/bin/false idkc:x:5008:5008::/home/users/idkc/:/bin/bash ccvv:x:5009:5009::/home/users/ccvv/:/bin/bash wihn:x:5010:5010::/home/users/wihn/:/bin/bash kxmf:x:5011:5011::/home/users/kxmf/:/bin/bash vcfa:x:5012:5012::/home/users/vcfa/:/bin/bash
Erstellen Sie eine leere Datei „/restore/keyhelp_shadow“.
cp /dev/null /restore/keyhelp_shadow
Lesen Sie alle gefundenen Benutzerkontoeinträge aus „/restore/etc/shadow“ und schreiben Sie sie nach „/restore/keyhelp_shadow“.
input="/restore/keyhelp_passwd" while read -r line do echo "$line" username=$(echo $line | awk -F: '{print $1}') egrep "^$username:" /restore/etc/shadow >> /restore/keyhelp_shadow done < "$input"
Stellen Sie sicher, dass der Inhalt der Datei „/restore/keyhelp_shadow“ vollständig ist.
cat /restore/keyhelp_shadow xdzs:$6$rounds=5000$LdJQeN8ZTwsqBW.H$h8vKtCnI6UMrkTuPCn.NDEA/vCzcq1:18520:0:99999:7::: djth:$6$rounds=5000$wX1ESet8/p4AUVhg$JbsTZDBzGR/44WgdjOBI855Z/d6PA/:18520:0:99999:7::: zaco:$6$rounds=5000$f1mnQAvtYEu6ahyK$PW7kbqYpni8XgFRVkRePDexsrFeSn1:18520:0:99999:7::: epvm:$6$rounds=5000$y5GTIB7UC6esW9mp$eax7emTvzLNm.XQIF9/yyu.Vvry.g0:18521:0:99999:7::: vaon:$6$rounds=5000$zs4cCb9YGU0nvdjS$R48nn9lrWgtyNssgDPg9j.IZeAFc91:18521:0:99999:7::: apnk:$6$rounds=5000$v0EmaKVCOytS/NQk$.vVwQ8wEX0.Znq39idXkRdwE3JX5h/:18521:0:99999:7::: ahlm:$6$rounds=5000$0LGvw2BNtzYmnDTM$GbBRQdq/Frr1B/sEQcOXRgQuZHT4E0:18521:0:99999:7::: idkc:$6$rounds=5000$7Yq.MOs6NaiT1GkE$1cEIKrPb.3DGjR8AjEk3lYhmQTwM//:18521:0:99999:7::: ccvv:$6$rounds=5000$oHWXvYa9ZBwbKmh0$gyo.oDRNxG2aKxcfJVYDF7Vao0Hi51:18521:0:99999:7::: wihn:$6$rounds=5000$OtLSYsof8XjA53Ja$oOx0O3GUPrPFs8niJbZwL.kmLVJ6N0:18521:0:99999:7::: kxmf:$6$rounds=100000$wXYtsvJUH0OAQLlm$Tb8SQawNm2OuQow8jmkr4235do/0:19029:0:99999:7::: vcfa:$6$rounds=5000$P5m0vpMcUoFk1IGJ$uqxSM/8hMlcId5afixyJtZVITak1o0:18522:0:99999:7:::
Gruppenkonten
Lesen Sie alle Gruppen aus der Datei „/restore/etc/group“. Auch hier beginnen alle von KeyHelp generierten Einträge mit der ID 5xxx.
egrep "[^:]:x:5[0-9]{3}:" /restore/etc/group | tail -n +2 > /restore/keyhelp_group
Stellen Sie sicher, dass der Inhalt der Datei „/restore/keyhelp_group“ vollständig ist.
cat /restore/keyhelp_group xdzs:x:5001: djth:x:5002: zaco:x:5003: epvm:x:5004: vaon:x:5005: apnk:x:5006: ahlm:x:5007: idkc:x:5008: ccvv:x:5009: wihn:x:5010: kxmf:x:5011: vcfa:x:5012:
Erstellen Sie eine leere Datei „/restore/keyhelp_gshadow“.
cp /dev/null /restore/keyhelp_gshadow
Lesen Sie alle gefundenen Gruppeneinträge aus „/restore/etc/gshadow“ und schreiben Sie in die Datei „/restore/keyhelp_gshadow“.
input="/restore/keyhelp_group" while read -r line do echo "$line" groupname=$(echo $line | awk -F: '{print $1}') egrep "^$groupname:" /restore/etc/gshadow >> /restore/keyhelp_gshadow done < "$input"
Stellen Sie sicher, dass der Inhalt der Datei „/restore/keyhelp_gshadow“ vollständig ist.
cat /restore/keyhelp_gshadow xdzs:!:: djth:!:: zaco:!:: epvm:!:: vaon:!:: apnk:!:: ahlm:!:: idkc:!:: ccvv:!:: wihn:!:: kxmf:!:: vcfa:!::
Lesen Sie alle KeyHelp-Gruppen aus der Datei „/restore/etc/group“ und schreiben Sie in die Datei „/restore/keyhelp_tmp_group“.
egrep "^keyhelp_" /restore/etc/group > /restore/keyhelp_tmp_group
Stellen Sie sicher, dass der Inhalt der Datei „/restore/keyhelp_tmp_group“ vollständig ist.
cat /restore/keyhelp_tmp_group keyhelp_file_manager:x:1001:xdzs,djth,zaco,epvm,vaon,apnk,ahlm,idkc,ccvv,wihn,kxmf,vcfa keyhelp_nossh:x:1002:djth,epvm,vaon,apnk,ahlm keyhelp_noftp:x:1003:xdzs,djth,zaco,epvm,ahlm,vaon,vcfa keyhelp_suspended:x:1004: keyhelp_chroot:x:1005:
Lesen Sie die Datei „/restore/keyhelp_tmp_group“. Lesen Sie den Teamnamen am Anfang jeder Zeile. Suchen Sie den Gruppennamen in der Datei /etc/group und geben Sie die Zeilennummer zurück. Ersetzen Sie die Zeilennummer X durch den Wert in der Datei /restore/keyhelp_tmp_group.
input="/restore/keyhelp_tmp_group" while read -r line do echo "$line" # groupname=$(echo $line | awk -F: '{print $1}') echo $groupname # zeilnr=$(awk '/'"$groupname"'/ { print NR; Exit }' /etc/group) echo $zeilnr # sed -i "$zeilnr"'s/.*/'"$line/" /etc/group done < "$input"
Stellen Sie sicher, dass der Inhalt der Datei „/etc/group“ vollständig ist.
egrep "^keyhelp_" /etc/group keyhelp_file_manager:x:1001:xdzs,djth,zaco,epvm,vaon,apnk,ahlm,idkc,ccvv,wihn,kxmf,vcfa keyhelp_nossh:x:1002:djth,epvm,vaon,apnk,ahlm keyhelp_noftp:x:1003:xdzs,djth,zaco,epvm,ahlm,vaon,vcfa keyhelp_suspended:x:1004: keyhelp_chroot:x:1005:
Lesen Sie alle KeyHelp-Gruppen aus der Datei „/restore/etc/gshadow“ und schreiben Sie in die Datei „/restore/keyhelp_tmp_gshadow“.
egrep "^keyhelp_" /restore/etc/gshadow > /restore/keyhelp_tmp_gshadow
Stellen Sie sicher, dass der Inhalt der Datei „/restore/keyhelp_tmp_gshadow“ vollständig ist.
cat /restore/keyhelp_tmp_gshadow keyhelp_file_manager:!::xdzs,djth,zaco,epvm,vaon,apnk,ahlm,idkc,ccvv,wihn,kxmf,vcfa keyhelp_nossh:!::djth,epvm,vaon,apnk,ahlm keyhelp_noftp:!::xdzs,djth,zaco,epvm,ahlm,vaon,vcfa keyhelp_suspended:!:: keyhelp_chroot:!::
Lesen Sie die Datei „/restore/keyhelp_tmp_gshadow“. Lesen Sie den Teamnamen am Anfang jeder Zeile. Suchen Sie den Gruppennamen in der Datei /etc/gshadow und geben Sie die Zeilennummer zurück. Ersetzen Sie die Zeilennummer X durch den Wert in der Datei /restore/keyhelp_tmp_gshadow.
input="/restore/keyhelp_tmp_gshadow" while read -r line do echo "$line" # groupname=$(echo $line | awk -F: '{print $1}') echo $groupname # zeilnr=$(awk '/'"$groupname"'/ { print NR; Exit }' /etc/gshadow) echo $zeilnr # sed -i "$zeilnr"'s/.*/'"$line/" /etc/gshadow done < "$input"
Stellen Sie sicher, dass der Inhalt der Datei „/etc/gshadow“ vollständig ist.
egrep "^keyhelp_" /etc/gshadow keyhelp_file_manager:!::xdzs,djth,zaco,epvm,vaon,apnk,ahlm,idkc,ccvv,wihn,kxmf,vcfa keyhelp_nossh:!::djth,epvm,vaon,apnk,ahlm keyhelp_noftp:!::xdzs,djth,zaco,epvm,ahlm,vaon,vcfa keyhelp_suspended:!:: keyhelp_chroot:!::
Fügen Sie dem System Benutzer und Gruppen hinzu
Übertragen Sie die ausgewählten Benutzer und Gruppen in ihre jeweiligen Systemdateien.
cat /restore/keyhelp_passwd >> /etc/passwd cat /restore/keyhelp_shadow >> /etc/shadow cat /restore/keyhelp_group >> /etc/group cat /restore/keyhelp_gshadow >> /etc/gshadow
Überprüfen Sie abschließend, ob die Dateien /etc/passwd, /etc/shadow, /etc/group und /etc/gshadow korrekt und vollständig sind. Abschließend muss sichergestellt werden, dass in den geänderten Dateien keine Gruppen mehr als einmal vorhanden sind.
KeyHelp stellt die Verschlüsselung wieder her
KeyHelp verfügt über eine Verschlüsselung, auch bei Verwendung der 2-Faktor-Authentifizierung. Aber auch an anderen Orten ist dieser Schritt durchaus zu empfehlen.
Installieren Sie die erforderlichen Voraussetzungen.
apt install jq
Lesen Sie den Schlüsselwert aus der Datei „/restore/etc/keyhelp/config/config.json“, speichern Sie ihn in einer Variablen und geben Sie ihn aus.
KeyHelpEncrypKey=$(cat /restore/etc/keyhelp/config/config.json | jq .encryption.base | tr -d '"') echo $KeyHelpEncrypKey
Erstellen Sie eine Kopie der Datei „/etc/keyhelp/config/config.json“.
cp /etc/keyhelp/config/config.json /etc/keyhelp/config/config.json.$(date '+%Y-%m-%d_%H-%M-%S')
Ersetzen Sie den aus der Variablen „KeyHelpEncrypKey“ gelesenen Wert in der Datei „/etc/keyhelp/config/config.json“.
jq --arg KeyHelpEncrypKey $KeyHelpEncrypKey '.encryption.base = $KeyHelpEncrypKey' /etc/keyhelp/config/config.json > /etc/keyhelp/config/tmp.$$.json && mv /etc/keyhelp/config/tmp.$$.json /etc/keyhelp/config/config.json
Sobald der neue Wert gespeichert ist, muss das bestehende Backup-Repository gelöscht und neu integriert werden (siehe Kap Backup-Speicher hinzufügen).
Das Werkzeug jq nochmal deinstallieren
apt purge jq apt autoremove
Datenbankstandards wiederherstellen
Wählen Sie dazu in der KeyHelp-Benutzeroberfläche das Menü „Einstellungen -> Sicherung -> Sicherung wiederherstellen“. Diesmal die Datenbanken, die für den Betrieb von KeyHelp unbedingt erforderlich sind. Diese sind heute keyhelp, mysql, phpmyadmin, rainloop, Roundcube und snappymail. Mit „Speichern“ wird erneut ein neuer Vorgang erstellt.
Nach dem Start des Vorgangs kehrt die neue KeyHelp-Benutzeroberfläche zum Anmeldebildschirm zurück. Dies liegt daran, dass die bestehende Sitzung verloren ging, als die KeyHelp-Datenbank wiederhergestellt wurde. Ab sofort gelten die Anmeldedaten der vorherigen KeyHelp-Instanz.
Starten Sie den MariaDB-Datenbankserver neu.
systemctl restart mariadb.service
Überprüfen Sie den Status des Datenbankservers.
systemctl status mariadb.service ● mariadb.service - MariaDB 10.6.12 database server Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2023-09-26 17:06:04 CEST; 21s ago Docs: man:mariadbd(8) Process: 17077 ExecStartPre=/usr/bin/install -m 755 -o mysql -g root -d /var/run/mysqld (code=exited, status=0/SUCCESS) Process: 17078 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
Zu diesem Zeitpunkt wird in der KeyHelp-Benutzeroberfläche Ihres Browsers ein Fehler 500 angezeigt. Das liegt natürlich daran, dass SQL-Benutzerpasswörter festgelegt werden müssen und KeyHelp auch die bisherigen Passwörter kennen muss.
Starten Sie eine SQL-Sitzung über SSH.
mysql
Kopieren Sie die gespeicherten SQL-Befehle aus Kapitel 1.0.1 (Aktueller Server) und fügen Sie diese vollständig in die Sitzung ein und führen Sie sie aus.
Wenden Sie Änderungen auf Benutzerkonten an.
flush privileges;
Abmelden/Verbindung zum SQL Server herstellen.
exit;
Kopieren Sie die KeyHelp-Konfigurationsdatei und überschreiben Sie die vorhandene.
cp /restore/etc/keyhelp/config/config.json /etc/keyhelp/config/config.json
Endlich funktioniert der Aufruf der KeyHelp-Benutzeroberfläche wieder. Als Anmeldedaten können Daten der vorherigen Instanz verwendet werden.
Nach der Wiederherstellung der Datenbank werden die Vorgänge in Konfiguration -> Backup nicht aktualisiert. Rufen Sie daher die Repository-Verwaltung auf und bearbeiten Sie das vorhandene Repository. Ändern Sie in diesem Fall nichts an den Einstellungen und klicken Sie auf „Speichern“. In diesem Zusammenhang wird die Integritätsprüfung erneut durchgeführt. Daher werden auch die Daten im Feld „Backup“ in der Datenbank aktualisiert.
Benutzerdaten wiederherstellen
Wählen Sie dazu in der KeyHelp-Benutzeroberfläche das Menü „Einstellungen -> Sicherung -> Sicherung wiederherstellen“. Nun kann ein beliebiges Element (E-Mail-Konten, Datenbanken, Benutzerverzeichnisse usw.) ausgewählt werden.
Unter keinen Umständen sollten Datenbankstandards (keyhelp, mysql, phpmyadmin, rainloop, Roundcube und snappymail) und die Verzeichnisse /etc/ und /root/ sind ausgewählt, überhaupt nicht.
Normalerweise wird das Verzeichnis „/home/keyhelp“ nicht benötigt. Anders verhält es sich bei der Verwendung von „White Label“. Sollte dies der Fall sein, muss auch das Verzeichnis „/home/keyhelp/www/keyhelp.white_label“ wiederhergestellt werden.
Mit „Speichern“ wird erneut ein neuer Vorgang erstellt. Abhängig von der Anzahl der Elemente und ihrer Größe kann die Wiederherstellung einige Zeit dauern.
Nehmen Sie vorhandene SSL-Zertifikate
Sichern Sie das Verzeichnis „/etc/ssl/keyhelp“.
mv /etc/ssl/keyhelp /etc/ssl/keyhelp.$(date '+%Y-%m-%d_%H-%M-%S')
Kopieren Sie „/restore/etc/ssl/keyhelp/“ in das Verzeichnis „/etc/ssl/“.
cp -av /restore/etc/ssl/keyhelp/ /etc/ssl/
Letzter Job
Schreiben Sie die KeyHelp-Konfiguration neu
Melden Sie sich in der SSH-Sitzung an und rufen Sie den Befehl „keyhelp-toolbox“ auf. Geben Sie den ersten Eintrag im Menü ein und bestätigen Sie ihn durch Drücken der Taste „1“.
Bestätigen Sie die Sicherheitsabfrage mit dem Buchstaben „C“.
Dies kann wie die Datenwiederherstellung einige Zeit dauern. Wenn das Ende der Aufgabe erreicht ist, wird eine grüne Abschlussmeldung angezeigt.
perfekt Beenden Sie die Toolbox und starten Sie abschließend den Server neu.
reboot
Löschen Sie alle Sicherungsdateien
Sobald der Umzug abgeschlossen ist, alles reibungslos verläuft und die Kinderkrankheiten behoben sind, vergessen Sie nicht, die Backups verschiedener Verzeichnisse und Dateien zu löschen.
ll /etc/ssl/ | grep "keyhelp." drwxr-xr-x 5 root root 4096 Feb 18 2023 keyhelp.2023-09-26_21-05-48/
ll / | grep "restore" drwxr-xr-x 3 root root 4096 Sep 26 20:17 restore/
ll /etc/ | grep "passwd\|shadow\|group.\|gshadow." -rw-r--r-- 1 root root 1379 Sep 26 20:06 group.2023-09-26_20-06-11 -rw-r--r-- 1 root root 1262 Sep 26 20:06 group.2023-09-26_20-06-55 -rw-r--r-- 1 root root 1379 Sep 26 21:17 group.2023-09-26_21-17-08 -rw-r----- 1 root root 1141 Sep 26 21:17 gshadow.2023-09-26_21-17-12 -rw-r--r-- 1 root root 3042 Sep 26 21:17 passwd.2023-09-26_21-17-01 -rw-r----- 1 root root 3123 Sep 26 21:17 shadow.2023-09-26_21-17-05
ll /etc/keyhelp/config/ | grep "config" -rw-r--r-- 1 root root 420 Sep 26 17:23 config.json.2023-09-26_17-23-51 -rw-r--r-- 1 root root 350 Sep 26 17:08 config.json.bak2
Viel Spaß beim Ausprobieren. 🙂