Mittwoch, 22. November 2017

rsync über SSH verwendet auf dem Zielsystem die falsche rsync-Version

Die Migration von meinem Mac mini auf einen iMac 27″ Retina schreitet stetig voran. Die Daten habe ich dazu mit rsync über Gigabit-Ethernet vom Mac mini auf den iMac rüberkopiert.

Der Befehl sah ungefähr so aus:

$ rsync --protect-args -avz -e ssh . mario@domain.tld:/tmp

Bei einem besonderen Verzeichnis trat (ungefähr) folgende Fehlermeldung auf (ich habe sie leider nicht festgehalten):

rsync: on remote machine: --extended-attributes: unknown option
rsync error: syntax or usage error (code 1) at /SourceCache/rsync/rsync-45/rsync/main.c(1333) [server=2.6.9]
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(226) [sender=3.1.1]

Nach etwas Googlen realisiert ich, dass auf dem Zielsystem (dem iMac) zwar MacPorts mitsamt dem neuesten rsync längst installiert waren (/opt/local/bin/rsync mit rsync version 3.1.2 protocol version 31), über den ssh-Tunnel stattdessen aber das alte, von Apple mitgelieferte Binary verwendet wurde (/usr/bin/rsync mit rsync version 2.6.9 protocol version 29).

Der Grund: Wenn rsync einen SSH-Tunnel aufbaut, werden die üblichen Initialisierungsfiles von bash nicht geladen und somit auch die MacPorts-Pfade (/opt/local/...) nach Binaries abgesucht.

Abhilfe schafft man, indem man dem lokalen rsync mit dem Argument --rsync-path sagt, wo sich die gewünschte Binary befindet:

$ rsync --rsync-path=/opt/local/bin/rsync -av -e ssh . mario@domain.tld:/tmp

Quelle: How can I set environment variables for a remote rsync process?

Tags: , , , , ,
Labels: Apple, Linux

Keine Kommentare | neuen Kommentar verfassen

Dienstag, 21. November 2017

Turris Omnia: LuCI-Seite mit den Port-Weiterleitungen lädt im Schneckentempo

Vor einigen Wochen ist mir ein Bug in der LuCI Web-Oberfläche meines Turris Omnia aufgefallen: Die Seite zum Verwalten der Port-Weiterleitungen (ja, ich bin noch ein eingeschworener IPv4-Haushalt) lädt extrem langsam (Wartezeiten von über 2 Minuten). Will man dann auch noch einen bestehenden Eintrag bearbeiten, wartet man bis zu 16 Minuten (!), bis das Bearbeitungsformular geladen ist.

Mittlerweile habe ich einen Bug-Report im offiziellen Forum veröffentlicht, eine Lösung konnte mir aber noch nicht präsentiert werden. Immerhin haben sich bereits zwei Leidensgenossen gemeldet.

Aber aus einem Grund sind wir ja keine Klickibunti-Windows-Admins geworden und haben selbstverständlich auch den SSH-Zugang auf den Router freigeschaltet.

Die Anpassungen an den Firewall-Einstellungen finden sich in der Datei unter /etc/config/firewall. Am Besten kopiert man einfach einen bestehenden Eintrag und passt diesen nach den eigenen Wünschen an, zum Beispiel so:

...
config redirect
	option target 'DNAT'
	option src 'wan'
	option dest 'lan'
	option proto 'tcp udp'
	option src_dport '1234'
	option dest_ip '10.10.10.10'
	option dest_port '1234'
	option name 'sikrit hole'
...

Anschliessend speichert man die Datei und lädt die Firewall neu:

# /etc/init.d/firewall restart

Via: Add a firewall rule

Tags: , , , , ,
Labels: IT, Linux

Keine Kommentare | neuen Kommentar verfassen

Dienstag, 21. November 2017

Offizieller Druckertreiber des Xerox Phaser 3250DN unter macOS High Sierra installieren (ungelöst)

Xerox bietet für den Xerox Phaser 3250DN offiziell keinen Druckertreiber für macOS High Sierra (10.13) an. Die letzte verfügbare Version wurde für macOS Sierra (10.12) veröffentlicht:

