Offenbar hatte sich beim letzten WordPress-Update klammheimlich meine Gallery-Integration zerlegt – zwar lief hier noch alles wie gewohnt, allerdings wurden die Kurz-URLs nicht korrekt aufgelöst. Schuld war eine (manuelle) Änderung der .htaccess-Datei, die für etwas Chaos sorgte. Während der Fehlerbehebung ist mir aufgefallen, dass meine Gallery nicht ganz auf dem neuesten Stand ist. Zwar verzichte ich noch immer Absichtlich auf Gallery3, jedoch hatte ich offenbar ein XSS-Fix für den 2er-Zweig verpennt. Das Update lief fehlerfrei, jedoch wurden anschließend im Blog keine Bilder mehr angezeigt. Versuchte ich das Bild direkt zu öffnen wurde eine HTML-Seite mit der G2-Fehlermeldung „SECURITY VIOLATION“ gezeigt. Nachdem ich einige Zeit in der falschen Richtung suchte fand sich das Problem bei den Plugins: Meine Fotos werden mit einer Watermark versehen, dass zuständige Plugin war jedoch nach dem Update nicht mehr aktiviert und sorgte bei externen Aufrufen für den Fehler.
Archiv der Kategorie: Software
Alles was mit Software zu tun hat
WordPress / TwentyTwelve: Home umbenennen
WordPress zeigt bei Verwendung einiger Themes (z.B. Twentytwelve) in der Navigation immer auch die Startseite an, nutzt hierbei jedoch nicht den Seitennamen sondern immer die Bezeichnung „Home“. Um dies zu ändern muss man etwas tiefer im System graben: In der Datei wp-content/languages/de_DE.po findet sich eine passende MsgID, der zugehörige Text eine Zeile drunter. Eine Änderung könnte z.B. so aussehen:
…
#: wp-includes/post-template.php:899
msgid "Home"
msgstr "Startseite"
…
Da WordPress auf Gettext setzt muss die PO-Datei noch kompiliert werden. Dies geschieht auf *nix-Systemen z.B. mit
msgfmt -o de_DE.mo de_DE.po
Windowsnutzende Cloudfanatiker können natürlich auch ein entsprechendes Onlinetool benutzen ;).
Stand heute (WordPress 3.5.1 von WPDE) gibt es z.T. Probleme mit der mitgeliferten PO:
de_DE.po:2104: `msgid‘ and `msgstr‘ entries do not both end with ‚\n‘
msgfmt: found 1 fatal error
In diesem Fall im Editor die genannte Zeile öffnen und am Ende der Übersetzung (msgstr) die Newline (\n) löschen.
SmartTan Optic – denn ohne Mensch ists Sicherer?
Bis letztes Jahr war meine Onlinebankingwelt noch in Ordnung – meine Bank hatte seit einigen Jahren mit „SmartTAN Plus“, auch bekannt als „HHD1.2“ ein für mich akzeptables System im Einsatz: Hierbei erhielt man ein kleines, eigenständiges Gerät mit Kartenleser, Tastatur und Display – in meinem Fall war es ein TanJack Plus von Reiner-SCT . Wird eine Onlineüberweisung o.Ä. gestartet erhält man eine Zufallszahl – hat man seine Bankkarte in das Gerät gesteckt gibt man diese zusammen mit der Kontonummer des Empfängers in das Gerät ein. Hat man alle Daten bestätigt zeigt der Leser eine 5 stellige Nummer an über welche man die Transaktion auf der Bank-Webseite bestätigen kann. Zwar liegen die Spezifikationen großteils nicht offen, aber durch die Trennung zwischen PC und Tan-Generator ist ein gewisser Schutz gewährleistet. Alternativ bietet die Bank mit m-Tan auch eine Handy-Lösung an bei welcher die TAN als SMS zugestellt wird, aber das möchte man natürlich nicht…
Nun steht für Kunden des HHD1.2 ein Update auf HHD1.4, auch bekannt als SmartTan Optic oder SmartTan Comfort an. Bei dieser Lösung wird nun auch der Betrag zur Erstellung der TAN verwendet, die große Neuerung ist aber die Übertragung: Statt einer Eingabe auf dem Keypad sorgt nun eine animierte Grafik auf der Bankwebseite/-software in Zusammenarbeit mit Fotodioden an den (selbstverständlich auf eigene Kosten neu anzuschaffenden) Lesern für die Übertragung der Daten. Auf der Seite der VR Bank Rhein Sieg heißt es hierzu beispielsweise:
Sicherheit und Komfort für mehr Vertrauen
[…]Die optische Schnittstelle liest die notwendigen Kontrolldaten vom Monitor direkt in das Lesegerät ein.[…]Das Zwei-Schritt-Verfahren ist so für den Bankkunden noch komfortabler – bei gleichbleibender Sicherheit.
Nunja, komfortabler ja, aber sicherer? Zum Ersten entfällt die „Zwangsprüfung“ der Kontonummer bei der Eingabe. Da die Daten direkt im TAN-Generator landen ist die Verlockung groß ohne weitere Prüfung schnell mit OK zur TAN durchzuhechten. Zum Anderen geht auch die Kontrollmöglichkeit verloren – zwar ist der verwendete Flickercode bereits halbwegs entschlüsselt, aber wer prüft das schon? (OK, ich…) Es existiert also eine nur schwer prüfbare (einweg)Verbindung – genau das, was man eigentlich nicht möchte. Wer sagt mir, dass hier nicht neben den Bankdaten schnell eine neue Firmware übertragen wird? Zumindest einige Konfigurationscodes für die Tastatur zur Änderung des Leser-Verhaltens lassen sich im Netz finden, die Programmstrukturen sind also definitiv nicht vollständig in Hardware abgebildet. Das schlimme dabei: Wenn man tatsächlich von einem solchen Angriff betroffen wäre dürfte es schwer werden die Bank davon zu überzeugen, dass es ein Systemfehler ist – man würde vermutlich auf dem Schaden selbst sitzen bleiben. Ja, ich weiß, ich bin in der Ecke etwas Paranoid, aber zumindest bei der Eingabevalidierung nimmt es das Gerät nicht ganz so genau, denn nunja, mit etwas Javascript im Browser (welcher beispielsweise per Trojaner auf der Bank-Webseite eingeschleust werden könnte) bringt der Leser beispielsweise folgende Ausgaben:
(Technischer Hinweis: Der Betrag wird im Flicker-Code als ASCII codiert, hierbei sind neben Zahlen auch Buchstaben und einige Sonderzeichen möglich. Selbstverständlich kommt hierdurch keine gültige TAN mehr raus, eine Gefahr besteht hierdurch also nicht – allerdings ist es auch kein gutes Ohmen für die allgemeine Codequalität des Systems.)
Weiter habe ich nicht probiert, da das Gerät bei den Tests für diese Aktion bereits sehr fragil reagierte wollte ich den Leser nicht mit Zeilenumbruch oder NULL-Zeichen komplett aus der Fassung bringen… Nunja, bei meiner Bank ist auch eine manuelle Eingabe der Daten weiterhin möglich, auch wenn der versprochene „Comfort“ für mich damit ein großes Minus davor hat – für das ich natürlich auch noch zahlen darf.
Linux: Anzahl der geöffneten Dateien pro Prozess anzeigen
*Poff* – das war die Wand der maximal geöffneten Prozesse auf einem Linux-System – praktisch wäre es jetzt noch zu wissen welcher Prozess dafür verantwortlich ist. In diesem Fall hilft folgender Befehl – er erstellt eine Liste aller Prozesse mit der Anzahl der geöffneten Dateien, die verschwenderichsten oben:
lsof | cut -d ' ' -f 1 | uniq -c | sort -r
Auf der Suche nach den inodes
So ein Linux-Server mit ext4 ist nicht so schnell klein zu bekommen – ich schaffs aber natürlich trotzdem. Auf einem meiner App-Server verabschiedete sich übers Wochenende der Datenbankserver. Diagnose eindeutig: Platte voll, 0 Bype frei. Der Auslöser ist auch schnell ausgemacht – mangels logrotate haben sich über 8GB in /var/log angesammelt. Klare Sache – Logs löschen, Dienste neustarten undnichts. Platte voll. Dafuq? Am Platz liegts nicht – dort sind die 8GB nun frei – ich vermute Böses…
# df -h /
Filesystem Size Used Avail Use% Mounted on
/dev/root 23G 14G 8.2G 62% /
# df -i /
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/root 1474560 1474560 0 100% /
Treffer versenkt – die Inodes sind voll. Aber warum? Nach kurzem Gegoogle gehe ich davon aus, dass meist eine Datei = ein Inode ist, also wird die Bash-Keule ausgepackt:
(for i in `find / -xdev -type d 2>/dev/null` ;do (echo -n `ls -1a "$i" | grep -vP "^(.|..)$" |wc -l` && echo " - $i") ;done) | sort -n
Dieser Code erzeugt eine Liste aller Ordner auf dem Device der Root-Partition – aufsteigend nach der Anzahl der Dateien sortiert. In meinem Fall ist der Schuldige relativ eindeutig:
[...]
1460 - /usr/share/man/man1
1620 - /usr/portage/metadata/cache/dev-perl
1620 - /usr/portage/metadata/md5-cache/dev-perl
1692 - /usr/portage/metadata/glsa
4554 - /usr/share/man/man3
972513 - /var/nagios/home/.maildir/new
Ich sollte mal ein paar Mails löschen -Oder auch nicht, denn…
rm *
-bash: /bin/rm: Argument list too long
also muss auch hier getrickst werden:
find ./ -exec rm {} +
PHP Google+ Library – und es postet doch…
Google+ dümpelt weiter vor sich hin – zwar hält mich die mangelhafte Clientauswahl weiterhin davon ab dort mehr im „Tagesgeschäft“ zu machen, allerdings sind Features wie die Hangouts Gold wert. Meine erste Anforderung für regelmäßige Nutzung bin ich nun einmal angegangen: Ich möchte posten. Nicht über einen vorgegebenen Client, meine Rechner sammeln ohnehin schon eine Menge Informationen zusammen und die sind vermutlich nicht nur für mich interessant. Gut, dass es eine API gibt. Nicht. Googe stellt zwar bereits eine API mit OAuth & Co zur Verfügung, aber die ist derzeit nur lesend zu benutzen.
Zum Glück bin ich nicht der einzige mit diesem Wunsch, so hat Luka Pusic bereits einen Google+-Bot in PHP geschrieben und praktischerweise auf GitHub veröffentlicht. Statt mit einer API zu kämfen emuliert sein Script schlichtweg einen (Handy)Browser und liefert so die Daten bei Google ab. Zwar ist das Ganze nicht unbedingt für Webapplikationen brauchbar, für lokale Single-User-Scripte wie meine aber perfekt. Auf Basis seines Codes habe ich nun eine kleine Google+-Library gebastelt – neben etwas Codeputz gibt es auch eine Funktion um einen Status mit Bilddatei zu veröffentlichen. Leider ist das Mobilinterface recht eingeschränkt, sodass bisher keine (schönen) Links oder Verknüpfungen zu anderen Personen auf G+ möglich sind. Also kein allumfassender G+-Zugriff, aber genug um z.B. einen Twitter2G+-Bot zu realisieren, wie er sich derzeit auf meinem Account austobt. Die Post sind momentan auf den Kreis „Öffentlich“ hardcoded, sollte sich aber bei Bedarf recht leicht anpassen lassen.
Den Code der G+-Lib gibt’s auf GitHub, der Twitter-Bot ist noch nicht so komplex, als das sich das lohnen würde. Und wenn ich schon mit den neuen Netzen rumspiele kann man das Projekt dann auch Flattrn.
Kurzer Report von der Bastelfront
Festivals schön und gut, aber die freie Zeit muss natürlich auch etwas produktiv genutzt werden. Momentan heißt das hauptsächlich Housekeeping – Systeme reparieren und allerhand Basteleien, welche auf die Schnelle erfolgten, halbwegs vernünftig verpacken und fest einbauen. Trotzem sind einige neue Projekte dabei, zu denen ich in Kürze noch mehr schreiben werde, unter anderem hat meine Solaranlage eine neue Überwachungselektronik und viele neue Abnehmer erhalten. Zudem haben einige Webprojekte Updates erhalten, unter anderem kann mein Archivsystem, welches ich für die Bildarchivierung des Geschichtsvereins Saffig entwickelt hatte, inzwischen einige wichtige DMS-Funktionen wie Kontaktverwaltung und ORC erfüllen und sammelt nun in einer lokalen Installation meine Papierkorrespondenz in nerdgerechter Form. Auch einige Haushaltsgeräte sind inzwischen soweit, dass sie theoretisch Meldungen an meinen Steuerrechner übermitteln könnten – wenn denn ein Kabel da wäre. Da die Geräte weit entfernt von jeder Infrastruktur stehen und auf Grund baulicher Gegebenheiten das verlegen neuer Kabel für eine solche „Spielerei“ zu aufwändig wäre habe ich mir einige NRF24l01+ organisiert, ein Funkmodul welches mit integrierter Transportschicht glänzt und mit <3€ preislich sehr ansprechend ist. Leider konnte ich den Sample-Code nicht zum laufen bewegen, daher suchte ich nach Debug-Möglichkeiten. Zum Glück fiel mir mein guter, alter BusPirate wieder in die Hände, welcher sich direkt mal als simpler Logic-Analyzer versuchen durfte und – zu meiner Überraschung – gemessen an Preis und Ausstattung sehr gute Ergebnisse liefert, so konnte ich z.B. ermitteln, dass der Sendebefehl definitiv korrekt ans Sende-Modul übermittelt wird. Also wird gleich die Empfängerseite dran glauben müssen.
Bild: https://www.adlerweb.info/blog/wp-content/uploads/2012/06/test2-300×38.png
Back to the Roots: Gnome 2 – Fork „MATE“ auf Archlinux
Ja, Gnome3 ist toll – wenn man auf grafischen Schnickschnack steht. Zugegeben, auf Netbook und co nutze ich Gnome3 gerne, aber auf meinem PC zählen die Grafikeffekte nicht – im Gegenteil: Sie stören beim Arbeiten. Fehlende Panels, mangelnde Leistung und Probleme mit mehreren Monitoren haben mich seit dem Update nach über 10 Gnome-Jahren dazu gezwungen auf Fluxbox zu wechseln. Das läuft zwar schnell, aber die schonen Panels fehlen mir noch immer – doch jetzt naht Rettung! Mit dem Projekt „MATE“ gibt es einen Gnome2-Fork, welcher einen Großteil der Funktionen der guten, alten 2er-Version auch auf aktuellen Systemen herstellen kann. Für Archlinux gibt es entsprechende AUR-Pakete, für Faule auch ein eigenes Repository. Fühlt man sich gleich wieder daheim…
Sniffing over the Net – Mit Wireshark und tcpdump auf entfernten PCs sniffen
Ja, ich weiß, Paket-Sniffer sind böse Hackertools und so weiter – wer das Denkt sollte hier aufhören zu lesen und erst eine Prise Praxis zu sich nehmen. Gerade wenn es um das Debuggen von Fehlern in Netzwerkverbindungen geht kommt man nur schwer dran vorbei – wenn man nicht gerade zwischen den Geräten sitzt wird es jedoch schnell ungemütlich. Gehen wir fon folgender Konstellation aus, welche bei mir derzeit aufgetreten ist: Ein Mobilgerät kommuniziert mit einer Webbasierten API über HTTP – der Server steht nicht unter meiner Kontrolle und das Mobilgerät ist selbstverfreilich entsprechend vernagelt. Natürlich könnte man nun einen Monitoring-Port an einem Switch zwischen Mobilgerät und Internetzugang nutzen, aber der liegt weit entfernt und ich müsste zwischen zwei Orten pendeln.
Bisher hieß das für nicht: 2-Schritt-Debugging. Erst verband ich mich auf den (Linux-basierten) Router, fertigte mit tcpdump ein Capture-File an und lud es auf den PC um in Wireshark einen Blick in die Pakete zu werfen. Dank eines Hinweises auf einen Artikel bei Commandlinefu kann ich mir das nun sparen – dank Pipes und ssh lassen sich tcpdump und Wireshark so verschalten, dass ein Live-Capture des Remote-Servers im lokalen Wireshark einläuft. Macht das Ganze wesentlich einfacher…
Ein möglicher Befehl wäre z.B.
ssh root@internetrouter tcpdump -i eth0 -U -s0 -w - 'port 80 and host 192.168.1.2' | wireshark -k -i -
der letzte Teil des SSH-Commands entspricht den üblichen tcpdump-Filtern – hier sollte man auf jeden Fall drauf achten, dass man den ssh-Traffic nicht mitschneidet – in diesem Fall ists durch die Host/Port-Einschränkung ja ohnehin gegeben, ansonsten sollte ein ’not port ssh‘ helfen.
Gentoo-Look & Feel für die Archlinux-Bash
Auch wenn Gentoo eigentlich mein Haputsystem ist: Auf Netbooks o.Ä. macht das ganze recht wenig Spaß, daher bin ich vor einiger Zeit über Archlinux gestolpert. Auch, wenn die Stabilität und Flexibilität nicht immer an meine Gentoo-Erfahrungen heran kommen, so kann man sich dank sehr großem Binärrepository und den einfach zu erstellenden PKGBUILDS (ähnlich ebuilds) schnell helfen.
Eins, was mir jedoch gewaltig auf den Keks ging war die Bash-Konfiguration: Viele der „Komfortfunktionen“ wie Farbschemata, Historysuche o.Ä. sind unter Archlinux nicht vorhanden oder haben andere Tastenkombinationen – Abhilfe kann wie folgt erfolgen:
Als erstes muss die .bashrc dran glauben – hier sind die meisten Einstellungen drin. Am einfachsten geht das über das Paket aur/gentoo-bashrc, welches unter /usr/share/gentoo-bashrc/bashrc eine Kopie der Gentoo-Konfiguration anlegt. Nach Prüfung kann man diese Datei als persönliche Einstellungsdatei unter /home/
Was fehlt ist der von mir häufig genutzte Schnellzugriff auf die Bash-History. Damit meine ich, dass wenn ich z.B. „ls“ Tippe mit dem Tasten PgUp und PgDown durch die letzten Befehle, welche mit ls beginnen scrollen kann. Dies läuft über die Datei /etc/inputrc – diese habe ich vollständig durch das Gentoo-Pendant ersetzt:
# /etc/inputrc: initialization file for readline # # For more information on how this file works, please see the # INITIALIZATION FILE section of the readline(3) man page # # Quick dirty little note: # To get the key sequence for binding, you can abuse bash. # While running bash, hit CTRL+V, and then type the key sequence. # So, typing 'ALT + left arrow' in Konsole gets you back: # ^[[1;3D # The readline entry to make this skip back a word will then be: # "\e[1;3D" backward-word # # do not bell on tab-completion #set bell-style none set meta-flag on set input-meta on set convert-meta off set output-meta on # Completed names which are symbolic links to # directories have a slash appended. set mark-symlinked-directories on $if mode=emacs # for linux console and RH/Debian xterm # allow the use of the Home/End keys "\e[1~": beginning-of-line "\e[4~": end-of-line # map "page up" and "page down" to search history based on current cmdline "\e[5~": history-search-backward "\e[6~": history-search-forward # allow the use of the Delete/Insert keys "\e[3~": delete-char "\e[2~": quoted-insert # gnome / others (escape + arrow key) "\e[5C": forward-word "\e[5D": backward-word # konsole / xterm / rxvt (escape + arrow key) "\e\e[C": forward-word "\e\e[D": backward-word # gnome / konsole / others (control + arrow key) "\e[1;5C": forward-word "\e[1;5D": backward-word # aterm / eterm (control + arrow key) "\eOc": forward-word "\eOd": backward-word # konsole (alt + arrow key) "\e[1;3C": forward-word "\e[1;3D": backward-word $if term=rxvt "\e[8~": end-of-line $endif # for non RH/Debian xterm, can't hurt for RH/Debian xterm "\eOH": beginning-of-line "\eOF": end-of-line # for freebsd console "\e[H": beginning-of-line "\e[F": end-of-line $endif # fix Home and End for German users "\e[7~": beginning-of-line "\e[8~": end-of-line