Neue Plugins können aufgrund des Fehlers “Verzeichnis konnte nicht erstellt werden” nicht installiert werden

Ein Fakultätsmitglied hat Schwierigkeiten mit einer instruktiven WordPress-Installation. Die Behebung individueller Erlaubnisprobleme war ein Treffer und ein ewiger Schmerz geworden, also werde ich hier fragen. Was kann ich tun, um WP Just Work zu machen? Die Arten von Fehlern, die sie bekommen:

Plugin installieren: Lightbox 2 2.9.2 Installationspaket von http://downloads.wordpress.org/plugin/lightbox-2.2.9.2.zip herunterladen … Paket entpacken … Verzeichnis konnte nicht erstellt werden. /home/CIM140/public_html/wordpress/wp-content/upgrade/lightbox-2.tmp

Wenn ich su wie www-data (der Benutzer apache läuft wie in Ubuntu), kann ich das Verzeichnis einfach gut machen. Meine Test-wp-Instanz installiert dieses Plugin ganz gut, so dass ich nicht weiß, warum es für sie fehlschlägt.

Solutions Collecting From Web of "Neue Plugins können aufgrund des Fehlers “Verzeichnis konnte nicht erstellt werden” nicht installiert werden"

@pwnguin,

Ich hatte die gleichen Probleme beim Ausführen von mod_php mit WordPress und ich fand es schließlich heraus.

# chown www-data:www-data /home/CIM140/public_html/wordpress/ -R 

Solange Sie die Box kontrollieren, verursacht dies keine Sicherheitsprobleme.


BEARBEITEN:

Möglicherweise müssen Sie auch Ihre Umask auf 022 ändern, damit neue Verzeichnisse, die von WordPress erstellt wurden, über 755 Berechtigungen verfügen und Dateien über 644 Berechtigungen verfügen.

Eine weitere Option ist das Überschreiben der Standard-Dateiberechtigungen in wp-config.php:

 define('FS_CHMOD_DIR', (0755 & ~ umask())); define('FS_CHMOD_FILE', (0644 & ~ umask())); 

Sie können die Dateisystemmethode auch für Aktualisierungen erzwingen.

  • (Primary Preference) “Direct” zwingt dazu, direkte Datei-I / O-Anfragen aus PHP zu verwenden. Dies ist mit der Erschließung von Sicherheitsproblemen auf schlecht konfigurierten Hosts verbunden. Diese wird bei Bedarf automatisch ausgewählt.
  • (Sekundärpräferenz) “ssh” soll die Verwendung der SSH PHP Extension erzwingen.
  • (3. Preference) “ftpext” soll die Verwendung der FTP PHP Extension für FTP Access erzwingen und schließlich
  • (4. Präferenz) “ftpsockets” verwendet die PHP Sockets-class für den FTP-Zugriff.

Diese können in wp-config.php mit define('FS_METHOD', 'ftpext'); : define('FS_METHOD', 'ftpext');

Sie können alle aktuell definierten Konstanten durch Ausführen der print_r(@get_defined_constants()); Befehl in PHP.

Für mich (unter Ubuntu) musste ich umask 002 zu /etc/apache2/envvars , damit WordPress Plugins / Images mit 775 Berechtigungen anstelle von 755 hochladen kann (dh niemand außer Apache und root darf die hochgeladenen Dateien ändern)

Um zu verstehen, warum Sie diese Probleme haben, müssen Sie die zugrundeliegenden Eigentumskonzepte verstehen.

Im Grunde wissen Sie, dass Apache als WWW-Datenbenutzer ausgeführt wird. Das ist der Grund, warum alles, was diesem Benutzer gehört, funktioniert, weil WordPress überprüft, dass es Dateien als Benutzer mit eigenen Dateien erstellen kann. Also, was Sie tun, ist, dass alles dem Besitzer gehört, dem die Dateien gehören.