Phaser 3250 Driver for Mac OSX

Nun gut, wird wohl klappen damit. Denkste. Wer die Augen trotz des MindVision VISE-Installers (Nostalgiegefühle an Mac OS 9, irgendjemand?) noch öffnen kann, blickt einer äusserst traurigen Fehlermeldung ins Gesicht:

image-7563

Error Opening File: Info.plist
1008:6; -35 Drive not found

Eine Lösung dafür habe ich bis jetzt noch nicht gefunden.

Auf Ask Different habe ich folgende (ebenfalls ungelöste) Frage gefunden: Printer Driver in macOS Sierra

Tags: , , , , , , ,
Labels: Apple

Keine Kommentare | neuen Kommentar verfassen

Samstag, 11. November 2017

Das Alter von AutoScout24-Inseraten herausfinden (Low-Skill-Version)

In den letzten zwei Wochen waren Stephanie und ich auf der Suche nach einem Occasion-Auto als Ersatz für unseren altgedienten TOYOTA Yaris 1.3, den wir an einen Bekannten verkaufen dürfen.

Nach einer Probefahrt an einem Samstag bei einer Garage in der Region drängte uns der Verkäufer dazu, nicht zu Lange mit dem Kaufentscheid zuzuwarten. Die Nachfrage nach solchen Fahrzeugen sei gross und vielleicht könnte bereits jemand weiteres am Montag Interesse anmelden. Beim Sondierungsanruf des Garagisten am darauffolgenden Dienstag-Morgen hatte sich die Prophezeiung dann tatsächlich erfüllt: Ein zweiter Interessent hatte sich materialisiert, aber da wir zuerst angefragt hätten, hätten wir auch das Vorkaufsrecht. Wie anständig!

Verkäufer, die einem unter Zeitdruck setzen wollen, sind mir zunehmends suspekt. Nicht zuletzt, weil ich als Security Officer regelmässig mit Phishing-Mails zu tun habe, deren Autoren mit identischen psychologischen Tricks hantieren: „Alarm, bitte rasch handeln, sonst verlierst du nach 24 oder 48 Stunden Zugang zu deiner Apple ID“. Selbst Booking.com wendet solche Räubermethoden bei ihren Hotelangeboten an („Nur noch 1 Raum zu diesem Preis verfügbar“, „In den letzten 24 Stunden von 3 Personen gebucht“). Da muss man hart bleiben.

Im vorliegenden Fall hatte ich im Hinterkopf, dass ich das probegefahrene Auto vor Wochen bereits auf AutoScout24 gesehen hatte. Wieso also sollte ausgerechnet nun Eile bestehen, überhastete Kaufentscheide zu fällen?

Doch wie konnte ich meine Vermutung verifizieren? AutoScout24 hütet sich natürlich, solche Informationen in Autoanzeigen klar sichtbar anzupreisen. Die AutoScout-Kunden sind nicht wir (für uns ist der Service selbstverständlich kostenlos), sondern die Garagen, die Fahrzeuge verkaufen wollen und dafür AutoScout24 als Mittelmann einen „Wegzoll“ entrichten dürfen. Und wer zahlt befiehlt: Die Informations-Asymmetrie muss gewährleistet bleiben, denn man stelle sich vor, ein Käufer läuft in die Garage hinein und hat im Verhandlungspoker das Wissen in der Hinterhand, dass sein Traumfahrzeug ein Ladenhocker ist.

Wenn uns AutoScout24 also nicht direkt weiterhelfen will, helfen wir uns halt selber. Nach einer Debug-Session an einem dunklen Winterabend hatte ich die Lösung, die im Grunde naheliegend ist: Die Bilder der Autos, und zwar sowohl das Speicherdatum, als auch die im Bild eingebetteten EXIF-Daten.

