Ich bin beim Schreiben meines Artikels zum Thema Datenschutz und Piwik über Probleme mancher User beim automatischen Update von Piwik gestolpert. Da es auch mir vor einiger Zeit so erging, wollte ich euch meine Erfahrungen und einen Lösungsansatz nicht vorenthalten.
Augenscheinlich haben einige da draußen das Problem, dass dieses Update per PHP ausgeführt wird und somit unter Linux Schreibrechte für den User, unter dem der Webserver betrieben wird, Voraussetzung sind. Oft liest man in solchen Fällen, dass es mit den Berechtigungen 777 läuft. Klar, dann darf eben jeder (das bedeutet die 3. Ziffer) in diesem Verzeichnis alles (7 heißt lesen, schreiben, ausführen)! Hierbei bekomme ich immer ein wenig Bauchschmerzen…

Ich betreibe meinen eigenen virtuellen Server, d.h. ich habe volle root-Rechte auf dieser Debian-Maschine. Die hier beschriebenen Tipps setzen dies zum Teil voraus. In wie weit das mit einem FTP-Zugang bei Webspace-Anbieter XY möglich ist, kann ich nicht sagen. Vielleicht hat ja jemand einen Linktipp für die Kommentare parat.

Vorbereitungen für das automatische Update

Vor dem automatischen Piwik-Update setze ich die Berechtigungen so, dass der Webserver-Benutzer bzw. die Gruppe (www-data auf meinem System) in und unterhalb der DocumentRoot Schreibrechte (4) bekommt. Ebenso werden das komplette Piwik-Verzeichnis (3) und die Datenbank (2) in meinem home-Verzeichnis (1) gesichert.

cd ~
mysqldump -fQ -uroot -p piwik > piwik.sql
tar cvfz piwik.tgz /srv/www/httpd/piwik
chmod -R 777 /srv/www/httpd/piwik/html

Das ist keine schöne Lösung! Man könnte natürlich besser das u.a. Script set_perms_web.sh entsprechend anpassen und nur die notwendigsten Rechte vergeben. Wie auch immer, der Webserver braucht Schreibrechte in den Verzeichnissen und muss auch die Dateien überschreiben dürfen.

Piwik-Update durchführen

Jetzt wird’s einfach – wenn alles klappt. Als Administrator anmelden und auf die Meldung mit dem Update-Hinweis klicken.

Piwik 1.2.1 Update
Im folgenden Fenster sollte die Möglichkeit zum automatischen Update von Piwik auswählbar sein. Ist das nicht der Fall und die neue Piwik-Version lässt sich lediglich herunter laden, dann hat der Webserver-Benutzer keine Schreibrechte und ihr solltet diesen Artikel von oben mit lesen beginnen.
Ein Klick auf Automatisches Update durchführen und wenige Augenblicke später die Meldung für ein erfolgreich durchgeführtes Update erhalten.

Meldung: Piwik Update erfolgreich durchgeführt

So einfach kann es sein, muss aber nicht! Auch ich hatte bereits die eine oder andere Schwierigkeit auf meinem Weg durch die Piwik-Versionen und fand oft Hilfe oder Hinweise im Piwik-Forum, das ich immer als erste Anlaufstelle empfehlen kann.

Shell-Script zum Setzen der Berechtigungen

Ich habe ein kleines Shell-Script für Anpassung der Verzeichnis- und Datei-Berechtigungen, was ich einfach als root starte. Wer möchte kann dies gern auf seinem Server verwenden, anpassen, umschreiben oder was auch immer damit tun. Denkt daran die für eure Umgebung notwendigen Anpassungen vorzunehmen; ich übernehme keinerlei Garantie.

#!/bin/sh

# Server-Pfad zur Piwik-Installation; hier liegen bei die Verzeichnisse logs, html, tmp usw.
path="/srv/www/httpd/piwik"
# FTP-Benutzer oder root
user="ftp_123"
# Gruppe, mit der der Webserver läuft
group="www-data"

# Überprüfung, ob Pfad vorhanden ist und ändere den Besitzer sowie die Rechte
# Wenn der Pfad zu Piwik vorhanden ist und es dort ein Verzeichnis namens /html gibt
# dann werden die Anpassungen durchgeführt, sonst wird das Script bis zum else-Zweig nicht ausgeführt
# /html ist das root-Verzeichnis, kann auch /httpdocs, /public_html oder wie auch immer auf anderen Systemen heißen
if [ -d $path/html ]; then
    chmod 750 $path/html
    cd $path/html
    find -type f -exec chmod 640 {} \;
    find -type d -exec chmod 750 {} \;
    chown -R $user:$group $path/html

    # Schreibberechtigungen in den Temp-Verzeichnissen setzen
    chmod 777 $path/html/tmp
    chmod 777 $path/html/tmp/templates_c
    chmod 777 $path/html/tmp/cache
    chmod 777 $path/html/tmp/assets
    chmod 777 $path/html/tmp/sessions

    # Das Script archive.sh braucht Ausführrechte
    chown root:$group $path/html/misc/cron/archive.sh
    chmod 750 $path/html/misc/cron/archive.sh

    echo "Alle Änderungen in \"$path/html\" sind durchgeführt!"
else
    echo "\"$path/html\" ist nicht vorhanden!"
fi

# Dieses Script (set_perms_web.sh) muss nur für root ausführbar sein
if [ -f $path/set_perms_web.sh ]; then
    chmod 700 $path/set_perms_web.sh
    chown root:root $path/set_perms_web.sh
    echo "Alle Änderungen in \"$path/set_perms_web.sh\" sind durchgeführt!"
else
    echo "\"$path/set_perms_web.sh\" ist nicht vorhanden!"
fi

Wer Fragen oder Ergänzungen zum Berchtigungs-Script für Piwik hat, kann dies gern in den Kommentaren posten. Ich nutze dies in einer erweiterten/ abgewandelten Form für alle Webprojekte.