Bei WordPress Seiten kann es nach Plugin/Theme Installationen oder anderen Veränderungen am Dateisystem vorkommen, dass die Rechte von Dateien nicht mehr korrekt gesetzt sind. Dies gilt sowohl für den Besitzer der Datei (User und Gruppen), als auch für die Dateiberechtigungen.

Um das Setzen der Rechte so weit wie möglich zu vereinfachen, habe ich 2 Perl Skripte geschrieben. Das Skript zum Setzen der Dateiberechtigungen (chmod) wird automatisch täglich ausgeführt. Das Setzen des korrekten Besitzers der Dateien(chown) kann über ein Web-Interface jederzeit angestoßen werden.

Auf unserem Server läuft Debian, deswegen ist diese Anleitung für Debian geschrieben, sollte so aber auch auf anderen Distributionen möglich sein. Ich setze voraus, dass der eingeloggte Nutzer root Rechte hat.

Setzen der Dateiberechtigungen

Dies ist die einfachere Aufgabe.

Verzeichnisse sollten immer die Berechtigung 755, Dateien 644 haben. Die Datei wp-config.php sollte auf 400 (sofern es hier zu Problemen kommt 440) gesetzt werden.

Um ganze Unterverzeichnisse mit allen Dateien und Verzeichnissen verarbeiten zu können, muss zunächst das Perl Modul File::Find installiert werden:

apt-get install libfile-finder-perl

Ein Perl Skript in einem beliebigen Verzteichnis anlegen.

Folgenden Code in das Skript einfügen:

Angepasst werden muss hier nur der Pfad zum WordPress Verzeichnis in den unteren beiden Zeilen.

Über die Funktion find werden alle Dateien und Verzeichnisse im angegebenen Verzeichnis gefunden und nacheinander in der Funktion wanted abgearbeitet.

Verzeichnissen wird über chmod die Berechtigung 755 gegeben, Dateien 644.

Schließlich wird noch der wp-config.php 400 zugewiesen.

Das Skript kann nun über die Shell ausgeführt werden und die Berechtigungen werden gesetzt:

Um das Skript automatisch laufen zu lassen, muss es noch über einen cronjob angestoßen werden.

Hier einen Eintrag anlegen, bei uns wird das Skript jeden Tag um 3:55 Uhr ausgeführt:

Setzen der Dateibesitzer

Zunächst legen wir wieder ein Perl Skript in einem beliebigen Verzeichnis an.

Und so sieht das Skript aus:

Hier müssen der User und die Gruppe angegeben werden, die dem Besitzer des WordPress Verzeichnissen entsprechen.

Außerdem muss wieder der Pfad zum WordPress Verzeichnis angegeben werden.

Das Skript wandelt zunächst User und Gruppe von der textlichen in die numerische ID um, da File:Find nur mit der numerischen ID umgehen kann. Dann werden alle Dateien und Ordner im Verzeichnis durchgegangen und über chown User und Gruppe gesetzt.

Das Skript funktioniert so schon und kann über

ausgeführt werden. Die Rechte werden gesetzt.

Das Skript kann natürlich wie oben nun auch über einen cronjob automatisch ausgeführt werden, jedoch wollten wir es ermöglichen es über ein Web-Interface auszuführen, damit es jederzeit angestoßen werden kann, wenn die Rechte nicht stimmen.

Die größte Hürde hierbei ist, dass das Skript mit root Rechten ausgeführt werden muss.

Falls nicht installiert, muss zunächst sudo installiert werden.

Dann muss ein Eintrag in die sudoers Datei gemacht werden. Sudo liefert hierfür ein eigenes Progamm mit.

Folgende Zeile eintragen. Den Pfad zum Skript natürlich anpassen. Außerdem muss USER durch den User, der das WordPress Verzeichnis besitzt, ersetzt werden.

Im Zweifel den Server mal neu starten. Sollte aber nicht nötig sein.

Dieser Eintrag sorgt dafür, dass die angegebene Datei auch ohne Root Rechte ausgeführt werden kann. Das benötigen wir, um sie vom Webinterface aus ausführen zu können.

Als letzten Schritt erstellen wir noch ein php Skript, das über den Webbrowser aufgerufen werden kann. Natürlich sollte es bestenfalls in einem passwortgeschützten Bereich im Webspace liegen.

So sieht das Skript aus:

Hier muss nur der Pfad in der 5. Zeile angegeben werden. Es ist wichtig, dass der volle Pfad zu sudo angegeben wird, da sudo sonst nicht gefunden wird.

Das php Skript stellt einfach nur einen Button dar, wenn man ihn drückt, werden die Rechte gesetzt.

Das Webinterface muss natürlich auf demselben Server im Webspace laufen, auf dem auch das perl Skript liegt.