Access to the WebDatabase API is denied in non-secure contexts in Chrome und Edge

Dieser Tage erschien Chrome 110 und wer eine Webanwendung ohne https nutzt, die eine lokale WebSQL Datenbank anlegt, wird nun mit der Meldung

Access to the WebDatabase API is denied in non-secure contexts

in der Browser Konsole konfrontiert. Kurzum erlaubt Chrome (und somit auch Edge) keinen Zugriff mehr auf lokale Datenbanken im Browser, wenn der Zugriff nicht mit SSL geschützt ist.

Nun habe ich einen Fall, wo kein https Zugriff auf eine derartige Webapplikation vorhanden ist, weil diese ohnehin nur per verschlüsselten VPN zugänglich ist. Natürlich könnten wir hier auch dennoch ein Zertifikat besorgen und mittelfristig werden wir das wohl auch tun, aber fürs erste brauchte ich eine schnelle Abhilfe.

Dank diesem Post hier habe ich die Möglichkeit gefunden, dies vorerst mit Registry Keys zu erlauben. Es braucht hier im Falle von Chrome zwei DWORD Werte mit 1, und zwar

Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome\WebSQLNonSecureContextEnabled 0x00000001
Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome\WebSQLAccess 0x00000001

Im Falle von Edge sind diese beiden DWORD Werte wohl unter

HKEY_CURRENT_USER\Software\Policies\Microsoft\Edge

zu erstellen.
Danach alle Prozesse des Browsers mal schließen oder den Rechner neu starten. Nun sollte der Zugriff wieder möglich sein.

Soundfile auf dem Raspberry im Loop abspielen für Telefonanlage

Ein Freund brauchte Hilfe bei einer älteren Telefonanlage. Diese spielt die Warteschleife über ein Signal an einer Klinkenbuchse ab und der bisherige Player der da den Audio Input geliefert hat, war defekt.

Ich habe daher einen Raspberry Pi 3 genommen den ich noch rumliegen hatte und das aktuelle Raspberry OS installiert. Das Soundfile habe ich nach /root/schleife.mp3 gelegt.
Für das Abspielen verwende ich mplayer und starte es über den rc.local Mechanismus. Dazu später mehr.

Damit mein Kumpel gegebenenfalls vor Ort die Lautstärke nachjustieren kann, habe ich eine Datei /boot/LAUTSTAERKE angelegt und dort mal eine 2 rein geschrieben (sollte +2dB bedeuten). Die boot Partition einer Raspberry OS SD-Karte ist ja vfat formatiert, daher kann er diese Datei dann ganz einfach mit einem Kartenleser unter Windows editieren und diese Ziffer je nach Bedarf verändern.

Ich habe daher meinen Befehl

/usr/bin/mplayer -af volume=`cat /boot/LAUTSTAERKE`  -loop 0 /root/schleife.mp3 &

in die /etc/rc.local aufgenommen. Der cat Befehl in den backticks sorgt eben dafür dass der Wert aus /boot/LAUTSTAERKE hier eingefügt wird.

Standardmäßig wird die /etc/rc.local auf Raspberry OS nicht aufgeführt. Man muss eine System Unit dafür erstellen. Dazu legt man eine neue Datei /etc/systemd/system/rc-local.service an wie folgt:

[Unit]
Description=/etc/rc.local Compatibility
ConditionPathExists=/etc/rc.local

