DokuWiki

It's better when it's simple

Benutzer-Werkzeuge

Webseiten-Werkzeuge


de:install:permissions

Zugriffsrechte auf Dateien setzen

DokuWiki speichert seine Daten in einfachen Textdateien. Hierfür benötigt DokuWiki genügend Zugriffsrechte um in diese Dateien schreiben zu können. Gleichzeitig stellt es aber auch ein Sicherheitsrisiko dar, wenn die Zugriffsrechte zu großzügig gesetzt sind. Daher sollten nur die tatsächlich benötigten Rechte vergeben werden.

DokuWiki wird von PHP ausgeführt, deshalb benötigt der PHP-Prozess Schreibrechte für diese Dateien. Da der PHP-Prozess unter dem „Webserver“-Benutzer (im weiteren Text mit dem von vielen Providern verwendeten Namen „wwwrun“ bezeichnet) läuft, muss der Benutzer wwwrun Schreibrechte für die Dateien besitzen.

Die folgenden Berechtigungen müssen geändert werden damit DokuWiki reibungslos funktioniert:

  • data/ und data/tmp/ Verzeichnis: Für alle Dateien in und unterhalb dieser Verzeichnisse müssen für wwwrun Schreibrechte eingeräumt werden.
  • lib/plugins/ Verzeichnis: Für die Funktion des Extension-Managers benötigt wwwrun Schreibrechte auf dieses Verzeichnis.
  • lib/ Verzeichnis: Dieses Verzeichnis muss für alle lesbar sein, um die Stylesheets angezeigt zu bekommen. Die Berechtigung '755' wird hierfür empfohlen.

Die folgenden Dateien werden vom Skript installer.php aus den jeweiligen *.dist Dateien kopiert und erhalten dabei die benötigten Zugriffsrechte für wwwrun automatisch.

  • conf/ Verzeichnis: Für die folgenden Dateien muss wwwrun Schreibrechte besitzen:
    • local.php wird für den installer und für nachträgliche Konfigurationen benötigt.
    • users.auth.php und acl.auth.php sind für die ACL Web-Konfiguration und den usermanager erforderlich.

Windows und IIS

Um die Dateien im data und conf Verzeichnis schreibbar zu machen, muss dem Internet-Gast-Account (IUSR_computername) oder der entsprechenden Webserver-Gruppe (z. B. IIS_WPG) Schreibrechte zugewiesen werden. Dies kann über das Kontextmenü (rechte Maustaste auf Verzeichnis/Datei) über den Eintrag „Eigenschaften“ und dort auf dem Karteireiter „Sicherheit“ eingestellt werden.

Eine gute Anleitung mit Screenshots ist hier zu finden (in Englisch).

HINWEIS: Wenn Du PHP unter IIS6 mit dem FastCGI-Modul betreibst (FastCGI Erweiterung für IIS 6.0), müssen die Rechte anstelle des Internet-Gast-Accounts dem „NETZWERKDIENST“ zugewiesen werden.

Unix

Das hier trifft zu, wenn Du DokuWiki auf einem Linux, MacOS X oder andern Unix-ähnlichen System installierst. Ebenso trifft vieles hier auch für die meisten gemieteten Hosting-Pakete zu.

HINWEIS: unter Linux können auch zusätzlich erweiterte Zugriffsrechte in Form von ACLs (FACL) im Einsatz sein, siehe hierzu die Kommandos „getfacl“ und „setfacl“. Die Zugriffsrechte wie sie unten beschrieben sind können bedeutungslos sein, wenn über die ACLs nicht genügend Rechte vorhanden sind.

Dateirechte, eine kurze Zusammenfassung

An dieser Stelle sollen nicht die UNIX-Dateizugriffsrechte im Detail erklärt werden (siehe hierzu z.B. Wikipedia). Dies soll nur eine kurze Auffrischung sein:

  • Zugriffsrechte an einer Datei (oder Verzeichnis) hängen von deren Besitzer und Gruppe sowie vom Benutzer ab, der auf die Datei oder das Verzeichnis zugreifen will.
  • Es gibt Berechtigungen für lesen (r), schreiben (w) und ausführen (x)
  • Jeder UNIX-Prozess läuft mit den Berechtigungen eines bestimmten Benutzers und seiner Gruppe
  • Der Webserver ist ein UNIX-Prozess
  • PHP läuft normalerweise als Teil des Webservers
  • DokuWiki läuft mit den Berechtigungen des PHP-Prozesses
  • DokuWiki benötigt die Rechte lesen, schreiben, und ausführen für die Verzeichnisse, in denen Dateien erstellt werden sollen
  • DokuWiki benötigt die Rechte lesen und schreiben für Dateien, in die es schreiben soll
  • DokuWiki benötigt für Dateien und Verzeichnisse, auf die nur lesend zugegriffen wird, nur die Berechtigung lesen.

