Biometrische Authentifizierung am Raspberry Pi und Debian Linux (Update)
Written by Bastian Raschke.
Published 2014-03-25 in the category Raspberry Pi.
In meinem letzten Beitrag habe ich meine Python-Bibliothek PyFingerprint vorgestellt, mit der sich ein nativer Fingerprint-Sensor allgemein auf einem Linux-System nutzen lässt. Das ist auch alles ganz cool, mir fehlte jedoch noch die praktische, tägliche Verwendung. Und was ist nicht alltäglich besser nutzbar als die Anmeldung am Raspberry Pi oder normalen Debian Linux-Rechner?
Zusammen mit Phil, einem Freund und Mitstudent, haben wir als Ergänzung zu der Fingerprint-Bibliothek ein sogenanntes Pluggable Authentication Module (PAM) geschrieben. Dies bezeichnet die modulare Schnittstelle von Linux, Benutzerauthentifizierung durchzuführen. Also wenn ihr auch täglich per Passwort am System anmeldet, benutzt ihr bereits ein standardmäßig mitgebrachtes PAM Modul. Anders als ein anderes proprietäres Betriebssystem, das ich nicht sehr schätze (was wohl hier gemeint ist?), bietet Linux wirklich ein sehr einfach verständliche Schnittstelle, bei der Benutzerauthentifizierung mitzuwirken.
Trotz dass diese Module normalerweise in C geschrieben werden, gibt es dank dem Projekt pam_python eine sehr bequeme Möglichkeit mit Python 2 eigene PAM Module zu schreiben. Und von diesem haben wir uns Nutzen gemacht. Es hat trotzdem einige Zeit gedauert, bis wir alle Kniffe und Möglichkeiten von pam_python verstanden hatten. Parallel hatte ich schließlich auch noch an der Bibliothek gesessen. Doch so langsam ist das Modul soweit, es endlich feierlich präsentieren zu können ;-)
Nun aber erst mal die Installation und Einrichtung Schritt-für-Schritt.
Installation
Als erstes müsst ihr das PM Codeworks-Repository hinzufügen:
~$ echo "deb http://apt.pm-codeworks.de wheezy main" | sudo tee -a /etc/apt/sources.list
Dann wird der dazugehörige GPG-Schlüssel installiert, der sicherstellt, dass die Pakete wie gewünscht ankommen und nicht etwa von einer der diversen Zwischenstationen im Internet manipuliert wurden:
~$ wget -O - http://apt.pm-codeworks.de/pm-codeworks.de.gpg | sudo apt-key add -
Nach einem Update der lokalen Paketquellen, könnt ihr das Paket installieren:
~$ sudo apt-get update
~$ sudo apt-get install libpam-fingerprint
Weiterhin muss jeder Benutzer, der den Fingerprint-Sensor benutzen möchte, in der Gruppe „dialout“ sein. Als Beispiel wird im folgenden der Benutzer „pi“ dieser Gruppe zugeordnet:
~$ sudo usermod -a -G dialout pi
Dann muss euer System neugestartet werden!
Einrichtung
Nun ist auch schon fast alles fertig.
Im folgenden wird der Benutzer „pi“ für die Fingerprint-Authentifizierung eingerichtet. Wenn eurer favorisierter Benutzer anders heißt, ist dies in den folgenden Befehlen entsprechend zu ändern.
~$ sudo pamfingerprint-conf --add-user pi
Dann bestätigt ihr euer Vorgehen, woraufhin die rote LED des Sensors aufflammen sollte, was euch zusätzlich zu der erklärenden Konsolenausgabe dazu verleiten soll, den Finger eurer Wahl auf diesen aufzulegen.
Nach dem ersten Einlesevorgang müsst ihr den Finger wieder entfernen und daraufhin wieder auflegen (natürlich den gleichen). Daraufhin sollte euer Benutzer „pi“ bereit sein, sich biometrisch zu authentisieren.
Das solltet ihr nun trotzdem nochmal testen:
~$ pamfingerprint-check --check-user pi
Daraufhin müsst ihr wieder den betreffenden Finger auflegen und es wird euch das entsprechende Ergebnis ausgegeben. Bei der folgenden Ausgabe hat alles problemlos funktioniert:
Waiting for finger...
A match was found on template position #0 with accuracy score 181.
Calculating hash...
Checking if calculated hash matches stored hash...
Hashes match!
Check for user "pi" was successful!
Wenn der Finger nicht korrekt gefunden wurde, versucht es einfach ein zweites Mal. Möglicherweise habt ihr den Finger nicht fest genug aufgelegt. Wenn auch nach mehrmaligen Versuch der Finger nicht gefunden wurde, entfernt euren Benutzer und fügt ihn wieder hinzu. Dies kann in ungünstigen Fällen nötig sein, wenn der Finger nicht „deutlich genug“ abgespeichert wurde.
Ansonsten ist schon alles abgeschlossen. Standardmäßig ist PAM Fingerprint so konfiguriert, dass bei fehlgeschlagener biometrischer Authentifizierung das Passwort natürlich weiterhin genutzt werden kann. Also keine Sorge, dass ihr nicht mehr in euer System kommt ;-)
Benutzer entfernen
Solltet ihr aus irgendwelchen Gründen einen Benutzer wieder von der biometrischen Fingerprint-Authentifizierung entbinden wollt, ist das einfach mit folgendem Befehl möglich:
~$ sudo pamfingerprint-conf --remove-user pi
Gehäuse für den Sensor
Damit ihr den Sensor nicht immer ungeschützt herumtransportieren müsst, haben wir aus einem kleinen Universalgehäuse, dass es für ca. 5€ zu kaufen gibt, ein Schutzgehäuse gebaut, das dem Sensor zudem einiges an zusätzlicher Professionellität verleit. Aber seht selbst:
Die Konstruktion des Gehäuses war eigentlich schnell gemacht: Ich habe eine Schablone aus Papier geschnitten, um die richtige Position für den Fingerschlitz oben anzeichnen zu können. Danach wurde mit einem groben Bohrer ein großes Loch gebohrt, um möglichst viel Material abzutragen. Den Rest bis an die groben Ecken habe ich mit einem kleinen Säge ausgeschnitten. Dann musste lediglich noch die Feinarbeit mit einer Feile vorgenommen werden, damit das ausgeschnittene Viereck nicht aussieht, als ob es mit einem Presslufthammer gestanzt wurde. Der Sensor wird im Gehäuse unten via 2 gebogenen Metalldrähten in seiner vertikalen Position gehalten und oben mit einem kleinen Stück Kabelbinder in seiner horizontalen Position. Die Drähte bzw. der Kabelbinder wurden mit Heißkleber fixiert.
Dann lediglich noch die Kabel halbwegs intelligent verlegen, ein Loch mit einer Rundfeile für das USB-Kabel abtragen und dieses mit einem Kabelbinder gegen ausreißen sichern:
Und fertig war das Fingerprintsensor-Gehäuse ;)
Ausführliches Schlusswort
Um noch ein paar schöne Schlussworte zu finden: Ich wünsche viel Spaß beim Nutzen ;)
Und für alle Besserwisser noch ein Extra-Schlusswort:
Mir ist bekannt, dass die Wort-Zusammensatzung „PAM Modul“ nicht ganz korrekt ist, da in der Abkürzung „PAM“ das Wort „Modul“ ja schon drinsteckt. Aber eben ohne dieses Wort klingt das alles etwas unschön und könnte zudem verwirren. Aus diesem Grunde schreibe ich das so und bitte das zu entschuldigen ;)
Update 1: Neuer Paketname
Wir haben den Paketnamen auf „libpam-fingerprint“ geändert, um den Debian-PAM-Konventionen gerecht zu werden und weiterhin die Installation von PyFingerprint ebenfalls als Debian-Paket automatisiert.
Update 2 (2015-01-09)
Wir haben das Paket nach offiziellen Debian-Konventionen neu strukturiert und stellen dies natürlich über das PM Codeworks-Repository auch als Quelltext-Version zur Verfügung.
Tags: Raspberry Pi, Debian, Fingerprint, PAM, Sicherheit