Wer die Web-Site bereits einmal auseinandergenommen hat, weiss, dass die Bilder nicht als Originale ausgeliefert werden, sondern über ein Script, welchem man in den Parametern den Pfad, die Bilddimensionen und JPEG-Qualität mitgeben kann. Das schaut dann etwa so aus:


https://cas01.autoscout24.ch/toyota-verso-s-kompaktvan–minivan-2015-occasion/?1024×2048/3/90/custom/434/5101434/0.jpg

Die Bausteine lassen sich teilweise entschlüsseln (und beim Fehlen ist auf Grund eines Web-Entwicklers, dem OWASP wohl kein Begriff ist, auch mit hilfreichen Fehlermeldungen zu rechnen):

  • ?1024x2048 = Auflösung in Pixeln
  • /3 = „Quality Format“
  • /90 = Qualität (ein spontaner Test mit „95“ hat nicht funktioniert; d.h. die Werte sind hartkodiert)
  • /custom/434/5101434/0.jpg = Der absolute Pfad der Bilddatei auf dem NFS-Share, wobei ich den Wert 434 nicht deuten kann. Bei 434 handelt es sich um die letzten drei Zahlen der ID. AutoScout24 verwendet diese Zahl, um die Bilder strukturiert in Unterordner abzulegen, um nicht in einem einzigen Verzeichnis Millionen von Photos liegen zu haben. 5101434 ist die ID des Inserats.
    Die ID zählt übrigens stetig hoch. Kennt man also eine ID und ein Publikationsdatum vor diesem Inserat und eine ID und ein Publikationsdatum nach diesem Inserat, kann man den Veröffentlichungszeitpunkt eingrenzen und interpolieren.

Dieses Script stellt zwei Dinge sicher: Einerseits liefert der Web-Server als Erstellungsdatum des Bildes das Datum und die aktuelle Uhrzeit des Aufrufs mit. Andererseits entfernt das Script jegliche EXIF-Daten, welche viele verschiedene Informationen enthalten können, bspw. die GPS-Koordinaten, das Kameramodel, aber natürlich auch das Aufnahmedatum.

Gibt es eine Möglichkeit, auf die Originalbilder zuzugreifen? Selbstverständlich gibt es das, wird aber nirgends verwendet und ist schon gar nicht dokumentiert. Für das Photo, welches ich oben referenziert habe, lautet die URL:


https://cas01.autoscout24.ch/custom/434/5101434/0.jpg

Man benötigt also die Basis-URL https://cas01.autoscout24.ch sowie den String, der an den URLs öffentlich zugänglicher Photos hängt. Hier: /custom/434/5101434/0.jpg.

Lädt man dieses Photo nun unter macOS im Terminal mit wget herunter, liefert der Web-Server das ursprüngliche Speicherdatum mit. Das ursprüngliche Speicherdatum ist identisch mit dem Zeitpunkt, an welchem das Inserat aufgeschaltet wurde:

$ wget "https://cas01.autoscout24.ch/custom/434/5101434/0.jpg"
--2017-11-11 16:51:45--  https://cas01.autoscout24.ch/custom/434/5101434/0.jpg
Auflösen des Hostnamens cas01.autoscout24.ch… 91.208.180.147
Verbindungsaufbau zu cas01.autoscout24.ch|91.208.180.147|:443 … verbunden.
HTTP-Anforderung gesendet, auf Antwort wird gewartet … 200 OK
Länge: 542433 (530K) [image/jpeg]
Wird in »0.jpg« gespeichert.

0.jpg               100%[===================>] 529,72K  --.-KB/s    in 0,1s    

2017-11-11 16:51:47 (4,95 MB/s) - »0.jpg« gespeichert [542433/542433]

Das Upload-Datum der Datei lautet 31. August 2017, 08:50 Uhr morgens:

$ ls -l
total 1064
-rw-r--r--  1 user  staff  542433 31 Aug 08:50 0.jpg

Das ist realistisch — der 31. August war ein Donnerstag und 8:50 Uhr liegt innerhalb der Bürozeiten.

Und was sagt jhead, mit welchem man EXIF-Informationen auslesen kann?