Um den Benutzer und die Gruppe herauszufinden, unter denen der PHP-Prozess (und auch der Webserver) läuft, kann z.B. folgendes PHP-Skript verwendet werden.

getUIDGID.php
<?php
 
if(function_exists('posix_geteuid')){
    // Verwende POSIX um die derzeitige UID und GID herauszufinden
    $uid   = posix_geteuid();
    $usr   = posix_getpwuid($uid);
    $user  = $usr['name'];
    $gid   = posix_getegid();
    $grp   = posix_getgrgid($gid);
    $group = $grp['name'];
}else{
    // versuche eine Datei zu erstellen und lese deren ID's
    $tmp = tempnam ('/tmp', 'check');
    $uid = fileowner($tmp);
    $gid = filegroup($tmp);
 
    // versuche, den Befehl 'ls' darauf auszuführen
    $out = `ls -l $tmp`;
    $lst = explode(' ',$out);
    $user  = $lst[2];
    $group = $lst[3];
    unlink($tmp);
}
 
echo "Der PHP-Prozess scheint unter der UID $uid ($user) und der GID $gid ($group) zu laufen\n"; 
?>

Alternativ kann auch ein etwas kürzeres Skript mit der Funktion phpinfo() ausgeführt werden. Der Benutzer und die Gruppe sind in der gleichnamigen Ausgabe (bzw. unter User/Group) aufgelistet:

<?php
phpinfo();
?>

Beispiele für Zugriffsrechte

Nachfolgend werden ein paar Beispiele für Zugriffsrechte auf Verzeichnisse und Dateien aufgelistet:

Verzeichnisse Dateien Ergebnis
0700 0600 Nur der Besitzer hat die Berechtigung lesen und schreiben. Der Besitzer muss der gleiche sein wie der Useraccount, unter dem der PHP-Prozess läuft.
0770 0660 Der Besitzer und die Gruppe haben die Berechtigung lesen und schreiben. Der PHP-Prozess muss zumindest der hier verwendeten Gruppe angehören.
0777 0666 GEFÄHRLICH!!! Jeder hat Lese- und Schreibrechte. Jeder der Zugriff auf den Webserver hat, kann Dateien und Verzeichnisse schreiben und löschen!!! Diese Berechtigungen sollten nur als Notlösung auf vertrauenswürdigen Maschinen verwendet werden. In aller Regel gibt es eine bessere Lösung (z.B. Änderung von Benutzer oder Gruppenzugehörigkeiten)!

Welche Berechtigungen müssen gesetzt werden?

Nun, wie sollten die Zugriffsrechte auf die oben genannten Dateien und Verzeichnisse vergeben werden? Generell sollte man versuchen, die Berechtigungen so restriktiv wie möglich zu vergeben. Es gibt jedoch keine generelle Regel, wie die Berechtigungen auf jedem einzelnen System vergeben werden sollen.

Wenn Du root (Superuser) bist, oder zumindest die entsprechenden Rechte auf den verwendeten Webspace hast, kannst Du den Besitzer und die Gruppe von Dateien und Verzeichnissen ändern. Das heißt, Du kannst als Besitzer der DokuWiki-Dateien den Webserver (z.b. 'www-data' oder 'wwwrun' oder 'nobody' oder was auch immer das oben gezeigte Skript ausgibt) festlegen und nur diesem Benutzer Zugriff auf die Dateien und Verzeichnisse vergeben (z.B. 0600 für Dateien oder 0700 für Verzeichnisse).

Möglicherweise ist Dein Benutzer ein Mitglied der Gruppe des Webservers. In diesem Fall können die Berechtigungen so gesetzt werden, dass diese Gruppe Schreibrechte auf die einzelnen Dateien und Verzeichnisse hat (z.B.: 0660 für Dateien und 0770 für Verzeichnisse).

Wenn Du alleine auf den Server zugreifst, oder sich der Server in einer völlig vertrauenswürdigen Umgebung befindet, können die Zugriffsrechte auch großzügig gesetzt werden z.B. 0666 für Dateien und 0777 für Verzeichnisse. Allerdings sind diese Berechtigungen in der Regel überflüssig und sollten daher schon aus Prinzip nicht verwendet werden (man sollte sich so etwas erst gar nicht angewöhnen).

Wenn DokuWiki auf einem Webserver eines Webhosters (sog. Shared Hosting) laufen soll, wird empfohlen, Kontakt mit dem Administrator des Webservers (i. d. R. über die Hotline des Providers) aufzunehmen und ihn um Hilfe und entsprechende Hinweise zur Vergabe der Berechtigungen zu bitten. Durch einen Hinweis auf diese Seite sollte für den Administrator klar sein, was hier zu tun ist um die nötigen Berechtigungen zu erhalten. In einigen Fällen können die entsprechenden Rechte auch über das Webfrontend zu dem Hostingangebot vom Anwender selbst vergeben werden.

