Sprechende URLs mit GetSimple CMS und nginx

Ich liebe so kleine CMSe wie GetSimple, mit denen man ohne Datenbank-Gedönse schnell eine kleine performante Website hochziehen kann. Auf einem Raspberry Pi 2B habe ich einen Webserver mit nginx aufgesetzt, die Dateien von GetSimple CMS eingespielt – und läuft. Nun kann nginx leider nicht mit den .htaccess-Dateien von Apache umgehen, mit denen man z. B. Zugriffsbeschränkungen und Redirects steuern kann. Das führt bei GetSimple dazu, dass man im Backend unter den Einstellungen den Haken bei „Nutze freundliche URLs – Erfordert mod_rewrite auf Ihrem Server“ zwar setzen kann, wenn man dann aber auf der Website in der Navigation auf entsprechende Unterseiten klickt, rennt man gnadenlos auf einen Server-Error 500.

Hier muss man also statt .htaccess direkt in der Serverkonfiguration editieren. Unter /var/www/etc/nginx/sites-available öffnet man mit su-Rechten die Datei „default“. In dem Bereich „server { … }“ sucht man sich den Eintrag „location / { … }“ und fügt dort folgende Zeile ein:

try_files $uri $uri/ /index.php?id=$uri&$args;

Dieser Eintrag sorgt dafür, dass GetSimple URLs umschreiben kann. Jetzt diese Datei speichern und mit „sudo service nginx restart“ den Webserver neu starten. Und nun klappt es auch mit den Fancy URLs. Das wird übrigens auch die SEO-Freaks freuen.

Wer sich in die GetSimple-optimierte nginx-Konfiguration einarbeiten möchte: Hier findet man eine gute Dateivorlage mit den Zugriffsrechten innerhalb der GetSimple-CMS-Verzeichnisstruktur.

 

Windows10-Upgrade zerstört Grub-Konfiguration

Auf meinem Arbeitsnotebook mit LinuxMint 17.1 habe ich nebenher noch ein Windows 8.1 mit Grub und entsprechend mühsam eingerichteter UEFI-Konfiguration am Laufen. Nun kam der Tag des (automatisierten) Windows-10-Upgrades. Mutig, wie ich ja bin, habe ich das einfach mal laufen lassen. Hat auch alles auf den ersten Blick geklappt, aber dann kam der große Schreck: Beim Versuch, das Grub-Bootmenü von Linux zu starten, rannte der Rechner prompt in den – genau – Grub-Rescue-Prompt. Somit war LinuxMint erst mal nicht mehr erreichbar.

Wie ich später herausfand, hat das Windows-10-Upgrade die Reihenfolge und Attribute der Partitionen verändert (getreu dem Gebot „Du sollst keine anderen OS neben Windows 10 haben“) – die Linux-Bootpartition war nicht mehr dort, wo Grub sie vermutete. Ich hätte jetzt versuchen können, ein Linux von einer Boot-CD-ROM oder einem USB-Stick zu starten, um dann Reparaturversuche durchzuführen. Ich habe es dann aber doch mit Bordmitteln auf dem Grub-Rescue-Prompt hinbekommen.

Zunächst habe ich mit „ls“ nachgesehen, welche Partitionen überhaupt vorhanden sind. Ergebnis bei mir war (hd0,gpt10), (hd0,gpt9), (hd0,gpt8) … (hd0). Welche davon ist jetzt die Linux-Partition, die ich starten möchte? Das findet man heraus, indem man nacheinander „ls (hd0,gpt1)/“, „ls (hd0,gpt1)/boot“, „ls (hd0,gpt2)/“, „ls (hd0,gpt2)/boot“ usw. eingibt. Meist wird man eine Fehlermeldung erhalten, dass das Filesystem nicht erkannt werden konnte. Irgendwann wird man aber das Laufwerk entdecken, welches das Linux-Hauptverzeichnis enthält – das war in meinem Fall (hd0,gpt9). Viel Spaß übrigens mit der deutschen Tastatur und den Zeichen „()/=“ 🙂

Als nächstes habe ich mit „set“ kontrolliert, wo Grub seine Konfigurationsdateien sucht. Das Ergebnis war in meinem Fall:

prefix=(hd0,gpt8)/boot/grub
root=(hd0,gpt8)

