Das Infolexikon
...und Blog über die Uni FrankfurtInformatik und Kram
Da wir lange nicht wußten, wo wir das für die Uni ausgearbeitete Material unterbringen sollten und auch einen schrecklichen Drang hatten der Welt diverse Sachen aufzudrücken...
| Laptop sperren mit dem Kartenleser |
So ziemlich jeder neue Laptop kommt heute mit einem Kartenleser. Warum diesen Slot nicht dafür verwenden, um sein System zu sperren, wenn die Karte entfernt wird? Anfang des Jahres versuchten wir uns da schon einmal dran, was sich dann aber irgendwie im Sand verlaufen hat. Doch jetzt ist es endlich geschafft, ich bin schon fast 100% zufrieden und stell euch hier meine Arbeit mal vor. Ziel: Computer nur hochfahren, wenn die Karte eingesteckt ist, beim entfernen Sound muten, Screensaver starten und als Bonus sozusagen su ohne Passwortabfrage!
Vorraussetzungen
Natürlich sollte der Laptop über einen Cardreader verfügen, sonst macht der ganze Spaß keinen Sinn. Dieser wird dann anschließend von einer SD-Karte blockiert, aber ich benutze den Slot ohnehin nicht so oft. Und wenn doch, dann stoppe ich eben den Daemon und kann ganz normal damit arbeiten.PAM
Als Grundlage dient uns hier der PAM (Pluggable Authentication Modules) für Linux und das dafür passende pam_usb Modul. PAM sind eine Softwarebibliothek, die eine allgemeine Programmierschnittstelle (API) für Authentisierungsdienste zur Verfügung stellt. Grob erklärt: Software braucht ne Benutzeridentifizierung, fragt bei PAM an, wie der Benutzer sich authentifizieren soll, macht das und bekommt anschließend ne Rückmeldung, ob die Erkennung funktioniert hat. Für PAM gibt es viele Module, die uns alle bekannte Passworteingabe, aber auch Fingerabdruckscanner werden unterstützt. Für uns ist jetzt das PAM_USB Project von Interesse. Mit pam_usb kann man sich am Computer mit einem USB Stick authentifizieren. Aber eine SD-Karte ist kein USB- Stick, also müssen wir da etwas tüdeln.PAM_USB installieren
Die Quelldateien zu pam_usb gibt es hier. Nachdem man diese entpackt hat, muss man nur eine Kleinigkeit editieren. pam_usb prüft bei einem eingesteckten USB- Stick 3 Dinge über HAL: Die Seriennummer, den Hersteller und die Produkt-ID. Eine eingesteckte SD- Karte bietet aber nur die Seriennummer, die aber meiner Meinung nach vollkommen ausreichen sollte. Also müssen die beiden anderen Zeilen gelöscht werden, und zwar mit:sed -i /opts-\>device.model,/d src/device.c sed -i /opts-\>device.vendor,/d src/device.c
Du benutzt Archlinux? Man hast du ein Glück, hier gibts die PKGBUILD!
System konfigurieren
Zuerst einmal muss man die Serialnumber der Karte herausbekommen. Dazu lässt man die Karte aus dem Reader, macht ein ls /dev/disks/by-uuid/*, steckt die Karte wieder ein und schon hat man die UUID. Die Serial erhält man dann zum Beispiel so:`--> hal-device| grep -A 10 -B 10 <uuid hier eintragen> block.storage_device = '/org/freedesktop/Hal/devices/storage_serial_Y
/etc/pamusb.conf
Jetzt müssen wir die Karte in die Konfigurationsdateien von pam_usb eintragen.
<devices>
<defaults>
<option name="one_time_pad">false</option>
</defaults>
<device id="MyKeyCard">
<serial>EURE_SERIAL</serial>
<volume_uuid>EURE_UUID</volume_uuid>
<option name="debug">disable</option>
</device>
</devices>
Jetzt müssen wir noch den Benutzer einrichten, der diese Karte benutzen kann. Dazu trägt man in die Konfigurationsdatei noch folgendes ein:
<users>
<user id="DEIN_BENUTZERNAME">
<device>MyKeyCard</device>
<option name="one_time_pad">false</option>
</user>
<user id="root">
<device>MyKeyCard</device>
<option name="one_time_pad">false</option>
</user>
</users>
`--> pamusb-check andieh * Authentication request for user "andieh" (pamusb-check) * Device "MyKeyCard" is connected (good). * Access granted.
Computer sperren
Im Moment sitze ich den ganzen Tag in der Bibliothek und lerne für meine Diplomprüfung. Der Laptop ist mit einem Kensington Schloss festgebunden. Die Oberfläche locke ich, indem ich einfach meine SD- Karte mitnehme, das ist äußerst praktisch!Das Zauberwort heißt hier pamusb-agent, der seine Konfiguration auch aus der /etc/pamusb.conf bezieht. Dort kann man beliebige Befehle eintragen, die er beim rauswerfen oder einstecken der Karte ausführen soll. Als Screensaver ist hier der gnome-screensaver besonders geeignet, auch wenn der so mies zu konfigurieren ist und eigentlich eh total schlecht ist. Aber für meine Zwecke reichts! Also einfach folgendes in die pamusb.conf, unter den Benutzer, der eben gerade eingeloggt ist:
<agent event="lock">gnome-screensaver-command --lock</agent> <agent event="lock">amixer set Master toggle</agent> <agent event="unlock">gnome-screensaver-command --deactivate</agent> <agent event="unlock">amixer set Master toggle</agent>
Damit dann beim auswerfen und einstecken die Befehle ausgeführt werden, muss man pamusb_agent noch beim starten eures WM gestartet werden.
automatisch Authentifizieren
Naja hier noch die bequemste Neuerung für uns mit pam_usb. Mit Linux arbeitet man immer nur als User, niemals als root (Ja genau, speyer!). Einen Befehl führt man dann mit su -c "Befehl" nur temporär als root aus. Und mich fuckt das schon ab, jedesmal das Passwort eingeben zu müssen. Also nehmen wir dafür einfach pam_usb! Also schnell die entsprechende Konfigurationsdatei geöffnet (/etc/pam.d/su) und fügen folgende Zeile gleich am Anfang ein:auth sufficient pam_usb.so
Ich liebe es, es klappt so wunderbar:
`--> mkdir /deine_muddi mkdir: cannot create directory `/deine_muddi': Permission denied .-(~)--------------------------------------------------(andieh@herkules)- `--> su -c "mkdir /deine_muddi" * pam_usb v0.4.2 * Authentication request for user "root" (su) * Device "MyKeyCard" is connected (good). * Access granted.
automatisch Einloggen
Bisher habe ich nach dem Starten immer GDM geladen und musste mein Passwort angeben. Auch hier gibt es die Möglichkeit, pam_usb zu verwenden, dann gibt man nur seinen Benutzernamen ein und sein WM wird geladen. Konfiguriert man GDM noch so, das er automatisch einen Benutzer einloggen soll, dann sind wir schon so gut wie fertig. Karte eingesteckt beim booten -> ready to work, Karte draußen -> wir brauchen ein Passwort.Wer aber komplett nur mit Karte booten will, der geht folgendermaßen vor: Beim booten wird, bevor GDM überhaupt gestartet wird, erstmal überprüft, ob die Karte eingesteckt ist. Ist das nicht der Fall, zeigen wir über den Framebuffer direkt ein Bild an, das uns an das Einstecken erinnert. Wird dann die Karte eingesteckt, starten wir den GDM- Daemon, der uns automatisch einloggt.
Das ganze ist ein wenig tricky. Damit das Anzeigen des Bildes nicht abgebrochen werden kann, muss man das ganze in eine while Schleife verpacken. Aber wie kommt man da wieder raus? Man braucht also 2 Dateien. Eine, die das Bild (startup_showimage) anzeigt, und eine (startup_checkcard), die auf die Karte wartet und dann gdm startet!
Zuerst legt man eine Datei startup_showimage an, die uns das Bild im Framebuffer anzeigt.
#!/bin/bash /pfad/zu/startup_checkcard & while true; do fbi --noverbose /pfad/zum/bild/waiting.jpg done
Die Datei startup_checkcard sieht dann so aus:
#!/bin/bash
unplugged=1
while [ $unplugged == 1 ]; do
pamusb-check --quiet DEIN_BENUTZERNAME
if [ $? == 0 ]; then
unplugged=2
sleep 1
killall startup_showimage
kill `pidof fbi`
sed -i "s/\(^AutomaticLoginEnable=\).*/AutomaticLoginEnable=true/" /etc/gdm/custom.conf
/etc/rc.d/gdm start &
sleep 5
sed -i "s/\(^AutomaticLoginEnable=\).*/AutomaticLoginEnable=false/" /etc/gdm/custom.conf
else
sleep 2
fi
done;
Nach dem erzeugen der Datei nicht vergessen, die Dateien ausführbar zu machen (mit chmod +x). Jetzt wie gesagt nur noch startup_showimage beim starten eurer Distribution zu laden. Bei Archlinux fügt man einfach den Pfad zur Datei in die /etc/rc.local.
ACHTUNG: Checkt die Dateien lieber drei Mal! Lasst das alles mal so durchlaufen (in der Konsole), um sicher zu gehen, das alles funktioniert. Solltet ihr euch trotzdem aus eurem System aussperren, können wir da absolut gar nix zu!
Ausblick
Immer mehr Anwendungen benutzen PAM. Bei Arch gibt es leider keine "Standardkonfiguration", die alle Software automatisch das PAM_USB Modul benutzen lässt. Jede Software muss da von Hand freigeschaltet werden, was auch gut sein kann. Egal, mehr Software mit pam_usb, das is das Ziel!Außerdem möchte ich in Zukunft noch meine /home/ Verschlüsseln, der Schlüssel dafür soll auf die SD- Karte, mounten dann natürlich auch nur, wenn die Karte drin ist. Aber das mach ich erst, wenn ich irgendwann mal die Zeit finde, mein System neu zu partitionieren / installieren.
Sonst bin ich aber rundum zufrieden. Die Zeit benutz ich jetzt erst mal zum testen, damit ich sichergehen kann, das alles richtig funktioniert, bevor ich dann irgendwann die Passwortabfrage komplett entferne und nur noch mit der Karte arbeite.
Außerdem brauch ich schleunigst neu weitere Karte als "Zweitschlüssel", sonst könnte das ganz fies enden!
Anhang
Die PKGBUILD für Archlinux:Mein Bild, das angezeigt wird, wenn man beim booten keine Karte eingesteckt hat (1280x768):Die komplette /etc/pamusb.confUnd noch die Datei startup_checkcard, startup_showimage kriegt noch jeder selber hin.
| Erstellt | 9. November 2008 13:19:15 | Geändert | 9. November 2008 15:57:08 |
|---|---|---|---|
| Von | Andreas Fürtig | Kategorien | Linux Hardware |
| 5 Kommentar(e) | |||
Kommentare
Das is ja echt geil, kann ich beliebige Sachen dann in pamusb.conf kloppen? also auch von mir aus nen EncFS mount inklusive nen 2048bit key auf der SD-Card? is ja deluxe
jipp!
Gerade beim Starten würde ich dann die Partitionen mounten. Über den pamusb-agent würde ich das dann aber nicht machen, weil schon eher schlecht, wenn die home auf einmal unmountet wird, wenn man noch eingeloggt ist. Hehe geht ja dann eh nicht. Bla bla
Gerade beim Starten würde ich dann die Partitionen mounten. Über den pamusb-agent würde ich das dann aber nicht machen, weil schon eher schlecht, wenn die home auf einmal unmountet wird, wenn man noch eingeloggt ist. Hehe geht ja dann eh nicht. Bla bla
Ja eh nicht so die ganze Home, ich hab da nur son EncFS laufen, das ist auf FUSE aufgesetzt und effektiv nur ein File, was halt als EncryptedFS mountbar ist....
btw, wenn man mal die alte karte verliert, bzw. der access verwehrt wird, weil die Pad-Verification fehlschlägt,
einfach im home-verzeichnis das komplette .pamusb verzeichnis löschen, dann gehts wieder!
einfach im home-verzeichnis das komplette .pamusb verzeichnis löschen, dann gehts wieder!
Ich finde die idee selber klasse aber ich habe das problem das ich selber windows nutzer bin und weder die programmiererischen fähigkeiten noch über das nötige wissen verfüge als das ich eine virtuelle maschiene auf einem linux basierendem system erstellen könnte um dann windows zu laden
habt ihr einen weg oder ein programm um das ganze auch für windows gängig zu machen?
habt ihr einen weg oder ein programm um das ganze auch für windows gängig zu machen?
