403 Forbidden beim MySQL-Backup — Ursachen und Lösungen

403 Forbidden Fehler beim Datenbank-Backup beheben

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.