Aha! Ich habe doch zuvor festgestellt, dass mein Linux-Laufwerk (hd0,gpt9) ist. An der Stelle hat Windows 10 also herumfuhrwerkt! Ehemals Partition gpt8 ist jetzt gpt9. Jetzt gilt es also, die Einstellungen für prefix und root so einzustellen, dass Grub seinen Kram wieder findet. Und das geht so:

set prefix=(hd0,gpt9)/boot/grub
set root=(hd0,gpt9)

Wenn man jetzt in die normale Menüansicht von Grub möchte, gibt man Folgendes ein:

insmod normal
normal

Wenn Sie alles richtig gemacht haben, sehen Sie jetzt wieder Ihr altbekanntes Grub-Bootmenü. Juhuuuuu! Aber nicht zu früh freuen! Beim nächsten Booten rennen Sie garantiert wieder in den Grub-Rescue-Prompt. Wenn Sie jetzt auf dem Grub-Bootmenü stehen, stellen Sie den Leuchtbalken auf den Eintrag, der Ihr Linux starten soll, und drücken ‚e‘ (wie „edit“). Hier ändern Sie jetzt überall, wo noch der falsche gpt-x-Wert steht, auf den neuen – bei mir also überall, wo noch ein gpt8 steht, ein gpt9 setzen. Nun F10 drücken – und Linux startet!

Nun sind wir auch schon fast am Ziel. In einer Konsole geben wir nun noch ein „sudo grub-install“ ein, und Grub wird aktualisiert – auch das neue Windows wird erkannt. Jetzt kontrollieren wir nochmal zur Sicherheit die /etc/fstab mit einem Editor (nano, vim, was Sie mögen). Die gemounteten Partitionen mit einem UUID-Identifier stellen natürlich kein Problem dar, sollten Sie dort aber Laufwerke mit einem /dev/…-Eintrag finden, sollten Sie die entsprechende Zeile auf die neuen Gegebenheiten anpassen.

 

Bing-Desktop mit hoher CPU-Last

Die Windows-App „Bing-Desktop“ finde ich eigentlich ganz nett – insbesondere die Funktion mit dem täglich neuen Bing-Startseitenbild als Bildschirmhintergrund. Seit einer Woche stelle ich jedoch fest, dass der Notebook-Lüfter im Dauerlauf rennt und mir der Taskmanager anzeigt, dass Bing-Desktop über 50 Prozent Prozessorlast für sich vereinnahmt. Außerdem wird seit Tagen das tägliche Hintergrundbild nicht mehr aktualisiert.

Hier hilft nur, in der Systemsteuerung unter „Programme“ das Ding rauszuschmeißen und neu zu installieren. Download gibt’s hier.

Wieder einmal PuTTY: Darstellung von Linien, Umlauten und Sonderzeichen

Ich greife öfter mittels des Terminalprogramms PuTTY unter Windows auf Linux-Rechner zu – insbesondere auf meine Raspberry Pis. Nun kommt es immer wieder mal vor, dass bestimmte zeichenorientierte Anwendungen auf einer Linux-Konsole in PuTTY falsch dargestellt werden. Ich muss z. B. häufig mit dem alsamixer Audio-Einstellungen der USB-Soundcard eines Raspberrys ändern. Aus den gewohnten Rahmenlinien wird in PuTTY ein Buchstaben-Mix umgesetzt, die als lppk-Zeichenfolge bekannt ist. Hinzu kommt, dass die F-Tasten in PuTTY nicht richtig funktionieren und dafür sorgen, dass alsamixer beendet wird, wenn ich mit F3 bzw. F4 zwischen den Wiedergabe- und Aufnahmeeinstellungen umschalten will. Hier helfen einige PuTTY-Einstellungen.

raspberry_putty-lqqk

Diese verwurstete Darstellung nervt mich schon seit Jahren.

 

Unter Connection/Data ist es wichtig, dass man im Feld „Terminal-type String“ das vorgegebene „xterm“ durch das Wort „linux“ ersetzt. Achtung – kontextsensitiv! „linux“ muss komplett kleingeschrieben werden. Somit haben wir die richtige Rahmendarstellung schon mal im Griff. Nun ist es noch wichtig, unter Terminal/Keyboard unter „Function keys and keypad“ den Radiobutton „Linux“ zu setzen – dann funktioniert es auch mit den F-Tasten.

putty-alsamixer

So soll es sein!

 

Eigene Webseiten vor fremden Frames schützen

