Ich verfolge Dateiberechtigungen ändern "WordPress Codex , doch wenn ich versuche, plugin
und/oder theme
über wp-admin
zu aktualisieren und/oder zu installieren, erhalte ich Folgendes:
Um die angeforderte Aktion auszuführen, muss WordPress auf Ihren Webserver zugreifen. Bitte geben Sie Ihre FTP-Zugangsdaten ein, um fortzufahren. Wenn Sie sich nicht an Ihre Anmeldeinformationen erinnern, wenden Sie sich an Ihren Webhost.
von der Dateisystemebene:
# ls -ld wp-content/ wp-content/plugins/ wp-content/themes/
drwxrwxr-x. 6 root Apache 4096 Jun 2 12:01 wp-content/
drwxrwxr-x. 28 root Apache 4096 Jun 2 00:00 wp-content/plugins/
drwxrwxr-x. 11 root Apache 4096 May 11 16:34 wp-content/themes/
#
httpd
wird als Apache
ausgeführt:
$ ps auxw | grep httpd
root 20158 0.0 0.1 533080 26192 ? Ss 15:03 0:00 /usr/sbin/httpd -DFOREGROUND
Apache 20233 0.0 0.2 612608 34908 ? S 15:03 0:00 /usr/sbin/httpd -DFOREGROUND
Apache 20234 0.0 0.2 538772 46904 ? S 15:03 0:00 /usr/sbin/httpd -DFOREGROUND
Apache 20235 0.0 0.1 536832 24268 ? S 15:03 0:00 /usr/sbin/httpd -DFOREGROUND
Apache 20236 0.0 0.2 626272 35640 ? S 15:03 0:00 /usr/sbin/httpd -DFOREGROUND
Apache 20237 0.0 0.0 535296 9592 ? S 15:03 0:00 /usr/sbin/httpd -DFOREGROUND
Apache 20322 0.0 0.1 537088 26620 ? S 15:03 0:00 /usr/sbin/httpd -DFOREGROUND
Apache 20380 0.0 0.2 626060 33816 ? S 15:04 0:00 /usr/sbin/httpd -DFOREGROUND
Apache 20429 0.0 0.1 538216 29184 ? S 15:04 0:00 /usr/sbin/httpd -DFOREGROUND
Apache 20447 0.0 0.2 629380 43180 ? S 15:04 0:00 /usr/sbin/httpd -DFOREGROUND
Apache 20448 0.0 0.2 626172 35224 ? S 15:04 0:00 /usr/sbin/httpd -DFOREGROUND
alexus 24073 0.0 0.0 112652 972 pts/9 R+ 15:13 0:00 grep --color=auto httpd
$
Ich möchte in der Lage sein, die angeforderte Aktion (install
und/oder update
) über /wp-admin
ohne FTP-Anmeldeinformationen auszuführen.
Wie kann ich das machen?
Fügen Sie Folgendes zu wp-config.php hinzu:
define( 'FS_METHOD', 'direct' );
Lassen Sie mich wissen, wie es bei Ihnen funktioniert.
Dies bedeutet, dass WordPress nur eine eingeschränkte Berechtigung zum Ändern des Ordners hat, in dem es installiert wurde.
Um dies zu beheben, müssen Sie nur die erforderlichen Berechtigungen dafür bereitstellen.
Führen Sie den folgenden Befehl in Ihrem Terminal/PuTTY/Commandline Prompt aus, nachdem Sie sich über SSH mit Ihrem Server verbunden haben:
Sudo chown -R Apache:apache /var/www/html
Kasse dieser Artikel für weitere Details.
Keine direkte Antwort, muss aber wahrscheinlich gesagt werden - dies ist ein Problem, das Sie vermeiden sollten, es sei denn, Sie sprechen von einer lokalen Entwicklung. In diesem Fall können Sie die Berechtigungen einfach auf 777 setzen.
Der Grund dafür ist, dass, wenn der Webserver Ihren Code überschreiben kann, jeder darauf ausgeführte Schadcode dies ebenfalls kann. Das Risiko ist nur so viel größer als die Bequemlichkeit, einige Sekunden zu sparen, indem die FTP-Anmeldeinformationen nicht eingegeben werden müssen.
Obwohl es völlig korrekt ist, den Besitz als root:Apache
mit den Berechtigungen 775 und httpd als Apache
auszuführen, gefällt dies Wordpress nicht. Der Eigentümer soll Apache
laut wp-admin/includes/file.php
sein:
// Attempt to determine the file owner of the WordPress files, and that of newly created files
$wp_file_owner = $temp_file_owner = false;
if ( function_exists('fileowner') ) {
$wp_file_owner = @fileowner( __FILE__ );
$temp_file_owner = @fileowner( $temp_file_name );
}
Ihr wäre:
wp_file_owner = root
temp_file_owner = Apache
if ( $wp_file_owner !== false && $wp_file_owner === $temp_file_owner ) {
// WordPress is creating files as the same owner as the WordPress files,
// this means it's safe to modify & create new files via PHP.
$method = 'direct';
$GLOBALS['_wp_filesystem_direct_method'] = 'file_owner';
} elseif ( $allow_relaxed_file_ownership ) {
// The $context directory is writable, and $allow_relaxed_file_ownership is set, this means we can modify files
// safely in this directory. This mode doesn't create new files, only alter existing ones.
$method = 'direct';
$GLOBALS['_wp_filesystem_direct_method'] = 'relaxed_ownership';
}
Wenn $ wp_file_owner mit $ temp_file_owner identisch ist, fahren Sie fort. Ihre würden sich im elseif verfangen, das laut Kommentar kein Löschen/Erstellen, sondern nur Aktualisierungen zulässt (ich habe dies überprüft, indem ich den Code eines Plugins in Wordpress aktualisiert habe, und es hat funktioniert).
Hinweis: Ich habe den Code nicht ausführlich durchgesehen. Dies ist nur meine schnelle Interpretation. Ich hatte das gleiche Problem und nachdem ich die Benutzergruppe gewechselt hatte, sodass der httpd-Benutzer auch der Dateibesitzer ist, wurden keine FTP-Anmeldeinformationen mehr abgefragt.
In meinem Fall habe ich das gelöst, indem ich von GIT zurück in den FTP-Modus gewechselt bin.
Keine Warnung mehr.
Vielleicht hilft das auch jemand anderem.
Obwohl die Frage nicht mehr so neu ist, möchte ich meine zwei Cent auch zu diesem Thema hinzufügen.
Viele Leute haben Centos (7) auf ihrem VPS-Server und folgende Codezeilen könnten ihr Problem lösen.
Imho hat alles mit SELinux zu tun, was WordPress daran hindert, seinen Job wie gewünscht zu erledigen. Es geht zu weit zu erklären, was SELinux ist und was es tut. Zu Ihrer Information beginnt die Einführung mit:
Security-Enhanced Linux (SELinux) ist ein obligatorischer Zugriffskontrollmechanismus (MAC), der im Kernel implementiert ist.
Nur 3 Schritte zum Folgen:
chcon -R -t httpd_sys_content_t /var/www/html/wordpress
chcon -R -t httpd_sys_rw_content_t /var/www/html/wordpress
Kein Neustart vom Server oder Neustart von einem Daemon erforderlich.
Ich werde nicht sagen, dass es allen hilft, aber für diejenigen, die SELinux nicht deaktiviert haben, sollte es eine Erleichterung sein.
Prost
Hinweis: Bitte passen Sie an Ihre eigenen Bedürfnisse an (dh Pfad zu WordPress)
Bearbeiten: Entfernen Sie unbedingt die Zeile define("FS_METHOD", "direct");
, wenn sie in wp-config.php
verwendet wird/wurde, da dies absolut verboten ist, wenn die obigen Codezeilen wie gewünscht ausgeführt werden.