[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99

[Install]
WantedBy=multi-user.target

Anschließend muss der Service mit systemctl enable rc-local.service aktiviert werden. (Danke hier für diesen Tipp an http://www.netzmafia.de/skripten/hardware/RasPi/RasPi_Auto.html )

Dann kann man mal testweise einen Reboot durchführen und zum Beispiel mit einem Kopfhörer schauen ob da etwas aus dem Kopfhöreranschluss raus kommt. Wenn ja, ist das Ding soweit einsatzbereit.

Windows 10: Webcam friert nach wenigen Sekunden ein (zb. bei Zoom, Skype etc.)

Mit dem Beginn der coronabedingten Videokonferenz Saison bemerkte ich auf verschiedenen Notebooks (zumeist HP, aber Hersteller vermutlich irrelevant) das Phänomen dass bei Videokonferenzen über Zoom – aber auch über andere Clients – das eigene Video stets nach wenigen Sekunden eingefroren ist.

Das übliche Procedere, Treiber aktualisieren, neu installieren etc. brachte keine Verbesserung.

Zu tun hat das Ganze anscheinend mit Nachwirkungen des „AnniversaryUpdates“, das eigentlich schon viele Jahre zurück liegt. Die Lösung brachte in diesem Fall ein Registry Key:

  1. via regedit.exe nach HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Media Foundation\Platform
  2. Neuen Schlüssel mit DWORD (32bit) anlegen – Name ‘EnableFrameServerMode’
  3. Darauf achten dass der Schlüssel den Wert ‚0‘ hat.
  4. Reboot

Damit konnten zumindest in meinen Fällen, immerhin zwei, diese Probleme behoben werden.

Danke an https://windows101tricks.com/webcam-freezes-windows-10/ , wo ich diese Lösung gefunden habe.

Raspberry Pi als „SMB1 / SMB2/3 Gateway“

Vorab: Dieser Artikel beschäftigt sich rein lösungsorientiert ausgehend von einer Situation in der es vorerst keine andere Lösung gibt. Er geht von einem vertrauten Netzwerk aus und beschäftigt sich nicht mit Security-Fragen. Die weitere Abhärtung solch eines Setups obliegt demjenigen der es implementiert.
Es steht außer Frage, dass es vermieden werden sollte mit veralteten SMB Protokollen zu hantieren und dass Lösungen wie diese nur vorübergehend sein können, bis man eine Möglichkeit hat die betroffenen Systeme upzudaten.

Mit den Windows 10 Update Tranchen von etwa Herbst 2020 hat Microsoft das veraltete (und unsichere) SMB1 Protokoll deaktiviert. Dies betrifft jene, die per Dateifreigabe, Netzlaufwerk etc. auf Systeme wie zb. Windows XP (oder niedriger), Windows Server 2003 oder stark veraltete Samba Server zugreifen.

Ich habe hier eigentlich nicht mit großartigen Auswirkungen gerechnet, es zeigte sich aber recht schnell dass in einigen Umgebungen noch solche Systeme im Einsatz sind. Und zwar oft Embedded Systeme (zb. auf Produktionsmaschinen), die sich nicht so ohne weiteres updaten lassen. In diesen Fällen klappte der Zugriff quasi von heute auf morgen nicht mehr.

Der erste Schritt war natürlich, SMB1 auf den Windows 10 Rechnern in den Windows-Features wieder zu aktivieren. Aus mir unbekannten Gründen stellte sich dies aber als äußerst instabil heraus. Die betroffenen Netzlaufwerke funktionierten zwar wieder, allerdings nur für ein paar Stunden – dann kam es oft zu sehr hässlichen Abstürzen und es erforderte mehrere Neustarts um die Netzlaufwerke wieder verbinden zu können. Das alles mitunter mehrmals am Tag.

Daher habe ich mir, bis die betroffenen Systeme upgedatet werden können, einen Workaround einfallen lassen. Die Idee war, einen Raspberry Pi mit Samba einzusetzen. Samba beherrscht alle SMB Protokolle relativ sauber, ich dachte also daran die eigentliche SMB1 Freigabe auf dem Raspberry zu mounten und dann wiederum per Samba mittels SMB3 freizugeben. Der Windows 10 Rechner seinerseits verbindet sich dann sein Netzlaufwerk auf den Raspberry.

Hierzu habe ich ein Standard Raspberry OS verwendet. Zuerst mal alles upgegradet mittels

apt-get update
apt-get upgrade

Anschließend habe ich in der raspi-config die grafische Oberfläche deaktiviert und die nötigen Pakete installiert:

apt-get install samba samba-common-bin
apt-get install cifs-utils
apt-get install smbclient

Nun mal testweise die Freigabe auf dem alten Rechner (10.0.0.5) gemountet

mount.cifs -o user=user,vers=1.0,password=pass,dir_mode=0777,file_mode=0777 //10.0.0.5/Freigabename /mnt/alter_rechner

Wichtig ist hier die Angabe von „vers=1.0“, das die veraltete SMB1 Version erzwingt. Der Freigabe des alten Rechners ist nun nach /mnt/alter_rechner gemountet. Nun muss diese Ihrerseits noch am raspberry freigegeben werden. Hierzu in der /etc/samba/smb.conf zum Beispiel folgenden Schnippsel anhängen:

[Freigabename]
path = /mnt/alter_rechner
writeable=Yes
create mask=0777
directory mask=0777
public=no

Nun kann diese Freigabe auf einem Windows 10 Rechner zum Beispiel mittels \\ip-oder-name-des-raspi\freigabename verbunden werden.

Damit die Freigabe des alten Rechners bei künftigen Neustarts automatisch gemountet wird, habe ich folgenden Eintrag in der /etc/fstab erstellt:

//10.0.0.5/Freigabename     /mnt/alter_rechner      cifs    auto,x-systemd.automount,cache=none,rsize=130048,wsize=57344,user=user,vers=1.0,password=pass,dir_mode=0777,file_mode=0777        0 0

Natürlich ist bei diesem Setup der Raspberry der Netzwerk-Flaschenhals. Als ich die Idee entwickelt habe, war das eher ein Versuch und ich dachte mir die ganze Zeit dass das ein ziemlicher Pfusch ist. Allerdings funktioniert das Setup erstaunlich performant und stabil. Ein auf diesem Weg verbundenes Netzlaufwerk verhält sich sehr zuverlässig und auch bandbreitenintensivere Anwendungen wie das Ansehen eines Videos oder das Kopieren größerer Dateien funktionierten anstandslos und mit annehmbarer Geschwindigkeit.

Für beschriebene Szenarien halte ich diese Vorgehensweise also durchaus für eine valide Übergangslösung.

Die Ausführung des Codes kann nicht fortgesetzt werden, da die concrt140. dll nicht gefunden wurde.

Bei einem Anwender trat beim Starten einer CAD Software dieser Fehler auf drei Rechner (von mehreren, auf den anderen gab es keine Probleme – allesamt Windows 10) auf:

Die Ausführung des Codes kann nicht fortgesetzt werden, da die concrt140. dll nicht gefunden wurde.

Ein bisschen rumgooglen brachte die Erkenntnis dass dies in Verbindung mit Microsoft Visual C++ Redestributables steht. Also im ersten Versuch probiert, die aktuelle Version zu installieren. Das hat nichts geholfen.

Abhilfe brachte via Systemsteuerung / Programme ein Klick auf Ändern->Reparieren bei jeder installierten Visual C++ Redestributable Version. Nach einem Neustart lief das betroffene Programm dann.

Sony Xperia unbedienbar, Display schwarz

Mein Sony Xperia begab sich heute unbemerkt in einen völlig unbedienbaren Zustand. Display war schwarz, keine Reaktion auf irgendwas.

Wie sich rausstellte, ist das durchaus ein bekanntes Absturzphänomen, ein „Black Screen Of Death“.

In meinem Fall hat sich das wie folgt beheben lassen:

  1. Lautstärke hoch und Power Taste gemeinsam drücken und halten für etwa 10 Sekunden
  2. So lange halten bis man drei Vibrationen spürt. Das Handy ist dann abgeschaltet
  3. Gerät eine Minute liegen lassen
  4. Wieder normal einschalten durch mehrsekündiges Drücken der Power Taste.

Sofern keine anderen Schäden vorliegen, sollte das Telefon dann wieder einsatzbereit sein.

Danke an criticecho.com

restic – ein Stern am Backup Himmel

Habe mich länger nicht zu Wort gemeldet, wahrscheinlich weil es zuletzt sehr viel „Business as usual“ bei mir gab und wenig richtig Neues, Inspirierendes.

Nun durfte ich restic entdecken. Ein Backup Tool, bei dem derzeit meine Begeisterung kaum ein Ende hat.

Was macht restic für mich so besonders?

  • restic besteht aus einer einzigen Datei, es gibt binaries für beinahe alle Plattformen. Mittels „–self-update“ besitzt es sogar einen eigenen Update Mechanismus.
  • restic erstellt verschlüsselte, inkrementielle Backups, inklusive Deduplizierung, und es ist enorm schnell dabei.
  • restic beherrscht als Backup Ziel zum Beispiel (natürlich neben lokal eingebundenen) sftp sowie S3 kompatible Storages (bzw. Buckets). Via rclone lassen sich noch viele weitere Ziele verwenden.
  • Gute Dokumentation und ein sehr informatives und hilfsbereites Forum.
  • Es kann mittels Pipes (stdin/stdout) sichern und wiederherstellen. Zum Beispiel um mal so eben das sql File aus der Sicherung von gesten an mysql zu pipen.

Quickstart mit restic

Nachfolgendes versteht sich nicht als fixfertiges Tutorial. Es soll neugierig machen und ein bisschen eine Einführung bieten. Ich empfehle die Doku zu lesen, nach ein paar Minuten lassen sich selbst komplexe Backup Strategien sehr schnell umsetzen.

Das restic Binary kann man hier herunterladen. restic ist natürlich auch in vielen Paketverwaltungen diverser Distributionen enthalten. Da es aber so herrlich einfach geht, hab ich es bisher immer herungergeladen, entpackt und nach /usr/local/bin/restic kopiert.

restic speichert Backups in einem Repository. Dieses befindet sich zum Beispiel auf einer USB Platte, einem Cloud Anbieter, einem Server mit sftp Zugriff etc.
Es muss zuerst initialisiert werden mittels

restic -r /repo/ziel init

Anschließend wählt mein ein Kennwort für das Repo. Danach ist die Initialisierung abgeschlossen. Die Schreibweise für andere Backupziele ist hier sehr gut erklärt. Nun kann man ein Backup erstellen zum Beispiel mit

restic -r /repo/ziel backup /home

Damit erzeugen wir den ersten Snapshot. Alle abgelegten Snapshots eines Repos lassen sich mit

restic -r /repo/ziel snapshots

auflisten. Ein restore ist mehr als einfach, ein Beispiel

restic -r /repo/ziel restore latest --target /tmp/restore-work

Bei allem was es tut ist restic so unglaublich schnell, dass ich am Anfang Zweifel hatte, ob das alles korrekt funktioniert. Daher habe ich recht bald ein paar Test Restores, teilweise von kompletten Systemen, gemacht. Es hat alles bestens geklappt.

Als Storage für restic Backups kann ich wasabi empfehlen. Es ist 100% kompatibel mit Amazon S3 – dabei aber wesentlich günstiger.

E-Mail Sicherheit: Spam- und Virenschutz

Im Jahr 2003 habe ich begonnen, mich intensiv mit Tools wie MailScanner, amavis, SpamAssassin und clamav auseinanderzusetzen. Ich habe dann begonnen, diese mit Hilfe von diversen Tutorials entsprechend zu kombinieren, um dann ein solides Antispam Gateway für mein Unternehmen und unsere Kunden zur Verfügung zu haben.

Das hat soweit auch gut funktioniert und wurde über die Jahre von mir gepflegt und weiterentwickelt. Irgendwann musste ich es dann aber einsehen: Der Aufwand wird zu hoch.

Mit stetig steigender Anzahl von Bedrohungen zum Beispiel durch Cryptotrojaner (eingebettet in plausibel aussehende Mails bzw. PDF Attachments), immer geschickter aufgemachten Phishing Mails und einem stetig steigenden Volumen an „klassischem“ Spam kam ich nicht mehr hinterher. Zudem führten meine Versuche, die Erkennungsraten zu verbessern, auch zu einer erhöhten Anzahl an False-positives (also „gute“ Mails, die dennoch gefiltert wurden).

Die Idee, das ganze Thema zu outsourcen, wuchs langsam in mir. Ich habe dann einige Anbieter getestet. Geworden ist es schließlich  EuropeanMX. Hier gibt es nicht nur sehr umfangreiche Möglichkeiten der Konfiguration (ohne dass es dabei unübersichtlich wird), sondern auch guten Support und einen sehr unbürokratischen Umgang. Zudem gibt es auch die Möglichkeit, deren Mailserver für outbound Mails zu nutzen. Ich kann es daher definitiv empfehlen.

Ordner auf einer QNAP Freigabe auf Apple Macs nicht mehr sichtbar

In unserem heterogenen Windows/Mac Netzwerk fungiert eine QNAP NAS als Fileserver. Eines Tages war hier auf einmal ein Ordner auf den Macs nicht mehr sichtbar. Auf Windows Rechnern kein Problem, auch nicht mit den selben Benutzer Accounts. Es machte auch keinen Unterschied ob sich die Macs via SMB oder AFP Protokoll verbunden haben.

Nachdem ich Rat bei einem recht Mac erfahrenen Kollegen gesucht habe, hat sich relativ schnell rausgestellt, dass der Ordner für die Macs auf unsichtbar (hidden) gestellt war. Dies hat sich feststellen lassen in dem die Anzeige versteckter Dateien und Ordner aktiviert wurde, mittels (Terminal)

defaults write com.apple.finder AppleShowAllFiles TRUE
killall Finder

(Analog dazu kann das mittels FALSE wieder deaktiviert werden.) Danach wurde der Ordner in leicht hellerer Farbe angezeigt.

Warum die Macs diesen Ordner als versteckt erlebten ist mir bis heute nicht klar. Am NAS waren keine erweiterten Attribute oder dergleichen aktiviert, hier war er bestimmt nicht versteckt. Der erste Versuch war also den Ordner am Mac wieder sichtbar zu machen mittels

chflags nohidden /Volumes/Freigabename/Ordnername

im Terminal des Macs. Das hat fürs erste funktioniert. Allerdings nur bis zum nächsten Reboot. Danach war der Ordner wieder versteckt.

Die endgültige Lösung brachte hier erst das entfernen aller Attribute im Terminal eines Macs mittels

xattr -c /Volumes/Freigabename/Ordnername

Dieser Befehl kann je nach Situation auch noch um -r für rekursive Abarbeitung ergänzt werden. Dies war bei mir nicht nötig, da die Unterordner nicht versteckt markiert waren. Danach war der Ordner dauerhaft wieder sichtbar, auch auf allen anderen Macs.

Eine vollständige Erklärung dafür habe ich nicht. Es scheint für mich so als würden die Macs dieses hidden Attribut irgendwo in eine der vielen Meta Dateien (.DS_Store, ._Dateiname, etc.) pflegen. Das ist für mich die einzige Erklärung warum nach dem Ausführen von xattr -c die Sichtbarkeit auch auf allen anderen Macs wieder gegeben war. Wie es aber überhaupt dazu kam dass dieser Ordner für Macs unsichtbar markiert war, ist mir völlig unklar.