Unter:

https://www.kaspersky.com/downloads/free-virus-removal-tool

stellt Kaspersky aktuell eine Software zur Verfügung, die auf Linux-Systemen nach Schadsoftware suchen kann (siehe auch den Beitrag bei Heise: https://www.heise.de/news/Kaspersky-Virus-Removal-Tool-fuer-Linux-liefert-erste-Einschaetzung-9755128.html ).

Das Tool wird auf den jeweiligen Rechner nur herunter geladen und erfordert keine weitere Installation, es muss nur ausführbar gemacht werden:

chmod a+x  kvrt.run

Es braucht in der Regel Root-Rechte, die notfalls auch nach dem Start angefordert werden. In den üblichen Beschreibungen ist vor allem die GUI-Nutzung zu finden. Das Tool bietet aber auch die Möglichkeit rein von der Kommando-Zeile aus zu laufen.

Dazu kann man auf die Hilfe zugreifen:

Mit

./kvrt.run --help

bekommt man Hilfe zum Entpacker des Tools.

Makeself version 2.5.0
1) Getting help or info about kvrt.run :
kvrt.run --help Print this message
kvrt.run --check Checks integrity of the archive
kvrt.run --verify-sig key Verify signature agains a provided key id

2) Running kvrt.run :
kvrt.run [options] [--] [additional arguments to product]
with following options (in that order)
--allowuser Do not try to get root privileges
--noexec Do not run product
--noprogress Do not show the progress during the decompression
--target dir Extract directly to a target directory (ONLY absolute path)
This directory must not exist (delete it before extracting).
-- Following arguments will be passed to the product

Hilfe zum eigentliche Removal Tool bekommt man über

./kvrt.run -- -h

liefert dann (eventuell in einem GUI-Fenster):

-h show help
-d <folder_path> path to quarantine and reports folder
-accepteula accept EULA, Privacy Policy and KSN Statement
-trace enable trace collection
-tracelevel <level> set the level of traces: 
ERR - only error messages
WRN - warnings and errors
INF - information, warnings and errors
DBG - all messages
-processlevel <level> set the level of danger of object which will be neutralized:
0 - skip objects with high, medium and low danger level
1 - neutralize objects with high danger level
2 - neutralize objects with high and medium danger level
3 - neutralize objects with high, medium and low danger level
-dontencrypt disable encryption of trace files/reports/dump files
-details enable detailed reports
-proxyconfig <config_file_path> path to file with proxy config
-silent run scan without GUI
-adinsilent run active disinfection in silent mode
-allvolumes add all volumes to scan
-custom <folder_path> path to custom folder for scan
-customlist <file_path> path to file with custom folders for scan
-exclude <folder_path> exclude path from custom scan
-excludelist <file_path> path to file with excludes for custom scan
-customonly run scan of custom folders only

Wenn man den dortigen Hinweisen folgt, dann kann man mittels

./kvrt.run -- -silent -accepteula

das Tool starten.

Ergibt dann im Idealfall eine Ausgabe wie:

Running with root privileges
Generated directory is </tmp/bc7d85d8a6c0437b16834>
Verifying archive integrity... 100% SHA256 checksums are OK. All good.
Uncompressing Kaspersky Virus Removal Tool 24.0.4.0 for Linux 100% 
=================================
Running kvrt with args <-silent -accepteula>
=================================
compver: 24.0.4.0 x86-64 (Apr 12 2024 12:32:49)
Product folder </var/opt/KVRT2024_Data>
=================================
Scan is started
=================================
=================================
Scan is finished with results:
Processed: 37785
Processing errors: 0
Detected: 0
Password protected: 0
Corrupted: 0
=================================
=================================
kvrt exited with code <0>
=================================

Achtung: Bei Tools aus dem Hause Kaspersky sollte man immer auch die Hinweise des BSI im Hinterkopf haben.

Mir ist mal wieder ein Problem aufgefallen, welches mit Google und seinem Regulationanspruch zusammen hängt. Es ist nämlich so, dass manche WP-Systeme keine Mails an Google-Empfänger verschicken können. Man bekommt dann in der Logdateie eine Fehlermeldung wie:

<ein-user@gmail.com>: host gmail-smtp-in.l.google.com[142.251.175.26] said:
550-5.7.26 This mail is unauthenticated, which poses a security risk to the
550-5.7.26 sender and Gmail users, and has been blocked. The sender must
550-5.7.26 authenticate with at least one of SPF or DKIM. For this message,
550-5.7.26 DKIM checks did not pass and SPF check for
[h2412yxyz.stratoserver.ne 550-5.7.26 t] did not pass with ip:
[85.214.x.y]. The sender should visit 550-5.7.26
https://support.google.com/mail/answer/81126#authentication for 550 5.7.26
instructions on setting up authentication.
s24-20020a632158000000b0055acc7f8088si4258738pgm.301 - gsmtp (in reply to
end of DATA command)

Das hat schon eine gewisse Berechtigung, weil das WordPress-System hier keine sinnvolle Absenderadresse gesetzt hat, sondern www-data als Absender genommen hat. Das ergänzt das Mailsystem dann noch um den Servernamen. Damit schlagen dann die genannten Checks fehl.

Zur Beseitigung des Problems gibt es mehrere Möglichkeiten:

  1. Nutzung eines Plugins wie WP Mail SMTP/ 
  2. Anpassung der functions.php

Das vielgelobte Plugin hat mich genervet, weil es gleich eine Pro-Version anbietet. Ich habe also unter Design -> Theme-Datei-Editor die Datei functions.php (Theme-funktionen) um die folgenden Zeilen erweitert (einfach angehängt):

// Mail Hook mail_from
add_filter( 'wp_mail_from', function ( $original_email_address ) {
return 'testpress@meine-domain.de';
} );

// Mail Hook mail_from_name
add_filter( 'wp_mail_from_name', function ( $original_email_from ) {
return 'Testpress';
} );

//Action Hook phpmailer_init
add_action( 'phpmailer_init', 'my_phpmailer_init' );
function my_phpmailer_init( $phpmailer ) {
$phpmailer->Sender = $phpmailer->From;
}

Die beiden Mail-Hooks setzten die Absender-Adresse auf einen gewünschten Wert, wobei der Hook eigentlich eine funcion einbindet, die hier jeweils gleich integriert ist. In vielen Beschreibungen ist das auch getrennt (https://wordpress.org/support/topic/change-sender-name-and-email-address-wordpress/) .
Diese Einstellungen reichen aber nicht aus, weil damit die Adresse im Envelope (Umschlag) nicht geändert wird und das ist die entscheidende Stelle. Dafür gibt es einen Action-Hook, über den man die Initialisierung des Mailers vornehmen kann. Hier ändern wir nur den Wert für Sender und zwar auf den gerade davor gesetzten Wert von From.

Auch wenn innerhalb der WordPress Options, eventuelle durch eine Erweiterung,  eine Mailadresse gesetzt ist, wie z.B. wpmembers_email_wpfrom, so wird die erst durch die se Initialisierung aktiv.

Damit sollten jetzt auch Mails an z.B. Google-Adressen funktionieren, sofern der eingestellte Absender grundsätzlich entsprechende Mails verschicken kann.

Damit die Änderung nicht bei nächsten Update des Themes überschieben wird, sollte man ein Child-Theme anlegen, in dem diese Ergänzung realisiert wird.

Weitere Informationen:

https://developer.wordpress.org/reference/hooks/wp_mail_from/
https://developer.wordpress.org/reference/hooks/wp_mail_from_name/
https://developer.wordpress.org/reference/hooks/phpmailer_init/

 

In der letzten Zeit habe ich mich mit der flexibleren Installation von PHP beschäftigt (https://www.debacher.de/wiki/Verschiedene_PHP-Versionen_für_Apache). Dabei ist eine Auto-Vervollständigung für apt recht hilfreich. Auf aktuellen Ubuntu-Rechnern ist das für normale Nutzer aktiviert, aber nicht für root.

Ein paar Zeilen helfen hier weiter:

apt install bash-completion

Eventuell ist das Paket schon installiert. Auf alle Fälle muss man dann in der Datei /etc/bash.bashrc ein paar Kommentarzeichen entfernen (ab Zeile 34):

# enable bash completion in interactive shells
if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
  fi
fi

Wenn man sich jetzt erneut anmeldet, dann funktioniert die Vervollständigung.

WordPress hat hinsichtlich seiner Mails in paar Merkwürdigkeiten:

1. Absenderadresse

Bei ausgehenden Mails benutzt WordPress standardmäßig die Absenderadresse wordpress@<Domain>, hier im konkreten Fall also wordpresse@debacher.de . Falls man das ändern möchte, weil ein anderer Userteil oder eine andere Domain gewünscht wird, so kann man das nirgends direkt einstellen. Man muss ein paar Zeilen Code in die Datei functions.php mit aufnehmen:

add_filter('wp_mail_from', 'new_mail_from');
add_filter('wp_mail_from_name', 'new_mail_from_name');

function new_mail_from($old) {
 return 'no-reply@debacher.de';
}

function new_mail_from_name($old) {
 return 'Debacher.de';
}

Durch diese beiden Filter wird der Absender bei den ausgehenden Mails auf die gewünschten Einstellungen gesetzt.

 

2. Administrator-E-Mail-Adresse

Manchmal hat man mehrere Administratoren und möchten allen die entsprechenden Mails zukommen lassen. Im Backend ist es aber nicht möglich mehrere Mailadressen anzugeben, das geht nur direkt in der Datenbank.
Hier sucht man die Tabelle wp_optins aus (eventuell haben die Tabellen ein anderes Präfix) und dort den Eintrag admin_email

Dort kann man dann mehrere Mailadressen, durch ein Komma getrennt eingeben, also so, wie sie der Mailserver als Liste von Adressen akzeptiert.

Dieser Eintrag ist dann auch so im Backend zu sehen, kann dort aber nicht verändert werden, da in diesem Formular bei einer Eingabe eine gültige Mailadresse erzwungen wird.

Auf mehreren Systemen habe ich aktuell die Aktualisierung ausführen lassen. Ausgangspunkt war jeweils die Version 20.0.14, die nicht mehr unterstützt wird. Zum Glück ist bei Nextcloud das Update kein großes Problem, wobei der Teufel im Detail steckt.

1. Update auf 21.0.9

Beim Update teilt Nextcloud mit, dass zwei Erweiterungen deaktiviert werden müssten:

  • Deck
  • Talk (speed)

Die Erwähnung von Talk irritierte mich, es ist aber nach dem Update ganz normal vorhanden.

In der Einstellungsübersicht wurde dann auf fehlende Indices hingewiesen. Das lässt sich prinzipiell lösen mittels:

 sudo -u www-data php occ db:add-missing-indices

Doch gab es hier eine Warnung über ein Fehlen von einem  APC Modul. Daher musste ich erst die Zeile

apc.enable_cli=1

in der Datei  /etc/php/7.4/cli/php.ini ergänzen.

Danach ließen sich die Indizes ergänzen.

Bei einem der Systeme gab es dann Fehlermeldungen im Zusammenhang mit Unterverzeichnissen von .well-known. Eigentlich war meine Konfiguration stimmig, ich habe aber dann trotzdem den Alias-Eintrag nochmals für Port 80 und 443 gesetzt:

 Alias /.well-known /var/www/vhosts/beispiel-domain.de/httpdocs/.well-known

Nach einem Neustart des Apache war der Fehler beseitigt.

Und nun noch der nette Hinweis:

Für Deine Installation ist keine Standard-Telefonregion festgelegt....

Das muss man händisch in der Datei config/config.php machen. Dort ergänzt man die Zeile:

'default_phone_region' => 'DE',

Bei einem der Systeme tauchte die Meldung auf:

Dem Modul php-imagick fehlt die SVG-Unterstützung...

Das lässt sich lösen, indem man ein Paket nachinstalliert:

sudo apt install libmagickcore-6.q16-6-extra:amd64

 

2. Update auf 22.2.5

Unter Einstellungen -> Übersicht geht es dann an die nächste Runde des Updates. Danach wurden wieder fehlende Indices moniert, also erneut

 sudo -u www-data php occ db:add-missing-indices

Nun noch in der Apache Konfiguration ergänzen

 Header add Strict-Transport-Security "max-age=15768000"

und dann blieb noch die Fehlermeldung

Eine Hintergrundaufgabe, die nach vom Benutzer importierten SSL-Zertifikaten sucht, läuft noch. Bitte später erneut versuchen.

Das ließ sich nach etwas Recherche beseitigen mittels:

sudo -u www-data php -f ./cron.php

Nun sind alle Prüfungen bestanden.

Wenn das immer so einfach wäre 😉

Veröffentlicht unter linux.

Ein sehr nützliches Tool um die Temperaturen der Hardwarekomponenten auf einem Linux-Rechner anzuzeigen ist Psensor.

Screenshot Psensor

Es kann ja immer mal sein, dass ein Kühler ausfällt oder Staub seine Wirkung verringert. Mit Psensor kann man auch Grenzwerte einstellen, deren Überschreitung einen Alarm auslöst.

Eine Installationsbeschreibung kann ich mir hier schenken, die gibt es unter:

https://pinguin.gws2.de/ubuntu-temperaturen-des-systems-anzeigen-diagnosetool/

https://wiki.ubuntuusers.de/Psensor/

 

Zurzeit bin ich dabei mit mehreren dieser kleinen Geräte Anwendungen zu realisieren. Dabei tauchen immer wieder Informationen auf, die ich nicht verlieren möchte. Dazu dient dieser Beitrag.

Raspis Temperatur

Der Raspi verfügt über einen eingebauten Temperatur-Sensor. Dieser Sensor lässt sich folgendermaßen abfragen:

cat /sys/class/thermal/thermal_zone0/temp

Dieser Aufruf liefert momentan konkret:

42345

Das ist als Temperatur von 42,3° zu interpretieren (einfach durch 1000 teilen).

Etwas direkter erhält man diese Temperatur mittels

vcgencmd measure_temp

Das liefert die Ausgabe

temp=42.3'C

 

In der letzten Zeit ist es nicht einfacher geworden PDF-Dokumente in einer Webseite darzustellen. Zwar beherrscht Firefox das problemlos, aber z.B. nicht die Android-Version. Auch auf verschiedenen Apfel-Geräten funktioniert das nicht von Haus aus.

Zum Glück gibt es das Projekt https://github.com/mozilla/pdf.js mit dessen Javascript die Einbindung auf sehr vielen Geräten identisch funktioniert. Ich habe mir die Software von https://mozilla.github.io/pdf.js/getting_started/ geladen und die ZIP-Datei in ein Verzeichnis /pdfjs entpackt.

Leider ist die Nutzung des Scripts etwas aufwendig. Eine einfache Lösung besteht darin die mitgelieferte Viewer-Seite aus dem Unterverzeichnis /pdfjs/web zu nutzen und über einen Iframe einzubinden:

<iframe id="pdf-js-viewer" 
        src="/pdfjs/web/viewer.html?file=/fileadmin/user_upload/netthelp.pdf" 
        title="webviewer" 
        frameborder="0" 
        width="500" 
        height="600">
</iframe>

Leider ist diese Lösung so nicht responsiv. Mit Hilfe von https://www.w3schools.com/ habe ich mir folgende Lösung erarbeitet (hier für eine Typo3 Installation):

<div style="position: relative;
            width: 100%;
            overflow: hidden;
            padding-top: 141%;
           ">
  <iframe id="pdf-js-viewer"
          src="/pdfjs/web/viewer.html?file=/fileadmin/user_upload/netthelp.pdf#zoom=auto"
          title="webviewer"
          frameborder="0"
          style="position: absolute;
                 top: 0;
                 left: 0;
                 bottom: 0;
                 right: 0;
                 width: 100%;
                 height: 100%;
                 border: none;
          ">
  </iframe>
</div>

Der Trick besteht darin ein DIV Element zu nutzen, das die ganze verfügbare Breite einnimmt und über padding-top eine darauf basierende Höhe bekommt. Bei den DIN Ax Dokumenten ist das Höhen-Breiten-Verhältnis 1,41:1 bei Portrait und 1:1,41=0,71:1 bei Landscape.

In dieses Element hinein wird dann der IFrame geladen und bekommt den vollständigen Platz zur Verfügung gestellt.

Mittels #zoom=auto wird erreicht, dass sich auch der PDF-Viewer an den zur Verfügung stehenden Platz anpasst. Hinter zoom=… könnten folgende Angaben stehen:

  •  200 (oder eine beliebige Prozentzahl)
  • page-width
  • page-height
  • page-fit
  • auto

Außer zoom gibt es noch den Parameter page=, damit kann angegeben werden, mit welcher Seite des PDFs die Darstellung startet. Weitere Möglichkeiten finden sich auf der Seite https://github.com/mozilla/pdf.js/wiki/Viewer-options.

Weitere Informationen:

Für den Austausch von Medien nutzt Talk das Protokoll WebRTC (Web Real-Time Communication), einen offenen Standard zur direkten Kommunikation zwischen Rechnern. Die aktuellen Browser unterstützen dieses Protokoll, sodass damit Videokonferenzen problemlos möglich sind, zumindest innerhalb eines lokalen Netzes.

Sind die beteiligten Rechner in verschiedenen Netzen, so taucht ein Problem auf. Die Browser müssen ihre eigene IP-Adresse und die IP-Adresse der Gegenstelle wissen. Dies ist leider oft nicht der Fall, wenn sie hinter einem NAT-Router sitzen, z.B. einer Fritzbox. Hier kennen die Geräte nur ihre netzinterne IP-Adresse, z.B. 192.168.1.52, aber nicht die offizielle IP-Adresse, die nur der Router kennt.

Dieses Problem lässt sich mit einem STUN-Server (Session Traversal Utilities for NAT) lösen. Bei dem STUN-Server melden sich die beteiligten Rechner, dabei lernt er ihre öffentlichen IP-Adressen kennen und kann sie an die Gesprächspartner weitergeben. Mit diesen Informationen können die Geräte dann direkt miteinander kommunizieren.

Der Betrieb eines STUN-Servers ist relativ problemlos, da nur sehr geringe Datenmengen anfallen. Es gibt daher auch öffentliche STUN-Server, z.B. bei Nextcloud stun.nextcloud.com:443 (Voreinstellung in Talk).

Leider langt der STUN-Server heutzutage nicht mehr. Ein Router, wie die Fritz!Box, macht nämlich nicht nur NAT, sondern stellt auch eine Firewall zur Verfügung. Verbindungen von außen, aus dem Internet, auf die Rechner innerhalb des lokalen Netzes sind so nicht möglich, ohne auf dem Router Ports freizugeben und auf den Zielrechner weiterzuleiten. Das wäre eine recht aufwändige Vorgehensweise. Es sind nur Verbindungen aus dem Inneren des jeweiligen Netzes zu öffentlich zugänglichen Rechnern möglich.

Hier kommt der TURN-Server ins Spiel (Traversal Using Relays around NAT), er ermöglicht es den Clients Daten ohne eine direkte Verbindung auszutauschen (Relay Server). Sämtlicher Datenverkehr läuft dann durch diesen Server.

Öffentliche TURN-Server wird man in der Regel nicht finden, da rechte hohe Datenvolumina anfallen. Für eine ordentliche Videoqualität werden 500 kbit/s angegeben. Bei 3600 Sekunden in einer Stunde macht das dann 500×3.600 = 1.800.000 kbit etwa 1.800 mbit, also schon ein erhebliches Datenvolumen.

 

Heute hatte ich ein blödes Problem zu lösen. Alle Anrufe auf die Familien-Festnetznummer landeten auf meinem Handy. In der Fritz!Box tauchten die Gespräche nicht auf, hier war auch keine entsprechende Weiterleitung eingerichtet. Nachdem ich auch alle Fritz!Apps deaktiviert hatte, war klar, es muss eine Einstellung bei O2 sein.

Leider konnte ich im Online-System keine Möglichkeit finden die Änderung vorzunehmen bzw. überhaupt zu prüfen.

Es geht auch im Festnetz über bestimmte Rufnummern bzw. Codes, die sich aber von den entsprechenden GSM-Codes unterscheiden.

Deaktivieren der sofortigen Rufumleitung geht bei o2-DSL über

  • *21*# für die Hauptrufnummer und mit
  • *21**# für alle Rufnummern.
  • Eine Rufumleitung auf einer bestimmten Rufnummer lässt sich mit *21**<Rufnummer># löschen.

Aktivieren kann man die Rufumleitung für die Hauptrufnummer übrigens mit

  • *21*<Zielrufnummer>#, vermutlich nur für die aktuelle Rufnummer
  • für alle Rufnummern mit *21*<Zielrufnummer>*#
  • und für eine bestimmte Rufnummer mit *21*<Zielrufnummer>*<Rufnummer>#

 

mit *#21*# oder *#21# soll man Informationen über den aktuellen Stand der Rufumleitung bekommen.

Eine umfangreiche Liste der Möglichkeiten ist auf folgender O2-Seite zu finden: https://static2.o9.de/blob/12926130/v=2/Binary/telefoniemerkmale-dsl-pdf-download.pdf

Hinweis: Die Codes unterscheiden sich leicht in unterschiedlichen Anleitungen, manchmal beginnen die Sequenzen mit **. Eine besondere Bedeutung kommt der Zahl zu, hier die 21:

  • 21 steht für ständige Rufumleitung
  • 61 für Rufumleitung bei Nichterreichen
  • 67 für Rufumleitung bei Besetzt