Wordpress und Plugins automatisch aktualisieren ohne den FTP-Dialog

Ich dachte lange Zeit das Verhalten von Wordpress, nach einem Klick auf "automatisch aktualisieren" (Siehe Bild 1 - "automatisch aktualisieren ohne korrekte Rechte") einen Dialog einzublenden, in dem man FTP-Zugangsdaten eingeben muss um das zuvor am PC heruntergeladene ZIP-Archiv mit der neuen Pluginversion auf seinen Server hochzuladen (Siehe Bild 2 - "FTP-Abfragemaske"), seie der Standard und die einzige Methode, die diese Funktion anbietet, um ein Plugin auf eine neue Version zu aktualisieren. War für mich natürlich extrem blöd, da ich gar keinen FTP Dienst hier auf meinem Server benötige. Was ich hoch- und herunterladen möchte, transferiere ich per SCP. Ein Einfallstor weniger, deutlich sicherer da von Haus aus verschlüsselt und solche Features wie Up-/Downloadquota benötige ich ohnehin nicht.

[caption id="attachment_782" align="aligncenter" width="289" caption="automatisch aktualisieren ohne korrekte Rechte"]automatisch
aktualisieren ohne korrekte
Rechte{.size-medium .wp-image-782 width="289" height="300"}[/caption]

[caption id="attachment_783" align="aligncenter" width="289" caption="FTP-Abfragemaske"]FTP-Abfragemaske{.size-medium .wp-image-783 width="289" height="300"}[/caption]

Das dieses die einzige Methode ist ist jedoch garnicht der Fall! Ja, nicht einmal um die Standardvariante handelt es sich; das ganze ist schon eine Fallback-Funktion. Hat man sein WordPress richtig konfiguriert, wird man garnicht nach FTP Zugangsdaten gefragt, sondern Wordpress läd die Datei selbstständig von der Wordpress-Seite des Plugins herunter, deaktiviert es, überschreibt die alte Version mit der neuen und aktiviert diese anschließend wieder. Es hält sich somit an seine eigenen Empfehlungen und könnte komfortabler nicht sein.

Warum klappt es jedoch bei so vielen nicht und wieso können einem auf Nachfrage die meisten Experten nichtmal sagen warum beim einen das Autoupdate und beim anderen die FTP-Datenabfrage kommt? Die Antwort auf die zweite Frage habe ich selber nicht parat, aber die Antwort auf die erste versuche ich im folgendem zu geben und versuche das ganze so leicht verständlich wie möglich zu halten.

Der Webserver ist an sich auch nur ein Programm, welches als ein bestimmter User läuft. Der Webserver darf also auch immer nur auf genau die Ressourcen zugreifen (und mit den entsprechenden Rechten), wie es ein User auf der Shell, der als dieser User angemeldet ist, auch dürfte. Als welcher User/Gruppe der Webserver laufen soll, legt man beispielsweise beim Apache mit den Optionen "User" und "Group" fest. Im folgenden gehe ich exemplarisch davon aus, das es sich hierbei bei beidem um "apache2" handelt.
Dementsprechend muss ein Verzeichnis in dem der Webserver Dateien ablegen, verändern oder entfernen soll, auch mit den entsprechenden Rechten für diesen User versehen werden. Für Wordpress' Plugins wäre dieses das Verzeichnis "wp-content/plugins/". Selbstverständlich muss der User apache2 in diesem, sowie dessen Unterverzeichnisse für Dateien mindestens 644 und für Verzeichnisse mindestens 755 Rechte haben. Selbiges gilt jedoch natürlich für alle anderen Verzeichnisse, in denen der Webserver Daten ändern können muss, wie "wp-content/themes" oder "wp-content/uploads" gleichermaßen.
Jedoch war dieses immer schon so bei mir, und dennoch habe ich den zuvor genannten FTP-Datenabfrage - Dialog erhalten.

Der Knackpunkt ist, das die Datei "wp-admin/update.php" dem User gehören muss, als der der Webserver läuft. Es genügt nicht das dieser User einfach sämtliche benötigten Rechte auf diese Datei haben muss, sie muss ihm tatsächlich gehören! Einen durch Berechtigungen gerechtfertigten Grund hierfür gibt es nicht, die Routine ist schlichtweg so programmiert. Selbstverständlich könnte man dieses Stück Code verändern, nur muss man das dann nach jedem Core - Update wiederholen. Grundsätzlich lässt man von sowas die Finger!

Ist also beides gegeben, passende lese-/schreibrechte in den genannten Verzeichnissen, sowie das Eigentumsrecht auf die Datei "wp-admin/update.php", funktioniert es auch mit dem auto-Update!

[caption id="attachment_784" align="aligncenter" width="289" caption="Funktionierendes Wordpress Plugin-Auto-Update"]Funktionierendes Wordpress
Plugin-Auto-Update{.size-medium .wp-image-784 width="289" height="300"}[/caption]