Wenn Sie die volle und vollständige Kontrolle über die Maschine haben, ist das in Ordnung. Auf der anderen Seite, wenn es sich um einen Shared-Hosting-Server handelt, haben Sie eine Sicherheitslücke geschaffen.

Normalerweise laufen Webserver als ein Benutzer (wie www-Daten), der dann Code von anderen Benutzern ausführt (wie “Otto”, mein Benutzerkonto). In dieser Situation wäre der Webserver nicht in der Lage, Dateien als “Otto” zu erstellen, und wäre daher nicht in der Lage, Dateien korrekt als mein Konto zu erstellen. Somit würde diese Überprüfung durch WordPress im Hinblick auf die Erstellung von Dateien im richtigen Besitz und somit in der Lage sein, Plugins zu installieren oder Dateien zu aktualisieren, fehlschlagen, da die Tatsache, dass meine Dateien dem gemeinsamen Webserver-Benutzer gehören, ein Sicherheitsrisiko darstellt.

In solch einem Fall sollte WordPress mich korrekt nach FTP-Zugangsdaten oder etwas in diesem Sinne fragen. Dies wäre eine Möglichkeit, das Problem mit dem Benutzerkonto zu umgehen, indem es sich als Benutzer authentifiziert, der die Dateien schreiben soll, und sie dann als diesen Benutzer schreiben.

Jetzt versuchen Sie, dieses Problem zu lösen, indem Sie alle WordPress-Dateien so ändern, dass sie demselben Konto gehören, in das der Webserver die Dateien schreibt. Der normalere Ansatz dafür besteht darin, zu ändern, wie der Webserver Dateien schreibt, damit der PHP-process dem Benutzerkonto, in dem die Dateien ausgeführt werden, “gehört”.

Die allgemeine Antwort darauf lautet “suphp”. Diese PHP-Version setzt den Benutzer, der den PHP-process ausführt, auf denselben Benutzer wie den Besitzer der PHP-Dateien, die er ausführt. Dies ist sicherer bei Shared Hosting-Setups, da sichergestellt wird, dass ein PHP-process, der vom gemeinsam genutzten Webserver ausgeführt wird, als Besitzer der PHP-Dateien ausgeführt wird und somit keine anderen Benutzerkonten und Ähnliches lesen kann.

Unter Ubuntu glaube ich, dass dies der allgemeine Weg ist:

Installieren Sie suphp:

 $ sudo apt-get install libapache2-mod-suphp 

Deaktivieren Sie die alte mod_php

 $ sudo a2dismod php5 

Starten Sie Apache neu

 $ sudo /etc/init.d/apache2 restart 

Und voila. Nun haben Sie Ihre WordPress-PHP-Dateien im Besitz des Normal- Eigentümers von ihnen. Keine speziellen Tricks, keine Änderung der Berechtigungen oder Besitzrechte oder Ähnliches. Da der PHP-process als Eigentümer dieser Dateien ausgeführt wird, kann er ihnen als Eigentümer schreiben. Verzeichnisse sollten 755 sein, Dateien sollten 644 sein (Hinweis, suphp mag nicht, wenn Dateien von Gruppe beschreibbar sind, also ist 755/644 der richtige Berechtigungssatz).

Sie müssen den entsprechenden Verzeichnissen Schreibberechtigungen erteilen. Im Idealfall sollten Sie dies nur für die relevante Datei oder den Ordner tun und dann die Berechtigungen zurücksetzen, damit Ihre Website nicht verwundbar bleibt.

Sie können dies mithilfe der folgenden Befehle von der Befehlszeile aus beheben (vorausgesetzt, Sie befinden sich im WordPress-Stammordner):

 # cd wp-content # chmod -R a+w plugins # chmod -R a+w themes # chmod -R a+w upgrade 

Die sicherste Lösung ist das Hinzufügen von Apache zu derselben Gruppe wie der Eigentümer der WordPress-Installation und das Ändern aller Gruppenberechtigungen in Schreibrechte.