PrestaShop Dateiberechtigungen: Die richtige Einrichtung
Linux-Dateiberechtigungen verstehen
Jede Datei und jedes Verzeichnis auf einem Linux-Server verfuegt ueber drei Berechtigungssaetze: einen fuer den Eigentuemer, einen fuer die Gruppe und einen fuer Andere (alle uebrigen). Jeder Satz steuert drei Aktionen: Lesen (r), Schreiben (w) und Ausfuehren (x). Diese Berechtigungen werden numerisch in Oktalschreibweise dargestellt, wobei Lesen gleich 4, Schreiben gleich 2 und Ausfuehren gleich 1 ist. Die Werte werden fuer jeden Satz addiert, was eine dreistellige Zahl wie 755 oder 644 ergibt.
Beispielsweise bedeutet eine Berechtigung von 755, dass der Eigentuemer lesen, schreiben und ausfuehren kann (7 = 4+2+1), waehrend die Gruppe und Andere nur lesen und ausfuehren koennen (5 = 4+0+1). Eine Berechtigung von 644 bedeutet, dass der Eigentuemer lesen und schreiben kann (6 = 4+2+0), waehrend die Gruppe und Andere nur lesen koennen (4 = 4+0+0). Das Verstaendnis dieses Systems ist grundlegend fuer den Betrieb eines sicheren und funktionsfaehigen PrestaShop-Shops.
Ueber die numerischen Berechtigungen hinaus hat jede Datei einen Eigentuemer und eine Gruppe. Auf einem Webserver laeuft der Webserver-Prozess (Apache oder Nginx) als ein bestimmter Benutzer, typischerweise www-data auf Debian/Ubuntu oder apache/nobody auf CentOS/RHEL. Der Webserver muss Ihre PrestaShop-Dateien lesen koennen, um sie auszuliefern, und er benoetigt Schreibzugriff auf bestimmte Verzeichnisse fuer Uploads, Caching und Konfiguration.
Korrekte Berechtigungen fuer PrestaShop-Verzeichnisse und -Dateien
Die allgemeine Regel fuer PrestaShop ist unkompliziert: Verzeichnisse sollten 755 und Dateien sollten 644 haben. Dies gibt dem Eigentuemer volle Kontrolle, waehrend die Gruppe und Andere lesen (und im Falle von Verzeichnissen ausfuehren/durchqueren) koennen, aber nichts aendern duerfen. Der Webserver-Benutzer sollte der Eigentuemer aller PrestaShop-Dateien sein oder zumindest der Gruppe angehoeren, der sie gehoeren.
Um diese Berechtigungen fuer Ihre gesamte PrestaShop-Installation festzulegen, verbinden Sie sich per SSH mit Ihrem Server und fuehren Sie aus:
find /var/www/html/prestashop -type d -exec chmod 755 {} \;
find /var/www/html/prestashop -type f -exec chmod 644 {} \;Ersetzen Sie /var/www/html/prestashop durch den tatsaechlichen Pfad zu Ihrer PrestaShop-Installation. Der erste Befehl findet alle Verzeichnisse und setzt sie auf 755. Der zweite findet alle Dateien und setzt sie auf 644.
Bestimmte Verzeichnisse benoetigen jedoch Schreibzugriff durch den Webserver. Diese Verzeichnisse erfordern besondere Aufmerksamkeit, da PrestaShop waehrend des normalen Betriebs in sie schreibt:
/var/cache/— Smarty-kompilierte Templates und Symfony-Cache/var/logs/— Anwendungs-Logdateien/upload/— Kunden-Datei-Uploads/download/— Virtuelle Produktdateien/img/— Produktbilder, Kategoriebilder, CMS-Bilder/modules/— Modulinstallation und -updates/themes/— Theme-Cache-Dateien/translations/— Uebersetzungs-Exportdateien/config/— Konfigurationsdateien (parameters.php)/app/config/— Symfony-Konfiguration/app/Resources/translations/— Symfony-Uebersetzungen
Wenn der Webserver-Benutzer der Eigentuemer dieser Dateien ist (was die empfohlene Einrichtung ist), reichen 755/644-Berechtigungen aus. Wenn der Webserver als ein anderer Benutzer laeuft, muessen Sie moeglicherweise die Gruppenberechtigungen oder den Eigentumer anpassen.
Korrekten Eigentumer mit chown festlegen
Die Eigentuemerzuordnung ist genauso wichtig wie die Berechtigungen. Der Befehl chown aendert den Eigentuemer und die Gruppe von Dateien. Fuer einen typischen Debian/Ubuntu-Server mit Apache oder Nginx ist der Webserver-Benutzer www-data:
sudo chown -R www-data:www-data /var/www/html/prestashopDas Flag -R wendet die Aenderung rekursiv auf alle Dateien und Unterverzeichnisse an. Auf CentOS- oder RHEL-Systemen ersetzen Sie www-data durch apache oder nginx, je nach Ihrem Webserver.
Ein gaengiger alternativer Ansatz ist, den Eigentuemer auf Ihren SSH/FTP-Benutzer und die Gruppe auf den Webserver-Benutzer zu setzen. So koennen Sie Dateien ueber FTP oder SSH bearbeiten, waehrend der Webserver sie weiterhin lesen kann:
sudo chown -R ihrbenutzername:www-data /var/www/html/prestashopIn diesem Fall sollten Verzeichnisse, die Schreibzugriff durch den Webserver benoetigen, auf 775 (Gruppen-Schreibrecht) und beschreibbare Dateien auf 664 gesetzt werden:
find /var/www/html/prestashop/var -type d -exec chmod 775 {} \;
find /var/www/html/prestashop/var -type f -exec chmod 664 {} \;
find /var/www/html/prestashop/img -type d -exec chmod 775 {} \;
find /var/www/html/prestashop/img -type f -exec chmod 664 {} \;Shared Hosting vs. VPS vs. Dedizierter Server
Die Hosting-Umgebung beeinflusst massgeblich, wie Dateiberechtigungen in der Praxis funktionieren. Das Verstaendnis der Unterschiede ist entscheidend fuer die korrekte Einrichtung der Berechtigungen.
Shared Hosting
Beim Shared Hosting greifen Sie typischerweise ueber FTP oder einen Dateimanager in cPanel/Plesk auf Dateien zu. Das PHP-Ausfuehrungsmodell variiert je nach Hoster, aber die meisten modernen Shared-Hoster verwenden PHP-FPM oder suPHP, was bedeutet, dass PHP als Ihr Benutzerkonto und nicht als globaler Webserver-Benutzer laeuft. Dies vereinfacht die Berechtigungen erheblich: Da PHP als Ihr Benutzer laeuft, kann es bereits mit den Standard-Berechtigungen 755/644 Ihre Dateien lesen und schreiben. Sie muessen auf Shared Hosting selten die Eigentuemerzuordnung aendern, da alles bereits Ihrem Konto gehoert.
Wenn Sie auf Shared Hosting auf Berechtigungsfehler stossen, pruefen Sie bei Ihrem Hoster, ob suPHP oder PHP-FPM verwendet wird. Wenn das aeltere mod_php-Modell verwendet wird, muessen Sie moeglicherweise einige Verzeichnisse voruebergehend auf 777 setzen (was aus Sicherheitsgruenden jedoch nicht empfohlen wird). Die meisten serioeosen Hoster haben mod_php genau wegen dieser Berechtigungskomplikationen abgeschafft.
VPS (Virtual Private Server)
Auf einem VPS haben Sie die volle Kontrolle. Dies ist das gaengigste Setup fuer ernsthafte PrestaShop-Shops. Sie sollten sicherstellen, dass der Webserver-Benutzer die PrestaShop-Dateien besitzt oder zumindest einer Gruppe angehoert, die Lesezugriff hat. Die empfohlene Einrichtung ist:
- Eigentuemer auf
www-data:www-datasetzen (oder Ihren Webserver-Benutzer) - 755 fuer Verzeichnisse und 644 fuer Dateien verwenden
- SSH mit sudo fuer Aenderungen verwenden oder Ihren SSH-Benutzer zur Gruppe
www-datahinzufuegen
Um Ihren SSH-Benutzer zur Webserver-Gruppe hinzuzufuegen:
sudo usermod -a -G www-data ihrbenutzernameDann setzen Sie das Gruppen-Schreibbit fuer Verzeichnisse, die Sie bearbeiten muessen:
chmod g+w /var/www/html/prestashop/themes/ihr-theme/Dedizierter Server
Dedizierte Server folgen denselben Prinzipien wie VPS-Setups. Der Hauptunterschied liegt in der Leistung: Sie haben mehr Ressourcen, sodass Sie PHP-FPM mit dedizierten Pools pro Website betreiben koennen. Jeder Pool kann als anderer Benutzer laufen, was eine bessere Isolation bietet, wenn Sie mehrere PrestaShop-Shops auf demselben Server hosten.
PHP-Ausfuehrungsmodelle: suPHP vs. mod_php vs. PHP-FPM
Die Art und Weise, wie PHP auf Ihrem Server ausgefuehrt wird, bestimmt direkt, welcher Benutzer Dateien schreibt und somit welche Berechtigungen benoetigt werden.
mod_php (Apache-Modul)
Dies ist das aelteste und einfachste Modell. PHP laeuft als Teil des Apache-Prozesses, was bedeutet, dass saemtlicher PHP-Code als Apache-Benutzer ausgefuehrt wird (typischerweise www-data oder apache). Das Problem ist, dass von PHP erstellte Dateien (Cache, Uploads usw.) dem Webserver-Benutzer gehoeren und nicht Ihrem Konto. Dies kann die FTP-Verwaltung erschweren und erzeugt auf Shared Hosts Sicherheitsbedenken, da alle Websites als derselbe Benutzer laufen.
Mit mod_php sollten PrestaShop-Dateien dem Apache-Benutzer gehoeren, und Berechtigungen von 755/644 funktionieren korrekt. Allerdings ist dieses Modell auf modernen Servern weitgehend veraltet.
suPHP
suPHP fuehrt PHP als Dateieigentuemer aus, anstatt als Webserver-Benutzer. Das bedeutet: Wenn Ihre Dateien ihrbenutzername gehoeren, laeuft PHP ebenfalls als ihrbenutzername. Dies ist auf Shared Hosting sicherer, da jedes Konto isoliert ist. Standard-Berechtigungen 755/644 funktionieren mit suPHP perfekt, da der PHP-Prozess und der Dateieigentuemer derselbe Benutzer sind.
Ein wichtiger Vorbehalt: suPHP lehnt Dateien mit Berechtigungen von 777 oder Dateien, die anderen Benutzern gehoeren, tatsaechlich ab. Wenn Sie auf einem suPHP-Server 777 setzen, verweigert PHP die Ausfuehrung dieser Dateien und zeigt stattdessen einen 500 Internal Server Error an.
PHP-FPM (FastCGI Process Manager)
PHP-FPM ist der moderne Standard. Es fuehrt PHP als separaten Prozess vom Webserver aus, mit konfigurierbarem Benutzer/Gruppe pro Pool. Auf einem VPS laeuft PHP-FPM typischerweise als www-data. Auf Shared Hosting mit CloudLinux oder aehnlichem erhaelt jedes Konto seinen eigenen PHP-FPM-Pool, der als Benutzer dieses Kontos laeuft.
PHP-FPM in Kombination mit Nginx ist das empfohlene Setup fuer die PrestaShop-Performance. Das Standard-Berechtigungsschema 755/644 funktioniert gut. Stellen Sie sicher, dass der Benutzer des PHP-FPM-Pools mit dem Dateieigentuemer uebereinstimmt oder ueber entsprechenden Gruppenzugriff verfuegt.
Warum 777-Berechtigungen gefaehrlich sind
Berechtigungen auf 777 zu setzen bedeutet, dass jeder auf dem System die Datei lesen, schreiben und ausfuehren kann. Auf Shared Hosting bedeutet dies, dass andere Konten auf demselben Server potenziell Ihre Datenbank-Zugangsdaten aus parameters.php auslesen oder schaedlichen Code in Ihre PHP-Dateien einschleusen koennten.
Selbst auf einem VPS, wo Sie der einzige Benutzer sind, ist 777 unnoetig und deutet auf eine Fehlkonfiguration hin. Wenn der Webserver bei 755-Berechtigungen nicht in ein Verzeichnis schreiben kann, ist die Loesung, die Eigentuemerzuordnung zu korrigieren, nicht die Berechtigungen fuer alle zu oeffnen. Hier ist, was Sie anstelle von 777 tun sollten:
- Pruefen, als welcher Benutzer der Webserver laeuft:
ps aux | grep -E "apache|nginx|httpd" - Dateieigentum pruefen:
ls -la /var/www/html/prestashop/ - Eigentum korrigieren:
sudo chown -R www-data:www-data /pfad/zum/verzeichnis - Korrekte Berechtigungen setzen:
chmod 755 /pfad/zum/verzeichnis
Wenn Sie ein Tutorial oder einen Forenbeitrag finden, der 777 fuer PrestaShop empfiehlt, ist dies veralteter und gefaehrlicher Rat. Die einzige legitime Verwendung von 777 ist fuer /tmp-Verzeichnisse, die das Sticky-Bit gesetzt haben (angezeigt als 1777), was eine Konfiguration auf Systemebene ist und nichts, was Sie auf PrestaShop-Dateien anwenden.
Docker-Besonderheiten fuer PrestaShop
PrestaShop in Docker auszufuehren fuehrt zu zusaetzlicher Komplexitaet bei Dateiberechtigungen. Innerhalb des Containers laeuft der Webserver als www-data mit einer bestimmten UID (oft 33 auf Debian-basierten Images). Auf dem Host-System hat Ihr Benutzer eine andere UID. Wenn Sie Docker-Bind-Mounts verwenden, um Ihre PrestaShop-Dateien in den Container einzubinden, wird die Dateizugehoerigkeit durch die numerische UID bestimmt, nicht durch den Benutzernamen.
Das bedeutet, dass Dateien, die auf dem Host als Ihr Benutzer erstellt werden (z.B. UID 1000), innerhalb des Containers als UID 1000 erscheinen, was nicht www-data (UID 33) ist. Der Webserver innerhalb des Containers kann moeglicherweise nicht in diese Dateien schreiben.
Loesungen fuer Docker-Berechtigungsprobleme umfassen:
- UIDs abgleichen: Erstellen Sie einen Benutzer innerhalb des Containers mit derselben UID wie Ihr Host-Benutzer, oder aendern Sie den Webserver so, dass er als Ihre UID laeuft.
- chown im Entrypoint verwenden: Fuegen Sie einen Startbefehl hinzu, der
chown -R www-data:www-data /var/www/htmlbeim Containerstart ausfuehrt. Dies ist einfach, kann aber bei grossen Installationen langsam sein. - Gruppenberechtigungen setzen: Fuegen Sie Ihren Host-Benutzer und
www-dataderselben Gruppe hinzu (nach GID), dann verwenden Sie 775/664-Berechtigungen. - Named Volumes: Verwenden Sie Docker-Named-Volumes anstelle von Bind Mounts. Docker verwaltet die Berechtigungen automatisch, aber Sie verlieren den direkten Dateisystemzugriff vom Host.
Fuer Entwicklungsumgebungen mit Bind Mounts ist der praktischste Ansatz, nach dem Synchronisieren oder Deployen von Dateien einen chown-Befehl auszufuehren:
docker exec ihr-container chown -R www-data:www-data /var/www/html/modules/ihr-modul/Beachten Sie, dass Operationen innerhalb des Containers (wie die Installation eines Moduls) Dateien als www-data erstellen koennen, waehrend Operationen auf dem Host Dateien als Ihr Host-Benutzer erstellen. Dieser staendige UID-Mismatch ist die haeufigste Ursache fuer Berechtigungsprobleme in dockerisierten PrestaShop-Umgebungen.
Fehlerbehebung haeufiger Berechtigungsfehler
"Failed to open stream: Permission denied"
Dieser Fehler bedeutet, dass PHP eine Datei nicht lesen oder schreiben kann. Ueberpruefen Sie die Eigentuemerzuordnung und Berechtigungen der in der Fehlermeldung genannten Datei. Die haeufigste Ursache ist, dass der Webserver-Benutzer die Datei oder das Verzeichnis nicht besitzt. Beheben Sie es mit:
sudo chown www-data:www-data /pfad/zur/datei
sudo chmod 644 /pfad/zur/datei"Unable to write to cache directory"
PrestaShops Smarty-Template-Engine und das Symfony-Framework schreiben beide Cache-Dateien. Wenn das Verzeichnis var/cache/ nicht beschreibbar ist, sehen Sie diesen Fehler. Das Cache-Verzeichnis muss dem Webserver-Benutzer gehoeren:
sudo chown -R www-data:www-data /var/www/html/prestashop/var/cache/
sudo chmod -R 755 /var/www/html/prestashop/var/cache/Nach dem Korrigieren der Berechtigungen leeren Sie den vorhandenen Cache, indem Sie den Inhalt der Cache-Verzeichnisse loeschen:
sudo rm -rf /var/www/html/prestashop/var/cache/prod/*
sudo rm -rf /var/www/html/prestashop/var/cache/dev/*"Cannot upload image" oder "Cannot install module"
Bild-Uploads gehen in das Verzeichnis img/, und Modulinstallationen schreiben in das Verzeichnis modules/. Beide muessen vom Webserver-Benutzer beschreibbar sein. Ueberpruefen Sie zusaetzlich, ob die PHP-Einstellungen upload_max_filesize und post_max_size gross genug fuer Ihre Dateien sind, da diese aehnlich klingende Fehler verursachen koennen.
sudo chown -R www-data:www-data /var/www/html/prestashop/img/
sudo chown -R www-data:www-data /var/www/html/prestashop/modules/"index.php is not writable" waehrend Updates
PrestaShops Auto-Updater benoetigt Schreibzugriff auf nahezu jede Datei in der Installation. Bevor Sie ein Update ausfuehren, setzen Sie die Eigentuemerzuordnung der gesamten Installation auf den Webserver-Benutzer. Nach Abschluss des Updates koennen Sie bei Bedarf restriktivere Eigentuemerzuordnungen wiederherstellen.
Weisse Seite nach Aenderung der Berechtigungen
Wenn Sie nach dem Aendern der Berechtigungen eine leere weisse Seite sehen, haben Sie moeglicherweise versehentlich die Ausfuehrungsberechtigung von Verzeichnissen entfernt. Verzeichnisse benoetigen das Execute-Bit, um durchquert werden zu koennen. Ein Verzeichnis mit Berechtigung 644 (kein Execute) ist effektiv unzugaenglich. Verwenden Sie immer 755 fuer Verzeichnisse, niemals 644.
Sie koennen auch das PHP-Fehlerprotokoll fuer weitere Details pruefen:
sudo tail -50 /var/log/apache2/error.log
# oder fuer Nginx:
sudo tail -50 /var/log/nginx/error.logBerechtigungen werden nach FTP-Upload zurueckgesetzt
Einige FTP-Clients setzen beim Hochladen von Dateien ihre eigenen Standardberechtigungen. Ueberpruefen Sie die Einstellungen Ihres FTP-Clients auf eine Option "Standardberechtigungen" oder "umask". Stellen Sie sie so ein, dass Dateien mit 644 und Verzeichnisse mit 755 erstellt werden. Alternativ fuehren Sie die Befehle zur Berechtigungskorrektur nach jedem FTP-Upload aus.
Sicherheits-Best-Practices ueber Berechtigungen hinaus
Korrekte Dateiberechtigungen sind nur eine Sicherheitsebene. Beruecksichtigen Sie diese zusaetzlichen Massnahmen:
- Zugriff auf Konfigurationsdateien einschraenken: Die Datei
app/config/parameters.phpenthaelt Ihre Datenbank-Zugangsdaten. Stellen Sie sicher, dass sie nur vom Webserver-Benutzer lesbar ist (Berechtigung 640), nicht von der gesamten Welt. - Verzeichnisauflistung deaktivieren: Fuegen Sie
Options -Indexeszu Ihrer Apache-Konfiguration oderautoindex off;zu Nginx hinzu, um zu verhindern, dass Besucher Verzeichnisinhalte durchsuchen koennen. - .htaccess-Dateien schuetzen: PrestaShop platziert
.htaccess-Dateien in sensiblen Verzeichnissen. Loeschen Sie diese nicht. - Installationsverzeichnis entfernen: Loeschen Sie nach der Installation das Verzeichnis
/install/vollstaendig. PrestaShop warnt Sie davor, aber es ist eine Betonung wert. - Korrekten umask setzen: Konfigurieren Sie Ihren Webserver und PHP-FPM mit einem umask von
0022, damit neue Dateien standardmaessig mit 644/755-Berechtigungen erstellt werden.
Durch das Verstaendnis von Linux-Berechtigungen, deren Anpassung an Ihre Hosting-Umgebung und die Befolgung der Richtlinien in diesem Artikel werden Sie die haeufigsten PrestaShop-Berechtigungsprobleme vermeiden und gleichzeitig eine sichere Serverkonfiguration aufrechterhalten.
War diese Antwort hilfreich?
Haben Sie noch Fragen?
Can't find what you're looking for? Send us your question and we'll get back to you quickly.