Vielen Dank an dieser Stelle an Stefan David, der auf seinem Blog-Beitrag nach Monaten als einziger in der Lage war, dieses Phänomen mal aufzudröseln! :)

Teilen per: TwitterEmail


Modding der Fritzbox - Teil 2

Im ersten Teil meines Fritzbox - Modding Tagebuches habe ich, referenzierend auf weitere Web-Quellen, erklärt, wie ich einen Telnet Server auf der Fritzbox installiert habe.

Heute möchte ich das gerne um einen FTP Server erweitern, da dieses den Austausch von Daten stark erleichtert.

Der Schritt, den Telnetserver zu installieren, scheint in nahezu allen anderen Tutorials die Grundvoraussetzung zu sein. So auch für dieses: Wer einen FTP Server haben will, braucht an dieser Stelle bereits einen Zugang zur Fritzbox per Telnet.

Wie werden Configdateien auf der Fritzbox editiert?

Meistens werden Erweiterungen aufgrund des relativ kleinen, fixen Speichers, der einen Neustart der Box übersteht, beim booten der Box aus dem Internet gezogen. Dadurch muss der Speicher nur für ein Shellscript reichen.

Der Arbeitsspeicher der Box ist reichlich bemessen. Ich meine gelesen zu haben das dieser 32 MB groß ist.

Die am meisten editierte Datei auf der Fritzbox ist /var/flash/debug.cfg, da diese durch andere Fritzbox-eigenen Mechanismen nicht beeinträchtigt wird. Man könnte fast meinen sie sei für User-Modifikationen gemacht ;)

Diese Datei kann nicht direkt per FTP oder einem Editor bearbeitet werden. Wer genau wissen will warum, der lese bitte hier.

Daher muss man die Datei zunächst in den Temporären RAM-Speicher "kopieren". Das geht wie folgt:

cat /var/flash/debug.cfg > /var/tmp/debug.cfg

So werden die verteilten Stücke der Datei in eine "echte" Textdatei in /var/tmp/ (RAMdrive der Fritzbox) zusammengefügt.

Diese Datei kann man nun editieren.

Die bearbeitete Datei kann man wiederum ganz normal kopieren:

cp /var/tmp/debug.cfg /var/flash/debug.cfg

Meine Datei sieht nach der Installation des Telnet Servers wie folgt aus:

#!/bin/sh
#>>TELNET
if [ "\$(busybox | grep -c ' telnetd,')" = "1" ];then
/bin/busybox telnetd -l /sbin/ar7login
else
{
while !(ping -c 1 lcr.telefonsparbuch.de); do sleep 5; done
wget -qO /var/utelnetd http://lcr.telefonsparbuch.de/software/fritzbox/utelnetd

# Ohne Kennwort-Abfrage
# echo "root::0:0:root:/var/tmp:/bin/sh" > /etc/passwd
# chmod +x /var/utelnetd
# /var/utelnetd -d -l /bin/sh

# Mit Kennwort-Abfrage
chmod +x /var/utelnetd
/var/utelnetd -d -l /sbin/ar7login
} &
fi
#<<TELNET

Ich beginne an dieser Stelle mit der Einrichtung des FTP Servers, da ich keine Lust habe diese Datei rein mit cat - Befehlen zu editieren...

Dazu ersetze ich den obigen Dateiinhalt durch den folgenden:

#!/bin/sh
#>>TELNET
if [ "\$(busybox | grep -c telnetd,)" = "1" ];then
/bin/busybox telnetd -l /sbin/ar7login
else
{
while !(ping -c 1 www.zoosau.de); do sleep 5; done
wget -qO /var/utelnetd http://www.zoosau.de/software/Internet_und_Netzwerk/fritz.box/utelnetd
chmod +x /var/utelnetd
/var/utelnetd -d -l /sbin/ar7login
} &
fi
#<<TELNET
#>>FTP
cd /var/tmp
while !(ping -c 1 www.zoosau.de); do sleep 5; done
wget -qO /var/tmp/bftpd http://www.zoosau.de/software/Internet_und_Netzwerk/fritz.box/bftpd
wget -qO /var/tmp/bftpd.conf http://www.zoosau.de/software/Internet_und_Netzwerk/fritz.box/bftpd.conf
chmod +x /var/tmp/bftpd
./bftpd -d -c /var/tmp/bftpd.conf
#<<FTP

echo "ww:PASSWORTHASH:0:0:root:/:null" >> /var/tmp/passwd

PASSWORTHASH kann man unter Linux mit dem tool htpasswd hervorragend erzeugen:

htpasswd -n username

Nach einem Fritzbox - Neustart sollte ich mich sowohl per Telnet wie auch FTP anmelden können ... siehe da: Es geht! :)

Teilen per: TwitterEmail