Q&A Laufend: Ubuntu Migration – Legacy Stack PHP 7.2 / MySQL 5
Kategorie: Q&A · Channel: #laufend
Format: Bühnenspiel – Admin · Angreifer · Kunde
Kontext: Ubuntu < 20.04 EOL, Anwendung läuft auf PHP 7.2 + MySQL 5.x
Die Situation
Problem: Ubuntu 18.04 LTS läuft aus (EOL April 2023)
Ubuntu 20.04 LTS läuft aus (EOL April 2025)
Wunsch: Upgrade auf 24.04 LTS
Blockade: Anwendung erfordert PHP 7.2 + MySQL 5.7
PHP 7.2 EOL seit November 2020
MySQL 5.7 EOL seit Oktober 2023
Kompromiss: Ubuntu 22.04 LTS als Zwischenziel
Support bis April 2027
👨💻 Admin-Perspektive: Migration planen und durchführen
Schritt 1: Ist-Zustand dokumentieren
# Aktuelles System erfassen – VOR der Migration
lsb_release -a # Ubuntu Version
uname -r # Kernel
php --version # PHP Version
mysql --version # MySQL Version
apache2 -v || nginx -v # Webserver
# Installierte Pakete sichern
dpkg --get-selections > /root/packages_before.txt
# Laufende Dienste
systemctl list-units --state=running --type=service > /root/services_before.txt
# Offene Ports
ss -tlnp > /root/ports_before.txt
# Konfigurationen sichern
tar czf /root/config_backup_$(date +%Y%m%d).tar.gz \
/etc/apache2 /etc/nginx /etc/php /etc/mysql \
/etc/ssh /etc/cron* /etc/iptables
# Datenbank sichern
mysqldump --all-databases --single-transaction \
> /root/db_backup_$(date +%Y%m%d).sql
Schritt 2: PHP 7.2 auf Ubuntu 22.04 – das Problem
Ubuntu 22.04 liefert standardmäßig:
PHP 8.1
PHP 7.2 ist seit Nov 2020 EOL → kein offizieller Support mehr.
Lösung: Ondřej Surý PPA (inoffiziell aber weit verbreitet)
oder: eigene PHP-Kompilation (nicht empfohlen)
# PHP 7.2 auf Ubuntu 22.04 via Ondřej Surý PPA:
apt install software-properties-common
add-apt-repository ppa:ondrej/php
apt update
# PHP 7.2 installieren
apt install php7.2 php7.2-fpm php7.2-mysql php7.2-xml \
php7.2-mbstring php7.2-curl php7.2-zip \
php7.2-gd php7.2-bcmath php7.2-intl
# Welche PHP-Version ist aktiv?
php --version
update-alternatives --list php
# Zwischen PHP-Versionen wechseln:
update-alternatives --set php /usr/bin/php7.2
# Apache: PHP-Modul wechseln
a2dismod php8.1
a2enmod php7.2
systemctl restart apache2
# PHP-FPM (nginx):
systemctl stop php8.1-fpm
systemctl start php7.2-fpm
systemctl enable php7.2-fpm
Schritt 3: MySQL 5.7 auf Ubuntu 22.04 – das Problem
Ubuntu 22.04 liefert standardmäßig:
MySQL 8.0
MySQL 5.7 ist seit Oktober 2023 EOL.
Lösung A: MySQL 5.7 via offiziellem MySQL APT Repository
Lösung B: Percona Server 5.7 (kompatibel, länger supported)
Lösung C: MariaDB 10.x (teilweise kompatibel, prüfen!)
# Option A: MySQL 5.7 via MySQL APT Repository
# https://dev.mysql.com/downloads/repo/apt/
wget https://dev.mysql.com/get/mysql-apt-config_0.8.29-1_all.deb
dpkg -i mysql-apt-config_0.8.29-1_all.deb
# → im Dialog: MySQL 5.7 Server auswählen
apt update
apt install mysql-server-5.7
# Option B: Percona Server 5.7 (empfohlen für Langzeit)
wget https://repo.percona.com/apt/percona-release_latest.$(lsb_release -sc)_all.deb
dpkg -i percona-release_latest.jammy_all.deb
percona-release setup ps57
apt install percona-server-server-5.7
# MySQL-Version prüfen
mysql --version
mysql -e "SELECT VERSION();"
Schritt 4: In-Place Upgrade vs. Neuinstallation
Option A: In-Place Upgrade (do-release-upgrade)
─────────────────────────────────────────────
Vorteil: alle Configs bleiben, weniger Arbeit
Nachteil: PPAs werden deaktiviert, müssen neu konfiguriert werden
PHP/MySQL könnten auf neue Version gezogen werden
Risiko: kaputte Abhängigkeiten
# Vorgehen:
do-release-upgrade -d # Entwicklungsversion
do-release-upgrade # stabile Version
# ⚠️ VOR dem Upgrade:
# 1. Vollständiges Snapshot/Backup
# 2. PHP/MySQL PPAs deaktivieren
# 3. Nach Upgrade: PPAs neu einrichten
Option B: Neuinstallation (empfohlen für Legacy-Stack)
──────────────────────────────────────────────────────
Vorteil: saubere Basis, keine alten Abhängigkeiten
PHP/MySQL gezielt installierbar
Nachteil: mehr Arbeit, alle Configs neu einrichten
# Ablauf:
# 1. Ubuntu 22.04 fresh install
# 2. PPAs einrichten (Ondřej PHP + MySQL/Percona)
# 3. PHP 7.2 + MySQL 5.7 installieren
# 4. Konfigurationen übertragen
# 5. Datenbank importieren
# 6. Anwendung testen
# 7. DNS/IP umschalten
Schritt 5: Migrations-Test vor Go-Live
# Anwendung auf neuem Server testen:
# /etc/hosts auf Test-Client:
echo "10.0.1.51 www.kunde.example.com" >> /etc/hosts
# PHP-Kompatibilitätsprüfung:
php -l /var/www/html/index.php # Syntax-Check
php -l /var/www/html/*.php
# PHP Compatibility Checker (für gesamtes Projekt):
composer require --dev phpcompatinfo/phpcompatinfo
# oder:
phpcs --standard=PHPCompatibility \
--runtime-set testVersion 7.2 \
/var/www/html/
# MySQL: Datenbank importieren und prüfen
mysql -u root -p shopdb < /root/db_backup.sql
mysql -e "SHOW TABLES;" shopdb
mysql -e "SELECT COUNT(*) FROM orders;" shopdb
# Apache/nginx Error-Log beobachten beim ersten Test
tail -f /var/log/apache2/error.log
tail -f /var/log/nginx/error.log
Schritt 6: Wartungsfenster und Go-Live
# 1. Wartungsfenster ankündigen (mind. 48h vorher!)
# 2. Wartungsseite aktivieren
# 3. Letztes Datenbank-Backup kurz vor Umschaltung
mysqldump --all-databases --single-transaction \
> /root/db_final_$(date +%Y%m%d_%H%M).sql
# 4. Neue TTL für DNS war schon auf 300 gesenkt?
dig @10.0.0.53 www.kunde.example.com | grep TTL
# 5. DNS umschalten
# In Zonefile: A-Record auf neue IP
rndc reload example.com
# 6. Warten bis TTL abläuft (max 300s)
sleep 300
# 7. Testen
curl -I https://www.kunde.example.com
# 8. Alten Server noch 7 Tage bereithalten!
🦹 Angreifer-Perspektive: Was bietet Legacy-Stack?
PHP 7.2 – bekannte Angriffsvektoren
PHP 7.2 EOL seit November 2020:
→ Keine Sicherheits-Patches mehr
→ Bekannte CVEs ohne Fix:
Relevante CVE-Kategorien:
- Type Confusion Vulnerabilities
- Buffer Overflow in bestimmten Extensions
- Deserializierungs-Schwachstellen
Angriffspunkt:
curl -X POST https://www.ziel.de/upload.php \
-F "file=@shell.php;type=image/jpeg"
→ wenn Upload-Validierung auf PHP 7.2 Bugs setzt: Shell hochgeladen
MySQL 5.7 – bekannte Angriffsvektoren
MySQL 5.7 EOL seit Oktober 2023:
→ CVE-2023-22084: Privilege Escalation
→ CVE-2023-22079: DoS via SQL Injection Variante
Wenn MySQL von außen erreichbar (Port 3306 offen!):
mysql -h ziel.de -u root -p
→ Passwort-Brute-Force gegen bekannte Standard-Passwörter
Wenn SQL-Injection in PHP-Anwendung:
'; DROP TABLE users; --
' UNION SELECT username,password FROM admin_users --
Was der Angreifer zuerst prüft
# PHP-Version aus HTTP-Header lesen:
curl -I https://www.ziel.de | grep X-Powered-By
# X-Powered-By: PHP/7.2.34 ← sofort sichtbar!
# MySQL-Version aus Fehlermeldungen:
# Wenn Debug-Modus an: Fehlermeldungen zeigen MySQL-Version
# Empfehlung für Admin:
# X-Powered-By Header deaktivieren!
# /etc/php/7.2/apache2/php.ini:
# expose_php = Off
👔 Kunden-Perspektive: Was bedeutet das für mich?
Situation: Anwendung läuft auf PHP 7.2 / MySQL 5.7
Entwickler sagt: "Upgrade zu teuer, läuft doch"
Risiken die der Kunde tragen muss:
→ Keine Sicherheitspatches für PHP und MySQL
→ Bei Datenpanne: DSGVO-Haftung bleibt beim Betreiber
→ Versicherungen schließen EOL-Software oft aus
→ PCI-DSS (Kreditkarten): EOL-Software = Verstoß
Was Admin dem Kunden klar machen muss:
"Wir können den Server betreiben, aber:
PHP 7.2 und MySQL 5.7 erhalten keine Sicherheitsupdates mehr.
Bei einem Sicherheitsvorfall haftet der Auftraggeber.
Wir empfehlen dringend eine Anwendungs-Migration zu PHP 8.x."
Migration dokumentieren
E-Mail an Kunden (zur Dokumentation):
Datum: [Datum]
Betreff: Sicherheitshinweis – EOL Software PHP 7.2 / MySQL 5.7
Sehr geehrte Damen und Herren,
wir betreiben Ihre Anwendung derzeit auf:
- PHP 7.2 (End of Life seit 30.11.2020)
- MySQL 5.7 (End of Life seit 31.10.2023)
Diese Versionen erhalten keine Sicherheitsupdates mehr.
[...]
Wir empfehlen dringend eine Migration auf aktuelle Versionen.
Bis dahin betreiben wir die Infrastruktur auf Ubuntu 22.04 LTS
als Kompromisslösung (Support bis April 2027).
Mit freundlichen Grüßen
🎯 Erkenntnis – Drei Perspektiven zusammen
| Perspektive |
Kernaussage |
| 👨💻 Admin |
Ubuntu 22.04 + Ondřej PPA = PHP 7.2 machbar – aber nur als Zwischenlösung |
| 🦹 Angreifer |
X-Powered-By: PHP/7.2 im Header = Einladung zu bekannten CVEs |
| 👔 Kunde |
EOL-Stack = Haftungsrisiko – schriftlich dokumentieren! |
🗺️ Migrationspfad – Gesamtübersicht
JETZT: Ubuntu 18.04/20.04 + PHP 7.2 + MySQL 5.7
→ EOL, unsicher, läuft aber
ZWISCHENZIEL: Ubuntu 22.04 LTS + PHP 7.2 (PPA) + MySQL 5.7 (Percona)
→ Support bis April 2027
→ gleiche Anwendung ohne Code-Änderung
→ Zeit kaufen für Schritt 3
ZIEL: Ubuntu 24.04 LTS + PHP 8.2/8.3 + MySQL 8.0
→ Anwendungs-Migration nötig (PHP 8 Breaking Changes!)
→ Support bis April 2029
PHP 7 → PHP 8 Breaking Changes (Vorschau für Entwickler)
Wichtigste Breaking Changes PHP 7.x → 8.x:
1. str_contains(), str_starts_with(), str_ends_with() → neu in 8.0
2. match statt switch (strikterer Typvergleich)
3. Named Arguments → neu in 8.0
4. Union Types → neu in 8.0
5. Nullsafe Operator ?-> → neu in 8.0
6. Deprecated: create_function(), each()
7. Error Handling: viele Warnings werden zu Exceptions
Test-Tool:
composer require --dev rector/rector
vendor/bin/rector process src --dry-run --set php80
📋 Schnellreferenz: Legacy Migration – Einzeiler
# Ist-Zustand
php --version && mysql --version && lsb_release -a
# PHP 7.2 auf 22.04
add-apt-repository ppa:ondrej/php && apt update
apt install php7.2 php7.2-fpm php7.2-mysql php7.2-xml php7.2-mbstring
# PHP-Version wechseln
update-alternatives --set php /usr/bin/php7.2
# MySQL 5.7 via Percona
percona-release setup ps57 && apt install percona-server-server-5.7
# Backup vor Migration
mysqldump --all-databases --single-transaction > /root/db_$(date +%Y%m%d).sql
tar czf /root/configs_$(date +%Y%m%d).tar.gz /etc/apache2 /etc/nginx /etc/php /etc/mysql
# X-Powered-By verstecken
echo "expose_php = Off" >> /etc/php/7.2/apache2/php.ini