Es kommt ja immer wieder mal vor, dass die eigene Homepage irgendwo im Web von fremden Leuten per HTML-Frame eingebunden wird – diese Leute machen sich also fremde Webseiten zu eigen. Okay – das mag allenfalls ein urheberrechtliches Problem sein, aber man kann diese uralte HTML-Technik (Frames sind in HTML5 nicht mehr vorgesehen!) auch für richtig bösartige Sachen nutzen. Da baut sich jemand Böses einen Frameset, bindet darin meine Webseite ein und verlinkt seinen Frameset z. B. bei Twitter. Nun wird meine Webseite von zigtausenden Surfern angeklickt – schlimmstenfalls reißt das meinen Webserver in die Knie. Oder jemand lässt mittels Frames meine schöne, hochkulturell wertvolle Seite zusammen mit was-weiß-ich-was-für Seiten im Browser erscheinen.

Wie kann man das nun verhindern? Nun, ich betreibe eine kleine Homepage auf einem Apache2-Server auf einem Raspberry Pi (für wenige Besucher pro Stunde reicht das voll und ganz). In der httpd.conf habe ich eine Zeile eingefügt, welche bewirkt, dass in dem HTTP-Response-Header eine Anweisung ausgegeben wird, dass meine Webseiten nur von meinem eigenen Webserver in Frames eingebunden werden darf. Diese Zeile lautet wie folgt:

Header always append X-Frame-Options SAMEORIGIN

Anstatt „SAMEORIGIN“ kann man auch die Option „DENY“ setzen. Dann darf nicht mal mehr mein eigener Webserver den Content in Frames darstellen – wer weiß, was meine Designer-Kollegen da für einen Unfug treiben 🙂

Nachdem man die Änderung in der httpd.conf gespeichert hat, startet man den Webserver mit sudo service apache2 restart neu. Sollte es beim Neustart zu Fehlermeldungen kommen, ist in der Apache2-Konfiguration das Modul „mod_headers“ nicht aktiviert. Dies kann man nachholen, in dem man in der Konsole „sudo a2enmod headers“eingibt. Jetzt sollte der Apache2-Neustart fehlerfrei laufen.

Und wie testet man jetzt, ob die Änderung wirklich aktiv ist? Hier gibt es eine Testseite, in der man sich den HTTP-Header des eigenen Webservers (und natürlich jedes anderen Webservers der Welt) ansehen kann. Dort sollte jetzt die Zeile

X-Frame-Options: SAMEORIGIN

erscheinen.

Übrigens: Wenn Sie keinen Zugriff auf die Servereinstellungen Ihres Webspaces haben – man kann auch mit .htaccess das Kapern Ihrer Webseiten mit Frames verhindern. Die hinzuzufügende Zeile lautet: Header append X-FRAME-OPTIONS „SAMEORIGIN“

Ach ja, und wo wir schon mal dabei sind: Wenn Sie in der Auflistung des HTTP-Headers die Zeile sehen: „X-Powered by“ – und dahinter Ihre detaillierte PHP-Version (ein Freudenfest für Hacker!), sollte man das schleunigst in der php.ini abschalten, indem man in der Zeile expose_php = On das „On“ durch ein „Off“ ersetzt.

Windows 8.1 Update 1 – Fehler bei der Installation und Lösung

Naaaaaa? Haben Sie auch Probleme bei dem Pflicht-Update von Windows 8.1 (KB2919355), zu welchem Microsoft uns zwingt, damit der geneigte Anwender auch im nächsten Monat zum Patch-Day noch Updates erhält? Bricht nach dem langwierigen Download und dem noch langwierigeren Installationsversuch der Updater mit der Fehlermeldung „Das Update wurde nicht installiert“ und der Nummer 0x80070002 oder 0x80073712 ab? Haben Sie auch schon tausend Sachen versucht, wie z. B. das System zu „refreshen“, Windows-Update reparieren – und nichts hat geholfen?

Dank WinFuture.de bin ich auf einen Fix gestoßen, der bei mir  geholfen hat:

1. Öffnen Sie eine Administrator-Eingabeaufforderung.

2. Geben Sie nacheinander folgende Befehlszeilen ein.

  • dism /online /remove-package /packagename:Package_for_KB2919355~31bf3856ad364e35~amd64~~6.3.1.14
  • dism /online /cleanup-image /startcomponentcleanup

Nachdem diese Schritte durchgelaufen sind, starten Sie noch einmal das Windows Update in der Systemsteuerung, suchen nach neuen Updates und downloaden/installieren Sie das KB2919355 noch einmal. Das sollte dann endlich hinhauen.