$ jhead 0.jpg 
File name    : 0.jpg
File size    : 542433 bytes
File date    : 2017:08:31 08:50:08
Resolution   : 2048 x 1365
JPEG Quality : 89

Das sind leider keine EXIF-Informationen: AutoScout entfernt diese offenbar aus den Originalen, die sie im oben genannten Pfad ablegen.

Und so hatte ich mich in diesem konkreten Fall selber beruhigt, dass keine Hüst-und-Hott-Aktion nötig sein würde. Die Wahrscheinlichkeit, dass das als Schnäppchen angepriesene Auto zwei Monate lang herumstand und sich urplötzlich am selben Wochenende zwei Parteien dafür interessieren würden, war doch äusserst gering und wohl die Erfindung eines provisionsgetriebenen Verkäufers.

NB: Finde ich die Zeit, werde ich in einem zukünftigen Artikel beschreiben, wie die High-Skill-Version ausschaut. Kurzzusammenfassung: iOS-App, mitmproxy und JSON. So findet man alle möglichen Meta-Informationen zu einem Inserat, die man als Endbenutzer selbst in der App, aber auch auf der Web-Site nie zu Gesicht bekommt respektive nur in gefilterter/formatierter Version.

Tags: , , , , , ,
Labels: Web

1 Kommentar | neuen Kommentar verfassen

Sonntag, 5. November 2017

upsc meldet „libupsclient.so.4: cannot open shared object file“

Als ich letzten Mittwoch meine Debian-Server mit den neuesten stable-Paketen aktualisierte hatte, kam es zu einem Kollateralschaden: Plötzlich wollte cacti die Gesundheitswerte meiner neuen, über USB an die Server angeschlossenen Eaton 3S550IEC resp. Eaton 3S700IEC USVs nicht mehr aufzeichnen.

Nach etwas Debugging dann rasch die Erkenntnis, dass dem Kommandozeilen-Tool zum Auslesen der Parameter der USVs eine bestimmte Datei fehlt:

$ upsc
upsc: error while loading shared libraries: libupsclient.so.4: cannot open shared object file: No such file or directory

Dank der Suche nach dieser Shared Library in Paketen über packages.debian.org war dann schnell klar, dass ich folgendes Paket nachinstallieren musste:

apt-get install libupsclient4

Seither funzt die Aufzeichnung wieder:

image-7540

Schade nur, dass die Eaton USVs nur den Ladestand der Batterie sowie die Auslastung in Prozent ausgeben …

Tags: , , , , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 5. November 2017

SSH meldet „Bad SSH2 Mac spec“

Meine ~/.ssh/config habe ich gemäss den Empfehlungen von Mozilla konfiguriert.

Offenbar gab es Anpassungen am SSH-Client unter macOS, als ich zu Monatsbeginn (1. November) MacPorts aktualisiert habe.

Es waren keine Logins auf irgendwelche in config konfigurierten Server mehr möglich. Die Fehlermeldung lautete:

$ ssh sauron
/Users/mario/.ssh/config line 8: Bad SSH2 Mac spec 'hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,umac-128@openssh.com,hmac-md5,hmac-sha1,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96'.

Hmmm! Mit folgendem Befehl findet man raus, welche SSH2 Macs der SSH-Client mittlerweile nur noch unterstützt:

$ ssh -Q mac
hmac-sha1
hmac-sha1-96
hmac-sha2-256
hmac-sha2-512
hmac-md5
hmac-md5-96
umac-64@openssh.com
umac-128@openssh.com
hmac-sha1-etm@openssh.com
hmac-sha1-96-etm@openssh.com
hmac-sha2-256-etm@openssh.com
hmac-sha2-512-etm@openssh.com
hmac-md5-etm@openssh.com
hmac-md5-96-etm@openssh.com
umac-64-etm@openssh.com
umac-128-etm@openssh.com

Ich speicherte beide Werte in unterschiedlichen Textdateien, wobei ich die Werte aus der config von Hand auf einen Wert pro Zeile aufspaltete. Danach sortierte ich diese mit sort, um sie besser vergleichbar zu machen.

