Es gibt mehrere gute Gründe um die Zugriffsrechte für Dateien und Ordner einer WordPress-Seite zu reparieren: Der Umzug einer WordPress-Seite auf einen neuen Server, Aufräumen nachdem eine WordPress-Seite gehacked wurde etc. Symptome für defekte Zugriffsrechte in Worpress sind z.B. Hänger beim Installieren von WordPress Updates (“Unpacking Files”, “File already exists”) oder Probleme beim Installieren von Plugins (“No Permission to overwrite”).

Der folgende Beitrag zeigt, wie man die Zugriffsrechte von WordPress reparieren kann, per SSH- oder per FTP-Zugang.

Per SSH-Zugang: WordPress automatisch reparieren

Manuelle Änderungen an den File Permissions sind oft mühsam und fehlerbehaftet. Das folgende Script schafft Abhilfe und repariert die Zugriffsrechte von WordPress voll automatisch. Voraussetzung ist Zugang per SSH.

#!/bin/bash
#
# fix-wp-perms.sh 1.02
#
# This script configures WordPress file permissions based on recommendations
# from http://codex.wordpress.org/Hardening_WordPress#File_permissions
#
# CALL: 
# ./fix-wp-perms.sh HTTPDOCS_ROOT WP_OWNER
#
# 1.01: Initial release 
# 1.02: Added some safety checks
#
# Author: Michael Conigliaro <mike [at] conigliaro [dot] org>
# (MOD)2016 Modified by <h_schneider [at] marketmix [dot] com>
#

# Setup.start
#
WP_ROOT=$1 # Wordpress root directory
WP_OWNER=$2 # Wordpress owner
WP_GROUP=psacln # Wordpress group (Default for HostEurope Root Server)
WS_GROUP=psacln # Webserver group (Default for HostEurope Root Server)
#
# Setup.end

if [ $# -ne 2 ]; then
 echo "This script expects 2 arguments instead of $#"
 echo
 echo "USAGE:" 
 echo "fix-wp-perms.sh wordpress_root_folder owner"
 exit 10
fi

if [ ! -d $1 ]; then
 echo "ABORTED: The Wordpress root folder '$1' doesn't exist!"
 exit 10
fi

# Reset to safe defaults
#
echo "Setting permissions to safe defaults - this can take a while ..."
find ${WP_ROOT} -exec chown ${WP_OWNER}:${WP_GROUP} {} \;
find ${WP_ROOT} -type d -exec chmod 755 {} \;
find ${WP_ROOT} -type f -exec chmod 644 {} \;

# Allow wordpress to manage wp-config.php (but prevent world access)
#
echo "Procesing wp-config ..."
chgrp ${WS_GROUP} ${WP_ROOT}/wp-config.php
chmod 660 ${WP_ROOT}/wp-config.php

# Allow wordpress to manage wp-content
#
echo "Processing wp-content - this can take a while ..."
find ${WP_ROOT}/wp-content -exec chgrp ${WS_GROUP} {} \;
find ${WP_ROOT}/wp-content -type d -exec chmod 775 {} \;
find ${WP_ROOT}/wp-content -type f -exec chmod 664 {} \;

echo "DONE!"
exit 0

Aufgerufen wird das Script wie folgt:
./fix-wp-perms.sh  domainname.com/httpdocs ftpuser1

Hierbei gilt folgende Annahme:

  • Wir sind per SSH eingelogged und befinden uns im Root-Ordner unserer Webspace-Verwaltung. Unter Plesk ist das z.B. /var/www/vhosts
  • Unsere WordPress-Installation befindet sich im httpdocs-Ordner unserer Domain “domain.com”.
  • Der Benutzername unseres regulären FTP-Accounts mit dem wir die Dateien unserer WordPress-Installation verwalten heisst “ftpuser1”.
  • Unser Server in unserem o.g. Beispiel ist ein RootServer oder Virtual Server mit Plesk Control Panel (HostEurope). Daher sollte die Gruppe für die WordPress-Installation und die Webserver-Benutzer gleich sein und namentlich “psacln” (=Plesk Client Side User) lauten. Diese beiden Parameter müssen direkt im Script geändert werden.

Beim o.g. Aufruf des Scripts werden folgende Parameter übergeben:

  • Den Pfad zur WordPress-Installation
  • Der Eigentümer der WordPress-Installation, hier ftpuser1

Je nach Grösse der WordPress-Installation kann der Reparatur-Vorgang mehrere Minuten dauern.

Per FTP-Zugang: WordPress Permissions manuell reparieren

Hat man keinen SSH-Zugang zur Verfügung, bleibt nur der Weg über einen FTP-Client. Hier sollten die Zugriffsrechte für WordPress wie folgt gesetzt werden:wordpress-zugriffsrechte-reparieren-ftp

  • Alle Dateien und Ordner zuerst rekursiv auf 644.
  • Danach alle Ordner und Unterordner (ohne die Dateien darin) auf 755, mit Ausnahme /wp-content, was später behandelt wird.
  • /wp-config.php auf 660.
  • /wp-content zuerst rekursiv auf 664.
  • Dann alle Dateien in /wp-content und dessen Unterordnern auf 775. Die Ordner und Unterordner selbst in /wp-content bleiben auf 664.

“Rekursiv” bedeutet “für den Ordner selbst und allen darin enthaltenen Objekte wie Dateien und Unterordner”. D.h. der gesamte Verzeichnisbaum, bis zum letzten Unterordner.

Bei diversen Webspace Providern kann es Unterschiede geben – hier hilft oftmals nur Probieren. Die Abweichungen von den o.g. Settings sollten sich jedoch in Grenzen halten.

 

divider-edit

[Edited 2016-06-08]: Quellcode wurde durch Version 1.02 ersetzt.[/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]