Ein offizieller Fix seitens Microsoft steht derzeit (13.04.2014) noch aus.

Linux Mint mit apt-get online upgraden

Ich arbeite seit einiger Zeit produktiv auf einem Linux-Mint-Notebook. Ebenfalls seit einiger Zeit werden für Linux Mint 15 (Olivia) online keine Updates mehr geliefert. Nun ist es so, dass Mint empfiehlt, ein Upgrade auf eine neue Version nach der Brachial-Methode durchzuführen. D. h. Backup der persönlichen Daten und Einstellungen mit dem Mint-eigenen Backup-Tool, Festplatte plätten und neue Version von CD/DVD installieren – und dann mit besagtem Backup-Tool eigene Software, Einstellungen und Daten wieder restoren. Soll ja angeblich viel sauberer und sicherer sein und bla …

Das habe ich vor ein paar Monaten bei Erscheinen der Version 16 (Petra) ein einziges Mal genau so durchgezogen – mache ich aber auch nie wieder so! Die neue Version wollte nach der Installation nicht so recht (Probleme mit Grafik und WLAN), und das Wiedereinspielen von dem eigenen Krams passte vorne und hinten nicht mehr. Also habe ich alles wieder gelöscht und Version 15 eingespielt. Auch hier erwies sich das Restore etwas problematisch, aber nach ca. einer Woche hatte ich meine (offenbar doch sehr spezielle) Konfiguration wieder so, wie ich es brauchte. Also viel Zeit kaputt gekriegt für nichts und wieder nichts.

Nun blieben unter Linux Mint 15 allmählich die Updates aus, also musste ich doch mal einen Weg finden, das System auf Version 16 lauffähig zu kriegen. Also habe ich mich an ein Online-Update mittels apt-get gewagt. Um es kurz zu machen: Es hat alles auf Anhieb geklappt. Vorgehensweise wie folgt:

In einer Konsole folgende Befehlszeilen abdrücken:

sudo sed -i ’s/raring/saucy/‘ /etc/apt/sources.list
sudo sed -i ’s/olivia/petra/‘ /etc/apt/sources.list
sudo sed -i ’s/raring/saucy/‘ /etc/apt/sources.list.d/official-package-repositories.list
sudo sed -i ’s/olivia/petra/‘ /etc/apt/sources.list.d/official-package-repositories.list

Und dann das eigentliche Upgrade:

sudo apt-get update
sudo apt-get dist-upgrade

Jetzt gehen Sie erst mal – je nach Bandbreite Ihrer Internetverbindung und Tempo Ihres Rechners – für zwei Stunden Kaffee trinken. Schauen Sie aber zwischendurch immer mal, was sich so tut, denn zwischendurch kommen immer mal Fragen, ob neue Konfigurationsdateien installiert werden sollen. Lieber immer auf „N“ wie „No“ tippen – wenn alles läuft, kann man hinterher immer noch manuell eingreifen.

HALT – noch nicht neu booten! Wenn alles durch ist, noch einmal mit

sudo apt-get upgrade

das System auf den neuesten Stand bringen. Hierbei werden auch noch evtl. defekte Paketabhängigkeiten repariert.

Abschließend mit sudo shutdown -r now den Rechner neu starten.

Viel Glück 😉

 

WordPress: Upload-Limit erhöhen

In einer neuen WordPress-Umgebung mit podPress stand ich vor dem Problem, dass das vom Hoster vorgegebene Limit von Uploads per PHP-Funktionen – 8 MB – zu klein war (meine Podcast-Audiodateien sind bei Weitem größer). Auf der Medien-Upload-Seite in WordPress nervte schon die warnende Fußzeile „Maximale Dateigröße für Upload: 8 MB.“ Auf die php.ini meines Webpacks habe ich keinen Zugriff, somit konnte ich so ohne Weiteres dieses Limit nicht erhöhen.

Aber es gibt eine einfache Lösung, wie man dieses Limit aushebeln kann: wieder einmal htaccess. Man schreibt einfach eine Datei „.htaccess“ mit folgendem Inhalt:

<IfModule php5_module>
php_value upload_max_filesize 60M
php_value post_max_size 60M
php_value max_execution_time 1200
php_value max_input_time 1200
</IfModule>