Ein Diff der beiden Listen zeigte mir schlussendlich klar auf, wo ich Hand anlegen musste:

$ diff ssh-enabled-sorted.txt ssh-available-sorted.txt 
3,4c3,4
< hmac-ripemd160
< hmac-ripemd160@openssh.com
---
> hmac-md5-96-etm@openssh.com
> hmac-md5-etm@openssh.com
6a7,8
> hmac-sha1-96-etm@openssh.com
> hmac-sha1-etm@openssh.com
12a15,16
> umac-64-etm@openssh.com
> umac-64@openssh.com

Damit konnte ich config anpassen. Vorher:

...
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,umac-128@openssh.com,hmac-md5,hmac-sha1,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96
...

Nachher (hmac-ripemd160,hmac-ripemd160@openssh.com entfernt):

...
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,umac-128@openssh.com,hmac-md5,hmac-sha1,hmac-sha1-96,hmac-md5-96
...

Tags: , , , , , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Montag, 23. Oktober 2017

Mit Debian Rescue eine CD mounten und auf einen USB-Stick kopieren

Unsere Wohnung ist (fast) eine DVD/CD-ROM-freie Zone. All unsere Endgeräte verfügen mittlerweile über kein optisches Laufwerk mehr.

Doch was nun, wenn man eine CD erhält, deren Daten man auf die Endgeräte laden möchte?

Man nimmt den herumliegenden Lenovo T400 zur Hilfe, welcher noch über ein CD-ROM-Laufwerk verfügt. Leider fehlt der guten Maschine die Festplatte, weil der auf AliExpress.com gekaufte Festplatten-Käfig sowie die Plasticschienen derzeit gerade aus China unterwegs in die Schweiz sind.

Damit man auf der Kiste also ein Linux zum Laufen kriegt, bootet man von einem USB-Stick, auf welchen die Netinst-Version von Debian 9.0 kopiert wurde. (tftp Netzwerk-Boot wäre noch ein Todo für die langen Winternächte).

Nach ein paar Kapriolen, um das Boot-Laufwerk auf USB umzubiegen, startet der Laptop mit der graphischen Installationsoberfläche. Dort wählt man unter Advanced Options den Rescue Modus ein (ohne graphische Benutzeroberfläche).

Nach viel zu vielen Dialogfenster hat man endlich eine Shell zur Hand. Sobald man die CD eingelegt hat, gibt man folgende Befehl ein:

# mkdir /mnt/cdrom
# mount /dev/cdrom /mnt/cdrom

Unter /mnt/cdrom sieht man mit ls -l den Inhalt der CD.

Hat man den zweiten USB-Stick, auf welchen die Daten der CD kopiert werden sollen, bereits bei der Anzeige des Debian-Menus eingestöpselt, könnte man dem Rescue-System in einem Dialog-Fenster sagen, diesen Stick ebenfalls bereits zu mounten.

Hat man dies nicht gemacht, sucht man sich zuerst einen weiteren freien USB-Port am Gerät und steckt den USB-Stick ein.

Anschliessend sucht man sich mit fdisk -l den Devicenamen sowie den Namen der Partition hervor. Gleichzeitig sieht man auch, ob der Stick mit FAT16/32 formatiert ist — ich konnte in meinem Versuch nur solche Sticks mounten.

In unserem Fall trägt die Partition des USB-Sticks den Pfad /dev/sdb1, deshalb mountet man den Stick so:

# mkdir /mnt/usb2
# mount /dev/sdb1 /mnt/usb2

Anschliessend wechselt man auf das CD-Laufwerk und verwendet — leider, da rsync in dieser Umgebung fehlt — folgenden Befehl, um die Daten auf den USB-Stick zu kopieren:

# cd /mnt/cdrom
# cp -R . /mnt/usb2

Doch OBACHT — nur weil der Kopierbefehl abgeschlossen ist, heisst das leider noch nicht, dass alle Daten bereits auf den USB-Stick geschrieben wurden:

USB write: delay between when Ubuntu says its done and it actually being done

