Dokumenten-Scanner

Posted on Mo 16 August 2021 in Computer & Electronics

Ich hasse Bürokratie! Vor allem, wenn sie damit verbunden ist, dass ich mich um Papierkram kümmern muss. Und jeder von uns hat genug davon: Rechnungen, Schreiben von Krankenkasse, Rentenversicherung & Co, Autoversicherung, etc. Alle schicken uns dauernd Papier, das man momentan nicht wirklich braucht, aber das dennoch wichtig ist und aufgehoben werden will – und zwar so, dass man es im Falle eines Falles auch wiederfindet.

Dazu hat man normalerweise gefühlte hundert verschiedene Ordner, in die man den ganzen Mist getrennt nach Thema und sortiert nach Datum einsortiert. Und wenn man sehr fleißig und gewissenhaft ist, dann macht man das immer sofort nachdem ein Brief eingegangen ist und hat fast gar keine Mühe. Bin ich aber nicht, und es macht jede Menge Mühe!

Und so haben wir uns zusätzlich zum Multifunktionsdruckkopierscanfaxgerät noch so einen kleinen automatischen Dokumentenscanner angeschafft. Mein Plan ist es, jedes neue Dokument

  1. Mit einer fortlaufenden Nummer zu bestempeln
  2. Einzuscannen
  3. Der Reihe nach abzuheften – ausschließlich nach der Nummer sortiert

Die Scans sollen in ein elektronisches Dokumenten-Management System laufen, in dem ich dann hoffentlich alles schnell wieder finde. Und sollte ich doch mal ein Papier-Original brauchen, kann ich es anhand der Nummer ausfindig machen. Langfristig hoffe ich, die Papierkopien einfach wegwerfen zu können. Aber Eins nach dem Anderen.

Scanner

Der betreffende Scanner ist ein Brother ADS-2800W. Der ist recht flott, scannt in einem Durchgang beide Seiten und kann recht flexibel konfiguriert werden, so dass wir die privaten und beruflichen Sachen leicht separat halten können.

U.a. kann er direkt auf einen sFTP-Server scannen und das ist meine Wunschkonfiguration. Also habe ich auf dem Heimserver einen neuen User ads für den Scanner angelegt und in dessen home Directory je einen Ordner für die unterschiedlichen Scan-Jobs angelegt. Noch je nach Bedarf eine paar User-Groups generieren und die Folder mit passenden Gruppen-Ownerships und Permissions versehen und schon hat alles seine Ordnung.

In unseren eigenen Home-Directories habe ich dann Symlinks auf die Ordner angelegt, für die wir jeweils die nötigen Permissions haben. Sieht doch schon alles sehr ordentlich aus. Der Zugriff funktioniert wie geplant und auch meine Frau hat unter Windows kein Problem, da sie wahlweise die ohnehin eingerichtete Datei-Synchronisation oder den Direktzugriff via SMB verwenden kann.

Die Konfiguration des Scanners erfolgt ganz bequem per https Zugriff. Als erstes stellen wir mal alle Netzwerk-Profile auf SFTP:

Nun können wir jedes der Profile konfigurieren. Dort hinterlegen wir u.a. den User Name für unseren Scanner User ads. Dort könnte man auch das dazugehörige Passwort eintragen, aber auf meinem Server lasse ich keine Passwort-basierten ssh-connections zu – d.h. wir brauchen ein Key-Pair.

Dazu springen wir ans Ende der schier endlosen Liste von Optionen, denn dort findet man die Links Client Key Pair und Server Public Key. Als erstes generieren wir ein Client Key Pair für unseren user ads und exportieren den Public Key auf unseren Rechner. Dort gespeichert muss er noch auf dem Server (meiner heißt hal) hinterlegt und an die richtige Stelle kopiert werden:

scp publickey.pub ads@hal:
ssh ads@hal
echo publickey.pub >> ~/.ssh/authorized_keys

Nun will ssh ja jedes mal verifizieren, dass der Server auch der ist, der er zu sein vorgibt und prüft dazu den Public-Key des selbigen. Ihr kennt das – wenn man sich erstmals einloggt:

The authenticity of host 'hal (192.168.0.XYZ)' can't be established.
ECDSA key fingerprint is SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

Wobei da statt xxxxxxxxxxx... natürlich der echte Fingerprint steht. Also muss unser Scanner den Fingerprint des Servers kennen, um die Verbindung zu akzeptieren. Auch das sah zunächst einfach aus.

Na dann besorgen wir uns mal einen Public Key:

ssh-keyscan hal > serverkey.pub

Und so sieht serverkey.pub dann aus:

hal ssh-rsa XXXXXXXXXXXXXXXXXXXXXXXX[...]
hal ecdsa-sha2-nistp256 XXXXXXXXXXXXXXXXXXXXXXXX[...]
hal ssh-ed25519 XXXXXXXXXXXXXXXXXXXXXXXX[...]

Sehr gut – das macht Sinn. Also dieses File über das Web-Interface des Scanners importieren Submit drücken. Und schon:

The file is either no longer available or does not contain a valid public key.

Grumpf! Was'n da los?

Könnte es sein, dass der Scanner garnicht den Key haben will, sondern nur den Fingerprint? Also erstellen wir den mal:

ssh-keygen -l -f serverkey.pub > serverkey.fingerprint

Die -l Option bewirkt, dass wir einen Fingerprint bekommen und -f spezifiziert den Key für den wir selbigen haben wollen.

Neues Spiel – neues Glück: File Upload, submit, Error!

Schlecht.

Eine halbe Ewigkeit habe ich im Netz herum recherchiert, diverse andere Optionen für ssh-keyscan und ssh-keygen ausprobiert. Erfolglos. Die einzige Abwechslung bestand darin, dass ich ab einem gewissen Punkt eine völlig andere Fehlermeldung bekam: "The server public key and file name are already in use.". Das hat es nur noch verwirrender gemacht...

Ich habe mich sogar soweit erniedrigt, das Handbuch zu lesen. Kein Glück.

Und so habe ich letztlich den Brother-Support kontaktiert. Die haben mein Ticket erstmal in die nächste Ebene eskaliert und dann verschiedene Vorschläge gemacht, die es aber auch nicht gelöst haben. Allerdings haben sie mir auf meine Bitte hin einen gültigen Server-Key geschickt:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+dUdstqYzMq9ZRJ[...]

Und dann fiel es mir wie Schuppen von den Augen! Wer sieht den Unterschied? Da steht nur ssh-rsa gefolgt vom Key. Aber nicht der Servername!

Also habe ich mein Key-File in den Texteditor geladen und die erste Spalte gelöscht. Und siehe da:

Die Wurzel des Übels ist übrigens der ssh-keyscan Befehl (bzw. meine Unwissenheit) und nicht die Brother Firmware. Alternativ hätten wir uns den public Key unseres Servers auch direkt aus dessen Dateisystem besorgen können:

$ ll /etc/ssh/*.pub
-rw-r--r-- 1 root root 172 2019-10-07 22:28 /etc/ssh/ssh_host_ecdsa_key.pub
-rw-r--r-- 1 root root  92 2019-10-07 22:28 /etc/ssh/ssh_host_ed25519_key.pub
-rw-r--r-- 1 root root 392 2019-10-07 22:27 /etc/ssh/ssh_host_rsa_key.pub

World-readable (public-Key ...) und von vornherein korrekt formatiert!

Nun können wir unsere Netzwerk-Scan Profile schön konfigurieren:

Die Liste der Optionen geht noch ein bisschen weiter, aber ich wollte Euch damit nicht langweilen.

Write only FTP

Was den Dokumentenscanner angeht ist nun alles eingerichtet und einem sicheren Datentransfer steht nichts mehr im Wege. Allerdings habe ich noch ein Multifunktionsgerät, das kein SFTP beherrscht, sondern nur normales FTP. Das gute alte FTP-Protokoll funktioniert zwar zuverlässig, ist aber jetzt nicht so auf der Höhe der Zeit, was Sicherheit angeht. Um das MUFU dennoch nutzen zu können ist es empfehlenswert, ein paar Sicherheitsvorkehrungen zu treffen.

Zunächst brauchen wir aber mal einen Server. Ich verwende proftpd – der ist ziemlich angenehm und flexibel konfigurierbar. Der Server selbst ist im Nullkommanix installiert:

apt install proftpd

Aber wenn wir nichts unternehmen, sind alle user-accounts via FTP zugreifbar – das wollen wir nicht. Nur der user ads soll FTP machen können. Im Config-File (/etc/proftpd/proftpd.conf) fügen wir daher folgendes ein:

<Limit LOGIN>
DenyAll
AllowUser ads
</Limit>

Besser. Aber eigentlich ist es auch blöd, wenn der ads user mehr darf, als er unbedingt braucht. Kurz: ich hätte gerne write-only Zugriff dafür. Kein Lesezugriff auf bereits hochgeladene Files und auch keine Möglichkeit Directories zu listen. Klingt etwas paradox, aber geht ganz leicht:

<Limit READ>
DenyAll
</Limit>

<Limit LIST>
DenyAll
</Limit>

Nun noch schnell den Daemon neu starten und schon ist das einigermaßen abgesichert:

sudo systemctl restart proftpd

EDMS

Was nun noch fehlt ist das EDMS (Electronic Document Management System). Ich teste gerade zwei vielversprechende Kandidaten: Mayan-EDMS und Paperless-ng. Ersteres scheint mir deutlich mächtiger, aber auch komplexer, Zweiteres wirkt sehr übersichtlich, kann aber dafür nicht so viel. Ich werde mit beiden noch ein wenig herumspielen, bevor ich mich festlege...