Diese .htaccess lädt man dann per FTP in das WordPress-Unterverzeichnis „wp-admin“ hoch, und schon ist das Upload-Limit auf 60 MB heraufgesetzt. Außerdem hat man nun 1.200 Sekunden (20 Minuten) Zeit für den Upload größerer Dateien. Natürlich könnte ich vorab große Audiofiles auch per FTP uploaden und den entsprechenden Path dann im Blogbeitrag in WordPress einbinden. Aber is doch schöner so, nä?

Ich hoffe, dass Ihr Webhoster solche .htaccess-Spielchen ebenfalls zulässt. Wie ich hörte, funktioniert das nicht überall. Also: Ausprobieren.

Verzeichnisinhalte auf dem Webserver verstecken

Heute mal ein Thema aus der Kategorie „Wie war das nochmal?“ – es gibt halt Dinge, die macht man nicht jeden Tag und muss man immer wieder nachlesen. Und jetzt auch wieder sowas. Wovon spricht der Mann? Also: Häufig stößt man beim Surfen auf Webseiten, bei denen eine HTML-Seite nicht mehr vorhanden ist und stattdessen die Dateien eines Ordners auf dem Webserver angezeigt werden. Das ist nicht nur unprofessionell, sondern möglicherweise auch eine Sicherheitslücke, denn die Inhalte der angezeigten Dateien können u. U. viel über die Server- und Websitekonfiguration verraten (insbesondere bei PHP-basierten Sites).

Verzeichnis des Webservers

Sowas sollte man NIE sehen können!

Wenn ich also einen Unterordner auf einem Server à la „http://www.ihredomain.de/verzeichnis“ ansurfe, in dem z. B. keine index.html liegt, kann es passieren, dass mir die Dateien angezeigt werden, die in diesem Verzeichnis liegen. Da hat sich der Administrator wohl wenig um Sicherheit gekümmert – oder schlicht und einfach gepennt. Wie kann man das also verhindern? Mehrere Möglichkeiten:

1. Wenn man selber den Webserver betreibt (bei mir ein Apache2 unter Linux), trägt man in der Konfigurationsdatei des Apache – früher war das mal „httpd.conf“, in aktuellen Distris findet man diese meist als „/etc/apache2/sites-available/default“ – Folgendes ein:

<Directory „/var/www“>
Options -Indexes
Order allow,deny
Allow from all

</Directory>

Wenn man nach einem Apache-Neustart o. g. Ordner ansurft, erhält man eine Fehlermeldung „403 – Forbidden“. Dies betrifft übrigens alle Ordner der Website, in denen keine index.html o. ä. vorhanden ist. Für einzelne Ordner kann man, so gewünscht, diesen Zugriff wieder einschalten, z. B. für einen Downloadordner:

<Directory „/var/www/downloads“>
Options +Indexes
Order allow,deny
Allow from all
</Directory>

2. Diese Möglichkeit habe ich eigentlich schon verraten: wenn in einem Verzeichnis keine index.html vorhanden ist, legt man dort ganz einfach eine solche ab. Diese kann auch leer sein. Ruft man mit dem Browser ein solches Verzeichnis auf, erscheint schlicht eine weiße Seite – eben die leere index.html. Das ist natürlich nicht sehr benutzerfreundlich, denn der geneigte User weiß nicht, warum er nur eine leere Seite bekommt. Daher sollte in dieser index.html z. B. drinstehen, warum hier nichts angezeigt wird. Oder man leitet per Meta-Refresh gleich auf die Startseite weiter.

3. Legen Sie in das Hauptverzeichnis Ihres Webservers eine Datei .htaccess ab und schreiben Sie in diese folgende Zeile hinein: Options -Indexes Dies hat den selben Effekt wie unter Punkt 1 beschrieben: in sämtlichen Unterverzeichnissen werden keine Dateien im Browser mehr angezeigt (Spezialisten wissen, wie man auch hier mittels .htaccess-Steuerung gleich auf die Startseite weiterleitet). Ausnahmen mit Verzeichnis-Zugriffserlaubnis kann man im jeweiligen Ordner einrichten, wenn man dort eine eigene .htaccess-Datei speichert und dort die Zeile Oprion +Indexes hinzufügt. Voraussetzung ist natürlich, dass Ihr Webserver (oder Ihr Hoster) .htaccess unterstützt. Wie man .htaccess – so denn notwendig – auf dem Apache2 aktiviert, habe ich in einem früheren Beitrag schon einmal beschrieben. Wenn man es nun noch ein wenig weitertreibt, kann man sich auch noch eine schicke Standard-Fehlermeldung-403-Seite basteln.