Anzeige:
Ergebnis 1 bis 6 von 6

Thema: [howto] udev, dmcrypt und was man damit machen kann

  1. #1
    Flachinformatiker Avatar von MiGo
    Registriert seit
    Oct 2002
    Ort
    Heidelberg
    Beiträge
    5.270

    Lightbulb [howto] udev, dmcrypt und was man damit machen kann

    Einleitung
    Dieses How-To beschäftigt sich damit, beim Anstecken eines USB-Gerätes automatisch eine verschlüsselte Partition (geht allerdings auch mit einem Container) einzuhängen, der beim Abziehen des Gerätes wieder verschwindet.
    Warum dieses How-To? Weil ich ein fauler Mensch bin. Und faule Menschen mögen keine Verschlüsselung, das ist zu viel Arbeit, jedes mal die Passwörter einzugeben. Also will ich meine Passwörter auf einem USB-Stick unterbringen, und meine Verschlüsselten Partitionen einhängen, indem ich einfach den Stick einstecke.

    Es gibt schon eine Anleitung dieser Art von mir, letzes mal allerdings mit devfs und loop-aes. Da nun sowohl in der Verschlüsselung als auch im Umgang mit Gerätedateien "die nächste Generation" ansteht, dieses Update.
    "Da steht sowas ähnliches wie" oder "das funzt net!!" ist keine Fehlermeldung!

  2. #2
    Flachinformatiker Avatar von MiGo
    Registriert seit
    Oct 2002
    Ort
    Heidelberg
    Beiträge
    5.270

    1. Ich gehe davon aus dass...

    Dieses How-To ist unter Debian und für Debian geschrieben, und unter keiner anderen Distribution gestestet. Ich habe nämlich gerade keine andere . Wenn jemand die Pfadewegen seiner Distribution anpassen muss, bitte ich um eine PN und werde die Distributionsspezifischen Pfade hier erwähnen
    Ich habe eine verschlüsselte Partition /dev/hdb2 und einen USB-Stick der Firma "Twinmos", auf dem die Passwörter gepeichert werden sollen. /dev/hdb2 ist mittels dm-crypt verschlüsselt, und auf dem USB-Stick befindet sich eine Datei namens "twinpass", die das Passwort zu der Partition enthält.
    Die Mountpunkte für die verschlüsselte Partition und den USB-Stick sind /mnt/crypt und /mnt/twinmos.

    Ausserdem gehe ich davon aus, dass udev,dm-crypt sowie alle eventuell benötigten Kerneleinstellungen installiert und lauffähig sind. Für udev brauch man meiner Erinnerung nach nur die Pakete "udev" und "hotplug", dmcrypt erfordert das Paket "cryptsetup". Unter Debian sollte also ein "apt-get install udev hotplug cryptsetup" alle benötigten Pakete installieren.

    Die Einrichtung von udev und dm-crypt werde ich hier nicht erklären; dazu gibt es genug Anleitungen im Netz und im Forum. Nützliche Links zu How-Tos:
    http://glasnost.beeznest.org/articles/186 (Umstieg von devfs auf udev unter Sarge)
    http://www.reactivated.net/udevrules.php
    http://gentoo-wiki.com/HOWTO_dmcrypt
    "Da steht sowas ähnliches wie" oder "das funzt net!!" ist keine Fehlermeldung!

  3. #3
    Flachinformatiker Avatar von MiGo
    Registriert seit
    Oct 2002
    Ort
    Heidelberg
    Beiträge
    5.270

    Verschlüsselte Partition einrichten

    1.1 Verschlüsselte Partition einrichten
    Die zu verschlüsselnde Partition liegt auf /dev/hdb2. Also werden erstmal alle Daten gesichert und die Partition verschlüsselt eingehängt:
    cryptsetup -y create twincript /dev/hdb2
    Danach wird die Partition mit "mkfs.ext2 /dev/mapper/twincrypt" formatiert, mittels "mkdir /mnt/crypt" der zugehörige Mountpunkt erstellt und mit "mount /dev/mapper/twincrypt /mnt/crypt" hängt man die Partition ein. Jetzt kann man, wenn man tapfer ist, seine Daten schon wieder zurückspielen.
    Danach wird die Partition wieder ausgehängt ("umount /mnt/crypt") und die Verschlüsselung aufgehoben ("cryptsetup remove twincrypt").

    1.2 ..und der Schlüssel
    Der USB-Stick wird wie gewohnt eingehängt und mittels "echo MeinGeHeimEsPassWort > /mnt/usbstick/twinpass" legen wir die Datei mit dem Passwort an. Das sollte idealerweise exakt das gleiche Passwort sein, das wir beim Erstellen der verschlüsselten Partition verwendet haben .
    Der Stick wird danach ausgehängt und abgezogen.
    "Da steht sowas ähnliches wie" oder "das funzt net!!" ist keine Fehlermeldung!

  4. #4
    Flachinformatiker Avatar von MiGo
    Registriert seit
    Oct 2002
    Ort
    Heidelberg
    Beiträge
    5.270

    2. One Rule to bind them...

    2.1 Informationen sammeln
    Als erstes brauchen wir Informationen über den USB-Stick, den wir als Schlüssel verwenden wollen, um das Plugin-Script möglichst auf dieses eine Gerät zuzuschneiden. Die benötigten Informationen liefern uns die Befehle "dmesg" und "lsusb -v" als root:

    dmesg ergibt:
    usb 4-4.3: new high speed USB device using ehci_hcd and address 17
    scsi9 : SCSI emulation for USB Mass Storage devices
    usb-storage: device found at 17
    usb-storage: waiting for device to settle before scanning
    Vendor: USB 2.0 Model: Mobile Disk N4S Rev: 1.00
    Type: Direct-Access ANSI SCSI revision: 02
    SCSI device sda: 253952 512-byte hdwr sectors (130 MB)
    sda: assuming Write Enabled
    sda: assuming drive cache: write through
    SCSI device sda: 253952 512-byte hdwr sectors (130 MB)
    sda: assuming Write Enabled
    sda: assuming drive cache: write through
    sda: sda1
    Attached scsi removable disk sda at scsi9, channel 0, id 0, lun 0
    Attached scsi generic sg0 at scsi9, channel 0, id 0, lun 0, type 0
    usb-storage: device scan complete
    Das sagt uns erstmal nur, dass der Stick vorschriftsmässig erkannt worden ist. Hilft uns nur bedingt weiter.


    "lsusb -v" ist da schon hilfreicher:
    Bus 004 Device 017: ID 126f:1325 TwinMOS Mobile Disk
    Device Descriptor:
    bLength 18
    bDescriptorType 1
    bcdUSB 2.00
    bDeviceClass 0 (Defined at Interface level)
    bDeviceSubClass 0
    bDeviceProtocol 0
    bMaxPacketSize0 64
    idVendor 0x126f TwinMOS
    idProduct 0x1325 Mobile Disk
    bcdDevice 1.00
    iManufacturer 16 TTI-WDE
    iProduct 32 USB 2.0 Mobile Disk
    iSerial 48 FF04120300020
    .
    [Rest gekürzt]
    .
    Und siehe da, interessant ist in erster Linie die Variable iSerial. Sollte die nicht gesetzt sein, helfen uns auch iManufacturer und iProduct weiter.
    Sollte der Befehl "lsusb" fehlen, lässt er sich mit "apt-get install usbutils" nachinstallieren.


    2.2. Die udev-Regel
    Damit können wir jetzt eine udev-Regel zusammenbauen. Diese Regeln liegen in /etc/udev/rules.d/*.rules und werden in alphabetischer Reihenfolge abgearbeitet. Damit unsere Regel möglichst früh ausgeführt wird, sollte daher die Datei, die unsere Regeln enthält am besten mit "a" anfangen
    Diese Regeln folgen immer dem Aufbau
    Schlüssel=Wert[, Schlüssel=Wert, ...] Devicename [, Link zu dem Device]
    ein Beispiel:
    BUS="usb", KERNEL="sd?1",SYSFS{serial}="23DE7394D4E2CD0A" , NAME="%k", SYMLINK="player"
    Das Gerät hängt also am USB-Bus, findet sich normalerweise unter /dev/sdX1 und bekommt einen Symlink nach /dev/player. Jedes der Schlüssel/Wert-Paare muss passen, damit die Regel auch angewandt wird.

    Die Datei "/etc/udev/rules.d/atwinmos.rules" erstellen wir also mit folgenden Inhalt:
    BUS="usb", KERNEL="sd?1",SYSFS{serial}="FF04120300020" , NAME="twinmos"
    Somit sollte beim Einstöpseln der Stick unter /dev/twinmos auftauchen.
    Wir erkennen iSerial wieder, die in diesem Fall das Gerät eindeutig identifiziert. Als Alternative könnten wir auch idVendor oder idProduct verwenden (-> SYSFS{idVendor}="126f"). Man kann auch weitere USB-Sticks oder Geräte in diese Datei packen, für jedes Gerät eine eigene Datei anzulegen ist unnötig (und unsinnig, weil jedesmal alle Dateien durchsucht werden...)
    Nachdem die Datei erstellt ist, testen wir das Ganze. "/var/log/syslog" sollte nach dem Einstecken des Sticks in etwa so aussehen:
    Mar 30 22:39:19 localhost udev[12869]: creating device node '/dev/sda'
    Mar 30 22:39:19 localhost udev[12870]: configured rule in '/etc/udev/rules.d/atwinmos.rules[1]' applied, 'sda1' becomes 'twinmos'
    Mar 30 22:39:19 localhost udev[12870]: creating device node '/dev/twinmos'
    Mar 30 22:39:19 localhost udev[12872]: creating device node '/dev/sg0'
    Jetzt basteln wir uns noch einen passenden Mountpunkt dazu, und damit ist der erste Teil erledigt: "mkdir /mnt/twinmos"
    "Da steht sowas ähnliches wie" oder "das funzt net!!" ist keine Fehlermeldung!

  5. #5
    Flachinformatiker Avatar von MiGo
    Registriert seit
    Oct 2002
    Ort
    Heidelberg
    Beiträge
    5.270

    3 Das Script

    udev kann - wie hotplug - ein oder mehrere Scripte beim Einstecken des Gerätes ausführen. Diese liegen in /etc/dev.d und folgen der Namensregel "/etc/dev.d/$(DEVNAME)/*.dev". Wie bei udev üblich werden die Scripte im Verzeichnis - sofern sie den Namensregeln folgen - in alphabetischer Reihenfolge ausgeführt.
    Weitere Möglichkeiten, Scripte unterzubringen sind /etc/dev.d/$(SUBSYSTEM)/*.dev (z.B. "net") und /etc/dev.d/default/*.dev.

    Unser Device heisst "twinmos", also legen wir das Verzeichnis /etc/dev.d/twinmos an und erstellen darin unser Script "twinmos.dev" (hm, wer hätte diesen Namen vermutet..).

    3.1 Mount-Script erstellen
    Dem Script stehet u.A. die Variable $ACTION zur Verfügung; sie nimmt den Wert "add" oder "remove" an, je nachdem, ob das Gerät gerade angesteckt ("add")oder entfernt worden ("remove") ist.
    Damit bietet sich folgendes Script an:

    Code:
    #!/bin/sh
    if [ $ACTION = "add" ];
       then
       # usb-stick einhängen
       mount /dev/twinmos /mnt/twinmos
    
       # Datei mit Passwort verwenden, um die verschlüsselte Partition zu entschlüsseln
       cat /mnt/twinmos/twinpass|cryptsetup create twincrypt /dev/hdb2
    
       # und einhängen.
       mount /dev/mapper/twincrypt /mnt/crypt
    
       #und den stick wieder entsorgen
       umount /mnt/twinmos --force
     
    fi;
    
    
    if [ $ACTION = "remove" ];
    then
    
      #*
    
      # Partition aushängen
      umount /mnt/crypt --force
    
      # und das dm-crypt-Gerät entfernen
      cryptsetup remove twincrypt
    
    fi;
    * Eventuell bietet sich auch noch folgender Zusatz an:
    Code:
    #erst zart
    for i in `lsof /mnt/crypt |grep -v PID |awk '{print  $2 }'`; do kill $i; done;
    sleep 1;
    
    #dann hart.
    for i in `lsof /mnt/crypt|grep -v PID |awk '{print  $2 }'`; do kill -9 $i; done;
    Das sollte (vermutlich) brachial jeden Prozess töten, der das Aushängen von /mnt/crypt eventuell behindert. Ist allerdings ungetestet.


    Und damit endet diese Anleitung. Das war zwar viel Arbeit, aber wenn auch nur ein User "des anderen BS" beim Vorführen dieser Faulen-Verschlüsselung sagt: "Das ist ja toll! Und wie mache ich das?" hat sich die Arbeit gelohnt.
    Bei Lob, Kritik oder Ergänzungen bitte PM an mich. Auch wenn einer weiss, _wie_ man das unter Windows macht. Ich weiss es nämlich nicht
    "Da steht sowas ähnliches wie" oder "das funzt net!!" ist keine Fehlermeldung!

  6. #6
    Veteran Avatar von BSM
    Registriert seit
    Dec 2001
    Beiträge
    2.182
    Habe gerade mal versucht das ganze auf Ubuntu Feisty zu übertragen und bin mal spontan gescheitert

    Meine Probleme:
    • Liegt wohl an einer anderen (neuren?) udev Version, hier steht wie man udev unter Feisty konfiguriert: http://ubuntuforums.org/showthread.php?t=398073

      In der udev .rules Datei muss sowas drinstehen:
      Code:
      SUBSYSTEMS=="usb", ATTRS{serial}=="DEF10CC005D7", KERNEL=="sd?1", NAME="firelite", SYMLINK="usbdevices/firelite"
    • Das zweite Problem war bei mir das aushängen der Partition. So sieht bei mir jetzt die .rules Datei aus:
      Code:
      root@robert:/etc/udev/rules.d# cat 21-afujitsustick_mountcrypt.rules 
      ACTION=="add",SUBSYSTEMS=="usb", ATTRS{serial}=="2848604190992E48", KERNEL=="sd?2", NAME="cryptstick", RUN+="/home/rob/bin/openmp3",ENV{cryptstick}="%p"
      ACTION=="remove", ATTRS{serial}=="2848604190992E48", RUN+="/home/rob/bin/closemp3"
    • Weiterhin würde ich NIEMALS einfach das Passwort auf den USB Stick legen und dort versauern lassen. Wenn jemand den USB Stick klaut, lacht man dich im besten Fall noch aus weil dein Passwort so niedlich ist.
      Am besten erstellt man ein 128 oder auch 2048Bittiges garantiert zufälliges Passwort, welches man zusätzlich mit GPG verschlüsselt. Beim anstecken des Sticks kommt nun eine Passwortabfrage, welche das Passwort entschlüsselt und die Partition einhängt.
      Z.Zt. arbeite ich daran, wie man dieese Passwortabfrage am besten hinbekommt (mit einem zweiten Stick ).

    -robert
    Geändert von BSM (12.05.07 um 17:05 Uhr)
    Laptop:Lenovo T480|Core i5|GeForce MX150|Archlinux

Ähnliche Themen

  1. SuSE 9.2, Kernel 2.6.11, udev & acpi ^^
    Von Korn im Forum Kompilieren von Kernel und Sourcen
    Antworten: 3
    Letzter Beitrag: 23.03.05, 11:37
  2. udev und die fehlenden node's (parport / lp)
    Von root_tux_linux im Forum System installieren und konfigurieren
    Antworten: 2
    Letzter Beitrag: 30.12.04, 02:12
  3. Fedora 3 Udev bei USB Stick
    Von whistle im Forum stationäre Hardware
    Antworten: 1
    Letzter Beitrag: 26.12.04, 16:27
  4. Drucker funktioniert nicht mehr nach umstieg auf udev!
    Von root_tux_linux im Forum System installieren und konfigurieren
    Antworten: 2
    Letzter Beitrag: 25.12.04, 19:39
  5. udev und sda(1)
    Von Flamesword im Forum System installieren und konfigurieren
    Antworten: 2
    Letzter Beitrag: 23.07.04, 10:16

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •