Wie sollte ich die Dateiberechtigungen ändern, um Wordpress zu berücksichtigen?

Wie sollte ich die Dateiberechtigungen ändern, um Wordpress zu berücksichtigen?

Ich habe die hier beschriebene Methode erfolgreich angewendet:Von einem einzigen Benutzer verwaltetund es hat bei mir gut funktioniert. Dies ist mein Skript für alle meine Websites:

sudo chown -R WebAdmin /var/www/example.com/
sudo chgrp -R www-data /var/www/example.com/
sudo chmod -R 750 /var/www/example.com/
sudo chmod g+s /var/www/example.com/
sudo chown www-data:www-data /var/www/example.com/Uploads/
sudo chmod -R 755 /var/www/example.com/Uploads/

Ich verwalte alle Sites auf diesem Server und WebAdmin ist der allgemeine Benutzer, den ich für FTP und auch SSH verwende.

Ich habe jedoch vor kurzem einige Wordpress-Sites von einem Hosting-Unternehmen auf meinen Server verschoben und das oben genannte funktioniert nicht. Beim Aktualisieren von Wordpress oder seinen Designs/Plugins trat der folgende Fehler auf:

Um die angeforderte Aktion auszuführen, muss WordPress auf Ihren Webserver zugreifen. Geben Sie Ihre FTP-Anmeldeinformationen ein, um fortzufahren. Wenn Sie Ihre Anmeldeinformationen vergessen haben, wenden Sie sich an Ihren Webhost.

Es gibt mehrere "Fixes" wie zum BeispielDieses hierdie eher Workarounds sind und wahrscheinlich unsicher sind. Also habe ich die sicherste (soweit ich weiß) Methode verwendet und die WWW-Daten zum Eigentümer der WordPress-Sites gemacht, während die Nicht-WordPress-Sites wie bisher beibehalten wurden. Mit anderen Worten, ich habe einfach

sudo chown -R www-data /var/www/wp_example.com/

auf den WordPress-Sites. Das hat natürlich funktioniert, aber es wird mühsam, wenn ich die Website manuell pflegen muss, weil ich mich dazu als Root anmelden muss. Ich könnte die Website(s) in Zukunft auch nicht jemand anderem zur Pflege zuweisen. Beachten Sie, dass einige meiner Sites hybrid sind (teilweise WordPress und teilweise benutzerdefinierte Seiten).

Daher frage ich mich, ob es eine bessere Lösung gibt, die eleganter und allgemeiner ist, d. h., die sowohl für WordPress- als auch für Nicht-WordPress-Sites funktioniert.

Eine Möglichkeit ist, dass ich den Benutzer WebAdmin zur Gruppe www-data hinzufüge. Oder vielleicht www-data zur Benutzergruppe WebAdmin? Was ist sinnvoller und sicherer?

Antwort1

Wenn sowohl der Benutzer WebAdmindirekt als auch der Benutzer www-dataüber die Gruppe www-datain diese Verzeichnisse schreiben muss, 750reicht das nicht aus. Was Ihr aktuelles Design behebt, wäre:

sudo chmod -R 770 /var/www/example.com/

Sicherheitsüberlegungen

Im Allgemeinen bedeutet dies jedoch, dass jede PHP-Site unter demselben Benutzer ausgeführt wird und nach dieser Änderung jede Site die Dateien jeder anderen Site lesen und schreiben kann. Dies bedeutet, dass ein Angriff auf einer der Sites alle Sites kompromittiert.

Die Verwendung eines separaten Benutzers und PHP-FPM-Pools für jede Site würde die Sites in isolierte Bereiche aufteilen und dieses Risiko mindern. Sie könnten die Site mit demselben Benutzer verwalten, der sie betreibt:

/var/www$ ls -l
drwxr-x--- 2 example-com www-data 4096 Aug 30 7:00 example.com
drwxr-x--- 2 example-net www-data 4096 Aug 30 7:00 example.net
drwxr-x--- 2 example-org www-data 4096 Aug 30 7:00 example.org

Wenn der Benutzer WebAdminsie unbedingt alle verwalten muss, würden Sie den Benutzer zur Gruppe hinzufügen www-dataund der Gruppe Schreibberechtigungen erteilen, aber das würde ich nicht empfehlen.

/var/www$ ls -l
drwxrwx--- 2 example-com www-data 4096 Aug 30 7:00 example.com
drwxrwx--- 2 example-net www-data 4096 Aug 30 7:00 example.net
drwxrwx--- 2 example-org www-data 4096 Aug 30 7:00 example.org

PHP-FPM-Pools

Da ich die PHP FPM-Pools erwähnt habe, finden Sie hier eine kurze Beispielkonfiguration. Es gibt mehrere Tutorials, in denen diese Schritte ausführlich erläutert werden.

  1. Installieren Sie PHP-FPM.

  2. /etc/php/8.2/fpm/pool.d/example-com.conf:

    [example-com]
    user = example-com
    group = example-com
    
    listen = /run/php/example-com.sock
    chdir = /var/www/example.com
    
    listen.owner = www-data
    listen.group = www-data
    
    pm = dynamic
    pm.max_children = 5
    pm.start_servers = 2
    pm.min_spare_servers = 1
    pm.max_spare_servers = 3
    
    php_admin_value[disable_functions] = exec,passthru,shell_exec
    php_admin_flag[allow_url_fopen] = off
    php_admin_value[cgi.fix_pathinfo] = 1
    
    security.limit_extensions =
    

    Die letzte Zeile verringert die Sicherheit, damit WordPress SEO-URLs verarbeiten kann, die anderen dienen zur Erhöhung der Sicherheit. Die pmParameter sollten an Ihre Bedürfnisse angepasst werden.

  3. Aktivieren Sie die Apache-Module mpm_event, proxy& proxy_fcgi.

  4. Fügen Sie den Handler zum Apache2- <VirtualHost>Block für die Site hinzu:

    <FilesMatch "\.php$">
        SetHandler "proxy:unix:/run/php/example-com.sock|fcgi://localhost"
    </FilesMatch>
    <Proxy "fcgi://localhost/">
    </Proxy>
    
  5. Laden Sie die Apache2- und PHP-FPM-Dienste neu oder starten Sie sie neu.

verwandte Informationen