403 Forbidden beim MySQL-Backup — Ursachen und Lösungen
Du rufst dein Backup-Tool im Browser auf und bekommst nur eine weiße Seite mit „403 Forbidden“. Kein Login-Screen, keine Fehlermeldung, einfach Zugang verweigert. Das Problem tritt besonders bei webbasierten Tools wie MySQLDumper auf, die per HTTP erreichbar sind. Die Ursache liegt fast immer auf Webserver-Ebene — und es gibt mehrere Kandidaten.
Schnell-Diagnose: Apache Error Log prüfen
Bevor du anfängst zu raten, schau ins Error Log. Dort steht in 90% der Fälle die exakte Ursache:
# Apache Error Log finden und die letzten 50 Zeilen anzeigen
tail -50 /var/log/apache2/error.log
# Oder bei cPanel/Plesk:
tail -50 /var/log/httpd/error_log
# Nach deiner Domain filtern:
grep "meinedomain.de" /var/log/apache2/error.log | tail -20
Je nach Ursache findest du dort Einträge wie client denied by server configuration, ModSecurity: Access denied oder open_basedir restriction. Das sagt dir sofort, wo du ansetzen musst.
Ursache 1: Falsche Datei- und Verzeichnisrechte
Die häufigste Ursache, besonders nach einem Upload per FTP. Wenn der Webserver die Dateien nicht lesen darf, kommt ein 403.
Korrekte Berechtigungen setzen
# Verzeichnisse: 755 (rwxr-xr-x)
find /var/www/html/mysqldumper/ -type d -exec chmod 755 {} \;
# Dateien: 644 (rw-r--r--)
find /var/www/html/mysqldumper/ -type f -exec chmod 644 {} \;
# Eigentümer auf den Webserver-User setzen
chown -R www-data:www-data /var/www/html/mysqldumper/
Bei manchen Hosting-Providern heißt der Webserver-User nicht www-data, sondern apache, nginx oder dein cPanel-Username. So findest du den richtigen:
# Apache
ps aux | grep apache
# oder
ps aux | grep httpd
Spezialfall: work-Verzeichnis
MySQLDumper braucht Schreibrechte im work/-Verzeichnis für Backup-Dateien und temporäre Daten:
chmod 775 /var/www/html/mysqldumper/work/
chmod 775 /var/www/html/mysqldumper/work/backup/
chmod 775 /var/www/html/mysqldumper/work/log/
Ursache 2: mod_security blockiert Anfragen
mod_security ist eine Web Application Firewall, die auf vielen Shared-Hosting-Servern aktiv ist. Sie erkennt SQL-Befehle in HTTP-Anfragen — und genau das sendet ein Backup-Tool. Die Firewall sieht DROP TABLE, SELECT * FROM und ähnliche Patterns und blockiert den Zugriff.
Im Error Log erkennbar an:
[error] ModSecurity: Access denied with code 403 (phase 2).
Pattern match "(?:select|union|insert|update|delete|drop)" ...
Lösung: mod_security für das Backup-Verzeichnis deaktivieren
Erstelle oder bearbeite die .htaccess im MySQLDumper-Verzeichnis:
# mod_security für dieses Verzeichnis deaktivieren
<IfModule mod_security2.c>
SecRuleEngine Off
</IfModule>
# Ältere mod_security-Versionen
<IfModule mod_security.c>
SecFilterEngine Off
SecFilterScanPOST Off
</IfModule>
Hinweis: Auf manchen Shared-Hosting-Servern darfst du mod_security nicht per .htaccess deaktivieren. Dann bleibt nur der Weg über den Hoster-Support — oder du nutzt die Kommandozeile statt des Web-Interfaces.
Ursache 3: .htaccess-Regeln blockieren den Zugriff
Eine bestehende .htaccess im übergeordneten Verzeichnis kann den Zugriff auf Unterverzeichnisse blockieren — mehr dazu unter .htaccess-Konflikte bei Backup-Tools. Typische Übeltäter:
# Diese Regel blockiert ALLE PHP-Dateien in Unterverzeichnissen
<FilesMatch "\.php$">
Order Deny,Allow
Deny from all
</FilesMatch>
# Oder IP-basierte Beschränkungen
Order Deny,Allow
Deny from all
Allow from 192.168.1.0/24
Lösung: Eigene .htaccess im Backup-Verzeichnis
# /mysqldumper/.htaccess
# PHP-Ausführung erlauben
<FilesMatch "\.php$">
Order Allow,Deny
Allow from all
</FilesMatch>
# Optional: Zugriff auf bestimmte IPs beschränken (empfohlen!)
Order Deny,Allow
Deny from all
Allow from 123.456.78.90
Wenn du nicht weißt, welche .htaccess-Datei das Problem verursacht, teste von oben nach unten:
# Temporär alle .htaccess im Pfad umbenennen
mv /var/www/html/.htaccess /var/www/html/.htaccess.bak
# Testen — funktioniert es jetzt?
# Dann schrittweise wieder aktivieren
Ursache 4: Suhosin blockiert lange Requests
Suhosin ist ein PHP-Sicherheitsmodul, das auf älteren Servern (PHP 5.x) verbreitet ist. Es limitiert unter anderem die maximale Länge von GET/POST-Parametern und die Anzahl der Variablen. Backup-Tools senden oft große Datenmengen — Suhosin schneidet das ab und der Request scheitert.
Typische Suhosin-Meldung im Log:
ALERT - configured POST variable limit exceeded
ALERT - configured request variable limit exceeded
Lösung: Suhosin-Limits erhöhen
In der php.ini oder einer .user.ini im Backup-Verzeichnis:
suhosin.post.max_vars = 4096
suhosin.request.max_vars = 4096
suhosin.get.max_value_length = 1024
suhosin.post.max_value_length = 1000000
suhosin.request.max_value_length = 1000000
Falls du keinen Zugriff auf die php.ini hast, versuche es per .htaccess:
php_value suhosin.post.max_vars 4096
php_value suhosin.request.max_vars 4096
php_value suhosin.get.max_value_length 1024
Ursache 5: PHP open_basedir Restriction
Die open_basedir-Direktive beschränkt, auf welche Verzeichnisse PHP zugreifen darf. Wenn dein Backup-Tool in einem Verzeichnis liegt, das nicht in open_basedir enthalten ist, bekommst du einen 403 oder einen leeren Screen.
Prüfen, ob open_basedir gesetzt ist:
<?php
echo ini_get('open_basedir');
?>
Lösung (wenn du Zugriff auf die vHost-Konfiguration hast):
# In der Apache vHost-Konfiguration:
<Directory /var/www/html/mysqldumper>
php_admin_value open_basedir "/var/www/html/:/tmp/"
</Directory>
Auf Shared Hosting kannst du open_basedir meistens nicht selbst ändern. Stelle sicher, dass das Backup-Tool im gleichen Verzeichnisbaum liegt wie deine Website.
Ursache 6: DirectoryIndex fehlt
Wenn der Webserver keine Index-Datei findet und Directory Listing deaktiviert ist, kommt ebenfalls ein 403:
# Prüfen: Existiert die Index-Datei?
ls -la /var/www/html/mysqldumper/index.php
# Lösung in .htaccess:
DirectoryIndex index.php main.php
Diagnose-Checkliste
| Symptom im Error Log | Ursache | Lösung |
|---|---|---|
client denied by server configuration |
.htaccess / vHost blockiert | .htaccess anpassen oder eigene im Unterverzeichnis anlegen |
ModSecurity: Access denied |
mod_security WAF | SecRuleEngine Off im Backup-Verzeichnis |
Permission denied |
Dateirechte | chmod 755/644, chown |
open_basedir restriction |
PHP-Beschränkung | open_basedir anpassen oder Verzeichnis verschieben |
configured POST variable limit exceeded |
Suhosin | Suhosin-Limits erhöhen |
| Kein Eintrag im Log | Meist Dateirechte oder fehlende Index-Datei | Rechte und DirectoryIndex prüfen |
Sicherheitshinweis
Ein Backup-Tool mit Web-Interface ist ein sensibles Stück Software. Es hat vollen Zugriff auf deine Datenbank. Auch wenn der 403-Fehler nervt — die Zugriffsbeschränkungen haben ihren Sinn. Wenn du die Sicherheitsmaßnahmen lockerst, schütze das Tool auf andere Weise:
- IP-Beschränkung per .htaccess (nur deine IP erlauben)
- HTTP-Basic-Auth als zusätzliche Schicht
- Backup-Verzeichnis nach der Nutzung umbenennen oder sperren
- Regelmäßig prüfen, ob das Tool noch erreichbar ist
Mehr zur sicheren Ersteinrichtung findest du im MySQLDumper Installations-Guide.