Bevor man den USB-Stick ausstöpselt, muss man mit folgendem Befehl sicherstellen, dass auch wirklich restlos alle Daten auf den Stick geschrieben wurden:

# sync

Danach werkelt sync, was locker noch einmal ein oder zwei Minuten dauern kann.

Anschliessend kann man den Stick mit folgendem Befehl für die Entfernung bereitmachen:

# umount /mnt/usb2

Sobald dieser Befehl ausgeführt wurde, kann man den Stick aus dem USB-Port entfernen und auf einem Endgerät einstöpseln.

Tags: , , , , , , , , , , , , , , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Freitag, 20. Oktober 2017

Canon Selphy wird bei der Treiberinstallation unter Windows nicht im Netzwerk erkannt

Letzte Woche habe ich für eine Bekannte einen gebrauchten Canon Selphy-Photodrucker gepostet. Das Gerät war im Nu ins heimische Netzwerk integriert und druckte daraufhin direkt vom iPhone übermittelte Photos problemlos aus.

Einzig bei der Installation des Druckertreibers unter Windows 7 kam es zu Komplikationen: Das Installationsprogramm konnte den Drucker partout nicht im Netz erkennen, obwohl er nachweislich eingeschaltet war und das WLAN-Symbol anzeigte.

Nach etwas Google-Recherche dann die Erleuchtung: Der Computer war aus irgendeinem Grund nicht mit dem Netzwerk-Modus „Heimnetzwerk“ unterwegs, sondern im Modus „Öffentliches Netzwerk“.

Damit der Drucker gefunden werden kann, muss die Option „Network Discovery“ aktiviert werden: How to Turn Network Discovery On or Off in Windows 7

  1. Control Panel
  2. Network and Sharing Center
  3. Change advanced sharing settings
  4. Pfeil nach unten beim zutreffenden Netzwerkprofil (dasjenige, das „current profile“ anzeigt)
  5. Klick auf „Turn on network discovery“

Tags: , , , , , , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Freitag, 20. Oktober 2017

Songs werden auf dem iPhone doppelt aufgeführt

Wer das Problem nicht anderweitig in den Griff bekommt, dem hilft nur eines (sofern man einzig über den iTunes Store gekaufte Songs zu seinem Besitz zählt):

  1. Settings
  2. General
  3. iPhone Storage
  4. Music
  5. Edit
  6. Rot Umrandetes Minus-Zeichen bei „All Songs“ auswählen

Quelle: Musiktitel auf dem iPhone doppelt, lassen sich nicht entfernen

Danach lädt man sich alle Lieder erneut von Apple herunter:

  1. iTunes Store
  2. More
  3. Purchased
  4. Music
  5. Recent Purchases
  6. Download All

Tags: , , , , , ,
Labels: Apple

Keine Kommentare | neuen Kommentar verfassen

Freitag, 20. Oktober 2017

Shopping in Europa: Wo ist die Mehrwertsteuer am Günstigsten?

Die Schweiz hat eine konkurrenzlos günstige Mehrwertsteuer im Vergleich zu europäischen Staaten. Wohin sollte man aber verreisen, wenn man im Ausland shoppen will? Rick Steves gibt Auskunft:

VAT Rates in Europe and Minimum Purchases Required to Qualify for Refunds

Um in den Genuss der tiefsten Mehrwertsteuerbeträge ausserhalb der Schweiz zu kommen, muss man nach Luxemburg reisen: Mit 15 Prozent ist die Steuer dort am günstigsten, gefolgt von Deutschland (!), dem einzigen verbleibenden Land, welches noch einen Mehrwertsteuersatz unter 20 Prozent kennt.

Die Mehrwertsteuerhölle befindet sich in Ungarn mit 27 Prozent — beim Kauf eines Produktes wird dort der Kaufpreis um mehr als einen Viertel erhöht, um dem Staat eine Konsumabgabe zu entrichten.

Tags: , , , , ,
Labels: Reisen

Keine Kommentare | neuen Kommentar verfassen