Der Public Folder in Joomla 5 ist kein nice-to-have. Er ist die logische Konsequenz aus zwei Jahrzehnten Erfahrung in der Webentwicklung. Und trotzdem nutzt ihn fast niemand.
Aktuell sehen wir wieder eine Welle gehackter Joomla-Seiten. Das Muster ist erschreckend einfach: Sicherheitslücken in Erweiterungen erlauben es Angreifern, Dateien auf den Server zu laden. Und weil die komplette Joomla-Installation im öffentlich erreichbaren Bereich (Webroot) liegt, können diese Dateien direkt ausgeführt werden. Shell-Skripte, Backdoors, der ganze Spaß.
Bisher schließen viele Ihre Haustür sorgfältig ab. Sie installieren Software-Firewalls, WAFs und Sicherheitsplugins und glauben, damit sicher zu sein. Aber die Terrassentür bleibt offen und niemand denkt daran.
Mit Joomla 5 ist ein Feature in den Core gekommen, das dieses Problem an der Wurzel angeht: der Public Folder.
Das Problem: Alle Joomla-Dateien sind öffentlich erreichbar
Bei einer klassischen Joomla-Installation sieht die Struktur vereinfacht so aus:
meine-website/
├── administrator/
├── components/
├── images/
├── libraries/
├── modules/
├── plugins/
├── templates/
├── vendor/
├── configuration.php
└── index.php
Die Domain zeigt direkt auf dieses Verzeichnis. Das bedeutet: Jede Datei, die irgendwie hochgeladen wird, liegt sofort im öffentlich erreichbaren Bereich. Ein Angreifer, der eine Lücke in einer Erweiterung ausnutzt, kann Code ausführen. Sofort. Ohne Umwege.
Das war viele Jahre lang normal. Heute wissen wir besser.
Die Lösung: Nur das Nötigste öffentlich machen.
Der Public Folder trennt die Anwendung vom öffentlich erreichbaren Bereich. Er wird innerhalb der Joomla-Installation angelegt – die Domain zeigt nur noch auf diesen einen Ordner. Alle kritischen Dateien liegen eine Ebene tiefer und sind so nicht mehr per Browser erreichbar:
meine-website/
├── public/ ← Domain zeigt hierhin (nur dieser Ordner ist öffentlich)
│ ├── index.php
│ ├── media/
│ ├── images/
│ └── .htaccess
│
├── administrator/ ← Nicht öffentlich erreichbar
├── components/ ← Nicht öffentlich erreichbar
├── libraries/ ← Nicht öffentlich erreichbar
├── modules/ ← Nicht öffentlich erreichbar
├── plugins/ ← Nicht öffentlich erreichbar
├── templates/ ← Nicht öffentlich erreichbar
├── vendor/ ← Nicht öffentlich erreichbar
└── configuration.php ← Nicht öffentlich erreichbar
Der Besucher sieht nur noch das, was im public-Ordner liegt. Wenn ein Angreifer über eine Sicherheitslücke Dateien hochlädt – sei es in tmp, in eine Komponente oder einen Plugin-Ordner – können diese Dateien nicht mehr direkt über den Browser aufgerufen und ausgeführt werden. Sie liegen außerhalb des öffentlich erreichbaren Bereichs.
Das ist kein theoretisches Problem. Das ist der Unterschied zwischen "gehackt" und "Angriff gescheitert".
Warum hilft das gegen die aktuelle Angriffswelle?
Die aktuellen Angriffe laufen typischerweise so ab:
- Sicherheitslücke in Erweiterung ausnutzen
- Datei auf den Server laden (meist PHP-Shell)
- Datei über Browser aufrufen und ausführen
- Vollzugriff auf die Website
Mit Public Folder scheitert der Angriff bei Schritt 3. Die hochgeladene Datei liegt zwar auf dem Server, aber nicht im öffentlich erreichbaren Bereich. Sie kann nicht direkt aufgerufen werden, nicht ausgeführt werden, keinen Schaden anrichten. Harmlos, wirkungslos.
"Aber ich habe doch eine Firewall"
Klar. Und die ist auch sinnvoll. Aber sie ist ein Reaktions-Mechanismus, keine Prävention.
Eine Firewall erkennt Angriffsmuster. Sie prüft, ob ein Request verdächtige Muster enthält – bekannte SQL-Injection-Strings, typische XSS-Payloads, Dateiuploads mit gefährlichen Endungen. Wenn sie ein Muster erkennt, blockt sie den Request. Das funktioniert, solange das Muster bekannt ist.
Der aktuelle Angriff auf Joomla-Seiten nutzt aber oft unbekannte oder frische Sicherheitslücken in Erweiterungen. Die Firewall hat noch keine Signatur dafür. Der Request sieht harmlos aus. Er wird durchgelassen. Die Datei wird hochgeladen. Die Firewall reagiert nicht – weil sie nicht weiß, dass sie reagieren müsste. Und wenn ein Angreifer erstmal drin ist, kann er die Firewall oft einfach deaktivieren. Dann ist der Schutz weg, das Loch ist wieder offen.
Ein Public Folder verhindert das Problem technisch. Egal wie unbekannt die Lücke ist, egal was der Angreifer hochlädt – die Datei liegt außerhalb des öffentlich erreichbaren Bereichs. Sie kann nicht aufgerufen werden. Sie kann nicht ausgeführt werden. Es gibt kein Muster, das die Firewall erkennen müsste. Die Architektur selbst macht den Angriff unmöglich. Er schließt das Loch – nicht mit einem Pflaster, sondern mit einer Wand.
Zusätzlich: Firewalls müssen gewartet werden. Regeln müssen aktualisiert werden. Signaturen müssen gepflegt werden. Ein Public Folder muss nichts davon. Er funktioniert, ohne dass du ihn anfasst. Er funktioniert, während du schläfst.
So geht's: Public Folder für deine Joomla-Installation
Direkt vorweg das größte Problem: Wir brauchen die richtige Hosting-Umgebung.
Das klingt dramatischer als es ist. Gemeint ist: Du brauchst einen Hoster, bei dem du einstellen kannst, auf welchen Ordner deine Domain zeigt. Außerdem brauchst du SSH-Zugang (wenn im Hosting-Paket 'Shell-Zugang' oder 'SSH' erwähnt ist) und Symlinks müssen funktionieren. Das ist bei modernen Hostern Standard, aber nicht überall.
Wenn dein Hoster dir das aktuell nicht anbietet, frag doch nach ob es das in einem anderen Tarif gibt. Falls nicht, wird es vielleicht Zeit, sich nach einem neuen Hoster umzuschauen. Das ist kein Nachteil des Public Folders, sondern ein Nachteil deines Hosters.
Frische Installation mit Public Folder
Joomla kannst du nicht nur über den Browser installieren – das geht auch ganz einfach über die Kommandozeile (SSH). Statt durch ein Webinterface zu klicken, tippst du ein paar Befehle ein und Joomla steht. Das ist schneller, reproduzierbarer, lässt sich automatisieren – und erlaubt uns die Funktion des Public Ordners zu nutzen.
Falls du nicht weißt, wie du dich mit deinem Server verbindest: Dein Hoster hat dir bei der Buchung Zugangsdaten geschickt – meist IP-Adresse, Benutzername und Passwort oder einen SSH-Schlüssel. Damit verbindest du dich über ein Terminal-Programm wie PuTTY (Windows), das Terminal (Linux) oder das Terminal (Mac) mit deinem Server.
Lade die Joomla-Installationsdateien auf deinen Server (z.B. per FTP) und wechsle in das Verzeichnis:
cd /pfad/zu/deiner/joomla-installation
Damit wird Joomla direkt mit der Public-Folder-Struktur installiert. Der Ordner public enthält dann nur die Dateien, die öffentlich erreichbar sein müssen. Du musst nun noch das Stammverzeichnis der Domain auf den public-Ordner umstellen. Das machst du meistens in deinem Hosting-Panel bei der Domain-Konfiguration.
Kurzer Einwurf zum PHP-Befehl
Wichtig: Prüfe vorher, welche PHP-Version Joomla nutzt. Auf manchen Hostern ist die Standard-PHP-Version älter als die, die Joomla braucht:
php -v
Wenn das eine zu alte Version anzeigt, haben manche Hoster auch spezielle Aufrufe – in der Regel findest du das in deren Dokumentation. Merke dir den korrekten Befehl für den Installer.
php installation/joomla.php install
Bestehende Joomla-Installation? Kein Problem.
Der größte Irrtum rund um den Public Folder ist, dass man dafür Joomla neu installieren müsste. Das ist nicht der Fall. Joomla bringt auch hier einen Befehl für die Kommandozeile mit, der die benötigte Struktur automatisch erzeugen kann. Du kannst eine bestehende Installation also nachträglich umstellen.
Schritt-für-Schritt-Anleitung
1. Auf den Server verbinden
Per SSH einloggen; Backup nicht vergessen – Dateien + Datenbank. Nur für den Fall.
Wichtig: Prüfe vorher mit php -v, ob die richtige PHP-Version aktiv ist. Falls nicht, hat dein Hoster meist einen speziellen Aufruf – in deren Dokumentation steht das.
Dann rein in das Joomla-Verzeichnis:
cd /pfad/zu/deiner/joomla-installation
2. Public Folder erzeugen
Nun führst du den Joomla-CLI-Befehl aus:
php cli/joomla.php site:create-public-folder
Joomla erzeugt damit automatisch die benötigte Struktur für den Public Folder. Du wirst gefragt, wie der Ordner heißen soll – ich empfehle public oder web, aber das ist Geschmackssache.
Was passiert hier im Hintergrund? Joomla kopiert die notwendigen Dateien (index.php, media/, images/, .htaccess etc.) in den neuen Ordner und richtet Symlinks, Verknüpfungen auf Deutsch, ein, damit alles weiterhin funktioniert. Keine Magie, nur saubere Struktur.
3. Domain umstellen
Jetzt kommt der entscheidende Schritt. Das Stammverzeichnis der Domain darf nicht länger auf das Joomla-Hauptverzeichnis zeigen. Stattdessen muss der neu erzeugte Public Folder als Ziel konfiguriert werden.
Suche nach "Stammverzeichnis" oder "Webroot" in den Domain-Einstellungen und ändere den Pfad auf den gerade erstellten public-Ordner.
Das Prinzip bleibt immer dasselbe: Die Domain zeigt auf den Public Folder und nicht mehr auf die eigentliche Joomla-Installation.
Herzlichen Glückwunsch, das war's schon (fast)
Normalerweise läuft alles direkt weiter. Trotzdem solltest du Frontend und Backend kurz prüfen ob alles passt.
Was, wenn Bilder/CSS/JS fehlen?
Das passiert oft bei Drittanbieter-Erweiterungen, die ihre Assets nicht sauber im media-Ordner ablegen. Stattdessen verlinken sie direkt aus ihrem Plugin- oder Komponenten-Ordner – der jetzt nicht mehr öffentlich erreichbar ist.
Die sauberste Lösung: Den Entwickler kontaktieren und ihn bitten, die Erweiterung Public-Folder-kompatibel zu machen. Die schnellste Lösung: Selbst die Pfade in der Erweiterung anpassen und die Assets in den media-Ordner verschieben.
Wie gehts nun weiter
Der Einsatz des Public-Ordners ist ein wichtiger, aber nur erster Schritt zur Webseitensicherheit. Auf meinem Blog habe ich eine ausführliche ToDo-Liste zur Joomla-Sicherheit erstellt, die weitere wichtige Maßnahmen zeigt.
Moderne PHP-Anwendungen trennen seit Jahren zwischen Anwendung und öffentlichem Bereich. Joomla bietet diese Möglichkeit mittlerweile ebenfalls. Wer sie nicht nutzt, lässt die Terrassentür offen – und wundert sich dann, dass eingebrochen wird.