HINWEIS: Wenn Du die richtigen Einstellungen für deine Verzeichnisse und Dateien gefunden hast, solltest Du die Einstellungen für fmode und dmode entsprechend festlegen um diese Einstellungen auch für (von DokuWiki) neu erstellte Verzeichnisse und Dateien zu übernehmen.

Wie setzt man Zugriffsrechte?

Auf der Kommandozeile verwendet man chmod zum Ändern von Zugriffsrechten, chown für die Zuweisung des Besitzers und chgrp für die Gruppenzuweisung. Bitte beachte, das bei Shared Hosting Angeboten die Befehle chown und chgrp in der Regel nicht zur Verfügung stehen bzw. nicht so funktionieren wie erwartet.

Bei Zugriff auf den Webserver per FTP kann das Handbuch des FTP-Programms weiterhelfen. Bei den meisten grafisch gesteuerten FTP-Programmen findet man einen entsprechenden Eintrag im Kontextmenü der jeweiligen Verzeichnisse bzw. Dateien.

Auf manchen UN*X-ähnlichen Systemen besteht die Möglichkeit die ACLs des Dateisystems zu verwenden um dem PHP-User die nötigen Schreibrechte zuzuweisen. Für SUN's ZFS siehe Solaris ZFS Administrator's guide für nähere Infos. Für POSIX-Dateisysteme wie ext2/ext3 unter Linux oder SUN's UFS unter Solaris 8 oder später siehe die manpages für setfacl und getfacl.

Manche Backup-Systeme ignorieren ACLs von Dateien (hierfür am besten den Administrator konsultieren). Falls verfügbar sind ACLs eine sicherere Methode als den PHP-User der eigenen Gruppe hinzuzufügen, dem PHP-User die Dateien zu überlassen oder für Jedermann Schreibrechte zu verteilen.

Wenn es mal nicht so läuft wie erwartet

In einigen Situationen kann es passieren, dass man nicht die nötigen Rechte besitzt um die Verzeichnisse und Dateien zu verändern oder zu löschen, die DokuWiki angelegt hat. Mögliche Lösungswege werden hier gezeigt.

Debian Beispiele

Auf einem Debian-System mit Apache Webserver heißt der Webserver-Prozess www-data. Hier könnten die folgenden Kommandos verwendet werden:

  • data Verzeichnis:
    • deinwiki> chmod 775 data/ _ _ _ _*
    • deinwiki> chgrp www-data data/
  • Web-Konfiguration zulassen:
    • deinwiki/conf> chgrp www-data local.php;chmod 664 local.php
  • Benutzer-/ACL-manager zulassen:
    • deinwiki/conf> chgrp www-data {users.auth.php,acl.auth.php};chmod 664 {users.auth.php,acl.auth.php}
  • Extension manager zulassen:
    • deinwiki/lib> chgrp www-data plugins/
    • deinwiki/lib> chmod 775 plugins/

Tipp: Das setgid Bit verwenden

Wenn Du Zugriff auf die Kommandozeile des Webservers hast, kannst Du das setgid Bit verwenden, um die Zugriffsrechte soweit einzuschränken, dass die Dateien unter data/ nicht mehr vom Webserver gelöscht werden können, obwohl diese vom Web-Server erstellt wurden.

In Verzeichnissen wo das setgid Bit gesetzt ist, gehören neu erstellte Dateien und Verzeichnisse zur selben Gruppe wie das Verzeichnis in dem sich die Dateien befinden. Die folgenden Beispiele zeigen, wie man eine solche Konfiguration für den Benutzer foo, der zur Gruppe foo gehört, einrichten kann.

  • data Verzeichnis:
    • deinwiki> chmod 775 data/
    • deinwiki> chown www-data:foo data/
  • alles unterhalb des data-Verzeichnisses:
    • deinwiki> chmod 2775 {attic,cache,index,locks,media,meta,pages,tmp}
    • deinwiki> chown www-data:foo {attic,cache,index,locks,media,meta,pages,tmp}

Wie kann ich dafür sorgen, dass einzelne Seiten als "nur lesbar" festgelegt werden?

Siehe hierzu diesen FAQ-Eintrag.

de/install/permissions.txt · Zuletzt geändert: 2022-06-05 08:17 von 2003:fc:df05:4300:9132:c90a:7110:7ddb

Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht: CC Attribution-Share Alike 4.0 International
CC Attribution-Share Alike 4.0 International Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki