<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title><![CDATA[LUG-Balista Hamburg e.V.]]></title>
    <link>http://debian.lug-balista.de/index.php</link>
    <description><![CDATA[]]></description>
    <pubDate>Fri, 18 May 2012 10:18:44 +0000</pubDate>
    <generator>http://www.knowledgeroot.org</generator>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <item>
      <title><![CDATA[Wie erstelle ich ein Software Raid]]></title>
      <link>http://debian.lug-balista.de/index.php?contentid=2419#2419</link>
      <description><![CDATA[<p>Hier eine kleine Anleitung wie man ein Software Raid unter Linux erstellt.</p>
<p> Zuerst einmal sollte man sich überlegt haben welche Art Raid man benötigt.</p>
<p>Ich bevorzuge für die Systemplatte ein Raid 1 (Spiegelung)</p>
<p>Für Datenplatten nutze ich ein Raid 5 aus mindestens 3 Festplatten oder Partitionen.</p>
<p><strong>mdadm - -create - -level=1 /dev/md0 /dev/sda2 /dev/sdb2 </strong></p>
<p>Mit diesem Befehl erzeugt man ein Raid 1 mit 2 Partitionen</p>
<p>mit dem Befehl: <strong>mkfs.ext3 /dev/md0 </strong>erzeugt man ein dateisystem auf dem frisch generierten Raid 1</p>
<p><strong>mount /dev/md0 /raid</strong><strong>1</strong></p>
<p> Mit diesem Befehl hängt man die Raid-Partition auf dem Mountpunkt /raid1 ein</p>
<p>Damit kann man das Raid benutzen.</p>
<p>Für ein Raid 5 funktioniert das genau so, nur das man 3 Platten angibt.</p>
<p><strong>mdadm - -create - -level=5 /dev/md1 /dev/sdc1 /dev/sdd1 /dev/sde1</strong></p>
<p>Hiermit wird ein Raid 5 Verbund aus 3 Festplatten (Patitionen) erzeugt.</p>
<p>danach wie oben beschrieben das Filesystem erzeugen und danach zur Nutzung in das System einhängen.</p>
<p> </p>
<p>Viel Spass</p>
<p> </p>
<p> </p>]]></description>
      <pubDate>Fri, 18 May 2012 10:18:44 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Beschreibungen und Programme zur Nutzung]]></title>
      <link>http://debian.lug-balista.de/index.php?contentid=1946#1946</link>
      <description><![CDATA[<p>Scripte und Einstellungen bei Verwendung von Smartcards verschiedener Art<br /><br />
Verwendete Smartcards:<br />
    1. OpenPGP-Card<br />
    2. Feitian PKI<br /><br />
Anwendungen:<br />
    1. gpg - Signieren, Ver-/entschlüsseln von EMails (RSA-gnupg-keys)<br />
    2. gpgsm - Signieren, Ver-/entschlüsseln von EMails (RSA-Keys mit X.509 Zertifikat einer CA)<br />
    3. Frontends für EMails: Claws-Mail, Thunderbird, Kmail...<br />
    4. Clientauthentifizierung auf Webseiten mit Firefox<br />
    5. ssh - Authentifizierung mit Key<br />
    6. openvpn - Authentifizierung mit X.509 Zertifikat<br />
    7. pam module - Authentifizierung allgemein: Login, Screensaver usw. statt User/Passwort<br /><br />
Die OpenPGP-Card ist spezialisiert auf die Speicherung von GPG-Keys. Sie kommt vorformatiert und mit werksseitig vorgegebener PIN und Super-PIN (PUK), die zwar verändert werden können, jedoch macht die 3-malige falsche Eingabe der PUK die Karte unbrauchbar, sie kann mit den bisherigen Werkzeugen nicht wiederbelebt werden. Momentan sind bis zu 3 RSA Schlüssel der Länge 3072 speicherbar. Die Vorgehensweise ist auf den verlinkten Seiten beschrieben (Datei -&gt;links-zu-smartcards).<br /><br />
Die Feitian PKI Card ist dagegen eine Karte mit einem pkcs15-konformem Dateisystem und kann RSA-Schlüssel und Zertifikate nach pkcs11 Standard speichern (und anderes, aber keine gnupg-Schlüssel!), RSA Schlüssel können die Bitlänge 1024 oder 2048 haben. Sie kommt herstellerseitig als leere Karte und kann mit Linux Werkzeugen gut bearbeitet werden (opensc-tool, pkcs15-tool, pkcs15-init, pkcs15-crypt, pkcs11...). Es lassen sich aus Sicherheitsgründen zwar keine einzelnen Schlüssel, Zertifikate oder Daten einfach von der Karte löschen, aber es ist die vollständige Löschung der Karte und ein Neubeschreiben möglich, was auch die weitere Nutzung der Karte an sich bei Sperrung der Karte durch die PUK erlaubt.<br /><br />
Jede Kartenfamilie ist für sich allein gut nutzbar und erlaubt auch die Nutzung mehrerer Anwendungen, jedoch erweist sich die gleichzeitige oder abwechselnde Nutzung beider Arten als sehr problematisch, wenn man nach den Vorgaben der Anleitungen im Netz vorgeht.<br />
Die OpenPGP-Karte blockiert bei laufendem gpg-agent durch den gestarteten scdaemon die Nutzung von pkcs11-kompatiblen Karten, damit ist dann z.B. die Authentifizierung durch ein auf der PKI Karte vorhandenes Clientzertifikat auf einer Webseite nicht mehr möglich, ohne die störenden Dienste zu beenden.<br />
Umgekehrt ist auch die Verwaltung von PKI Smartcards in mozillabasierten Programmen (Firefox, Thunderbird) leider mit einer Blockade der OpenPGP-Karte verbunden, der für die Karte zuständige PKI-Provider muss zunächst entfernt und die Anwendung beendet werden, eine bloße Deaktivierung genügt leider nicht.<br />
Es wäre natürlich schön, wenn sich die zuständigen Programmierer da mal soweit annähern könnten, dass wenigstens ein problemloses Nebeneinander möglich wäre. Es ist utopisch, darauf zu hoffen, dass beide Systeme mal vollständig auf einer Karte realisiert werden könnten. Es gibt zwar Ansätze, Teile des jeweils anderen Schlüsselsystems funktionsfähig zu machen (beide basieren auf RSA-Schlüsseln), jedoch liegen Welten zwischen den Anschauungen und Absichten der Programmierer.<br /><br />
Welches System soll man denn nun bevorzugen? Keines!<br />
Das hängt ganz davon ab...<br />
...was man durch den Einsatz von Smartcards erreichen möchte.<br /><br />
Mein Ziel ist es, die Vorzüge beider Systeme nutzen zu können, und das mit so wenig Einschränkungen wie möglich. Im folgenden gibt es daher Hinweise auf die Konfiguration und einige Scripte, die entsprechende Arbeitserleichtungen bieten.<br /><br />
Für die Signierung und Ver-/Entschlüsselung von EMails:<br />
Damit die Systeme zusammenarbeiten können, sind Anpassungen in den Konfigurationsdateien nötig.<br />
    ...in der ~/.gnupg/gpg.conf     -&gt; no-use-agent<br />
                    -&gt; default-key 0xXXXXXX<br />
                    -&gt; reader-port &quot;XXXXXXX&quot; # wenn mehrere Kartenleser gleichzeitig mit verschiedenen Karten genutzt werden, nimmt gpg sonst immer den ersten Leser! Der Name wird mit 'opensc-tool -l' ermittelt (Namen vollständig mit allen Zeichen eintragen)<br /><br />
    ...in der ~/.gnupg/gpgsm.conf    -&gt; auto-issuer-key-retrieve<br />
                    -&gt; default-key 0xXXXXXX<br />
                    -&gt; include-certs -1<br />
                    -&gt; ignore-cert-extension 1.3.6.1.4.1.18506 # spezifische Anpassung für CAcert.org class3 cert (wird sonst nicht als gültig erkannt)<br /><br />
es sind noch weitere Konfigurationen nötig, die ich jedoch erst nachliefern werde, auf meinen Rechnern sind evtl. unnötige Einstellungen gespeichert, da muss ich erst schauen, was wirklich benötigt wird. Bei Fehlermeldungen einfach mal man-pages lesen oder nachfragen.<br /><br />
Authentifizierung mittels pam modul:<br />
Es gibt sowohl für die OpenPGP-Card mit libpam-poldi, als auch für die pkcs11-basierten Karten mit libpam-p11 bzw. libpam-pkcs11 Pakete, die für die Authentifizierung/Anmeldung unter Linux genutzt werden können, statt User/Passwort wird die PIN der Karte abgefragt. Die jeweilige Konfiguration ist in der Dokumentation beschrieben. Bei libpam-p11 ist die Authorisierung in der Datei ~/.eid/authorized_certificates zu hinterlegen (jeweils das home-Verzeichnis des anzumeldenen Nutzers). Das geht sehr einfach mit pkcs15-tool --read-certificate &lt;arg&gt; &gt;&gt; ~/.eid/authorized_certificates (&lt;arg&gt; wird ermittelt durch pkcs15-tool -c, das gesuchte Argument ist die ID des passenden Zertifikats). Zu lipam-poldi: Die Anleitung ist veraltet, aufgeführte Befehle existieren nicht mehr, aber das Aussehen der Konfigurationsdateien muss der Anleitung entsprechen.<br />
Damit nicht jede Datei in /etc/pam.d angepasst werden muss, habe ich die Smartcard Authentifikation in die common-auth eingetragen (vor allen anderen Einträgen):<br />
    -&gt; auth        sufficient    pam_p11_opensc.so    /usr/lib/opensc-pkcs11.so  #PKI pkcs11<br />
    -&gt; auth        sufficient    pam-poldi.so   #OpenPGP<br /><br />
Anmelden mit ssh an entfernten Rechnern:<br />
Zur schlüsselbasierten Anmeldung per ssh muss (eigentlich) nur der jeweilige öffentliche Schlüssel der verwendeten Chipkarte in die Datei authorized-keys auf dem Zielserver eingetragen werden. Das Auslesen des öffentlichen Schlüssels ist von der Art der Karte abhängig. Bei der OpenPGP-Karte muss vorübergehend der gpg-agent eingeschaltet werden, damit der scdaemon läuft und das Kommando 'ssh-add -L' funktioniert und den Schlüssel ausgibt. Bei der PKI Karte genügt ein 'pkcs15-tool --read-ssh-key &lt;arg&gt;', wobei &lt;arg&gt; ermittelt wird durch den Befehl 'pkcs15-tool -c', die ausgegebene ID des Schlüssels/Zertifikats ist das gesuchte Argument. Der gewünschte Schlüssel beginnt mit ssh-rsa.<br /><br />
OpenVPN Authentifizierung mit Smartcard:<br />
Da OpenVPN auf Zertifikatsbasis arbeitet, ist z.Zt. der Einsatz der OpenPGP-Card nicht möglich. Es soll da wohl schon dran programmiert werden, aber es gibt noch keine Lösung, die bei mir funktioniert hat. So bleibt der Einsatz der Feitian PKI Karte, die umso problemloser funktioniert. OpenVPN bringt in den neueren Versionen (ab 2.XX) die Unterstützung für Smartcards bereits mit. Es existieren entsprechende Befehle, die auch in der manpage dokumentiert sind. Das Prinzip des OpenVPN-Tunnels ist die vorherige Authentifizierung der beteiligten Partner (Rechner/Router/Switch), dabei wird jeweils das Zertifikat der Gegenseite übermittelt und gegen die Zertifizierungsstelle (root-Zertifikat) geprüft, die passenden privaten Schlüssel sind auf der eigenen Seite aktiv. Es wird bei den OpenVPN Beschreibungen keinerlei Vorgabe gemacht, woher die entsprechenden Schlüssel und Zertifikate kommen, es können Eigenzertifikate sein, die mit der in OpenVPN integrierten easy-ca erstellt worden sind, aber auch andere sind möglich.<br />
Ich beschreibe hier die Nutzung von Zertifikaten von cacert.org, die problemlos genutzt werden können und auch die gewünschte Sicherheit bieten, wenn bestimmte Konfigurationen vorgenommen werden. Da wir class3-Zertifikate benutzen wollen, ist etwas Vorarbeit nötig, um die entsprechenden root-Zertifikate von CAcert auf den beteiligten Rechnern zu installieren. Zur Validierung/Verifizierung von class3-Zertifikaten ist eine 'root-chain' nötig. Es müssen die root- und root-class3-Zertifikate in ein Paket gepackt werden. Es sind die Zertifikate von CAcert von deren homepage runterzuladen (pem-Version) und dann in eine Datei zu packen: z.B. cat class3-root.pem root.pem &gt; cacert.pem . Diese Datei muss dann sowohl auf dem Server als auch auf jedem Client vorhanden sein.<br />
Die Serverseite (Datei -&gt; server.conf) unterscheidet nicht zwischen Clients mit/ohne Smartcard, es muss nur ein gültiges Zertifikat vorgezeigt werden, dass von der hinterlegten Zertifizierungsstelle beglaubigt wurde. Da wir CAcert-Zertifikate nutzen wollen, ist damit zwangsläufig eine weitere Verifizierungsstufe verbunden, da sonst alle! gültigen CAcert-Zertifikate akzeptiert würden. Um den Kreis der berechtigten Nutzer einzuschränken, nutzen wir das dafür vorgesehene script verify, welches serverseitig mit der option 'tls-verify /xxx/xxx/verify (-&gt;Datei verify) benutzt wird. Dort wird eine genauere Prüfung des vorgezeigten Zertifikats vorgenommen. Meine Tests zeigten, dass verlässlich die ID, daraus abgeleitet der allgemeine Name (CN =Common Name), und die Seriennummer ausgelesen werden können, die übrigen Variablen, die in der manpage zu OpenVPN beschrieben werden, waren bei mir nicht funktionsfähig. Es ist aber sicherheitstechnisch ausreichend, auf den Namen und die Seriennummer zu prüfen, da es sehr unwahrscheinlich ist, dass es hier zu Duplikaten kommt. Das Script gibt einen Rückgabewert von '0' aus, wenn die Verbindung erlaubt werden soll und '1' bei Verweigerung, geprüft wird gegen eine Datei, die die erlaubten Namen und Seriennummern enthält. Bitte beachten, die Seriennummern werden als Dezimalzahlen ausgegeben, während die Darstellungen in den Zertifikaten und Keys hexadezimal sind. Damit ist auch die Prüfung gegen CRL-Listen (widerrufene Zertifikate) hinfällig, da unsere Datei der erlaubten Nutzer besser anzupassen ist.<br />
Die Konfiguration der Clients ist natürlich von der Nutzung einer Smartcard abhängig (Datei -&gt; beispielconf-openvpnclient.conf), so ist jeweils nur eine gültige Konfiguration möglich und damit auch nur jeweils eine bestimmte Karte nutzbar. Im Anhang werde ich die jeweiligen Konfigurationen vorstellen.<br />
Zuletzt ist noch eine Hürde zu meistern: Alle mir bekannten Frontends zu OpenVPN fragen beim Start des Tunnels nicht nach der PIN der Smartcard, somit würde der Aufbau scheitern, wenn es nicht inzwischen die management-console in OpenVPN gäbe. Das bedeutet jedoch zusätzlichen Aufwand, denn es muss ein zusätzliches Programm diese Konsole (telnet-Prozess) bedienen. Es gibt dazu verschiedene Ansätze, im Internet habe ich dazu ein Programm, geschrieben in Perl (Datei -&gt; smartvpn.pl (gestartet mit startsmart)), gefunden. Was macht nun derjenige, der kein Perl auf seinem Rechner hat oder es nicht zusätzlich installieren will? Ich habe dazu ein reines bash-script geschrieben, das regelmäßig einen telnet-Prozess aufruft, um die Managementkonsole abzufragen (Datei -&gt; ovpnstart). Wer nicht ständig neue Prozesse erzeugen möchte, kann auch auf mein anderes, erweitertes bash-script zurückgreifen, das die Erweiterungen 'expect' und 'tcl' benötigt, dabei ist meist nur expect neu zu installieren, da tcl in vielen Grundkonfigurationen bereits enthalten ist (Dateien -&gt; abfrage, vpns, vpnstart, vpnstop). Die vorgestellte Kombination startet und stoppt auch gleich die zuggehörigen openvpn-Prozesse.</p>
<p>Die weiteren Anwendungsmöglichkeiten sind das automatische Sperren des Bildschirms beim entfernen der Smartcard (Datei -&gt; sc-screensaver-ctrl), sowie der Einsatz der Smartcard für teilweise oder vollständige Verschlüsselung von Partitionen. Hier ist noch etwas experimentieren angesagt, da es kaum brauchbare Anleitungen dafür gibt und die verwendeten Scripte (Debian) für root-fs Verschlüsselung fehlerhaft sind. Die Erfahrungen werden wir bei Gelegenheit nachreichen.</p>
<p>Update: Erfahrungsbericht mit PinPad-Readern</p>
<p>Smartcards unter Linux - die unendliche Geschichte<br /><br />
Langsam aber sicher geht es vorwärts mit den Möglichkeiten, Smartcards auch unter Linux einzusetzen. Dabei genügt es nicht, dass die wichtigsten Anwendungen diese unterstützen, auch die richtige Kombination aus Karte und Kartenleser ist zu beachten. In dem begrenzten Markt von Smartcard-Herstellern und den dabei verwendeten Chips und Kartenbetriebssystemen sind die passenden Linux-Module meist erst mit einiger Verzögerung vorhanden und das auch nur bei genügender Verbreitung der Karten und der Offenlegung der Spezifikationen.<br />
 Das zentrale Linux Projekt 'Opensc' listet daher viele Karten als unterstützt auf, die schon nicht mehr erhältlich oder nur noch vereinzelt zu kaufen sind. Die einzige mir im Moment bekannte Karte, die noch laufend produziert wird und vollständig mit Linux administrierbar ist, ist die Feitian-PKI-Card. Die ebenfalls noch produzierten Siemens Karten mit CardOs lassen sich nur dann mit Linux bearbeiten, wenn sie unter einem anderen Betriebssystem zunächst umprogammiert werden, der dazu nötige Kartenbefehl wird von Siemens geheimgehalten und kann daher nicht in offene Linux-Programme integriert werden.<br />
 Neben den Karten sind auch die Lesegeräte sorgfältig auszuwählen. Zur Zeit sind gerade mit der Feitian Karte nicht alle Leser kompatibel, obwohl sie als 'von Linux unterstützt' aufgelistet werden. Es ist mit eigenen Versuchen der passende herauszufinden. Bei mir laufen folgende Leser mit der Karte: SCM SCR 35xx (kein PinPad), SCM SCR 532 (Kl.2 PinPad), Gemalto PC Pinpad (Kl.2 PinPad und Display). Jeder Leser kann mit der Feitian Karte arbeiten, d.h. Löschen, Beschreiben und Lesen, PIN verifizieren und ändern. Es hat etliche Tests gegeben, die überraschende Ergebnisse brachten und auf noch vorhandene Fehler in der Treibersoftware hindeuten. Da ich zunächst nur den Leser ohne PinPad benutzte, sind meine bis dahin benutzten Karten damit initialisiert worden, die später hinzugekommenen PinPad Leser konnten die PINs derartig beschriebener Karten jedoch nicht mit ihrem eigenen PinPad verifizieren, so dass ich zunächst annahm, dass diese Leser für die Karte ungeeignet wären. Nach Deaktivierung der PinPads waren die Karten jedoch ansprechbar und weitere Tests folgten. Das wahrscheinlich ein Bug im Treiber die eigentliche Ursache sein könnte, fand ich zufällig, als ich eine Testkarte statt mit einer 7-stelligen PIN nur mit einer 4-stelligen PIN benutzte. Diese funktionierte auf allen Lesern einwandfrei und ließ mich verschiedene PIN-Längen mit allen Lesern testen.<br />
 Bis die Treibersoftware einwandfrei funktioniert, gibt es einen Workaround von mir, der wirklich zufällig gefunden wurde: Die Feitian PKI Card lässt PINs mit Zahlen mit mindestens 4 und maximal 16 Stellen zu, dabei ist die PUK (zum entsperren und neu setzen der PIN) grundsätzlich nur über den Rechner einzugeben und damit keiner weiteren Einschränkung unterworfen. Die PIN sollte 4-, 6-, maximal 8-stellig sein, da der Gemalto Leser keine längeren PINs verarbeitet (Einschränkung in der Firmware des Lesers), wenn man diesen Leser mit PinPad benutzen will. Karten, deren PIN mit den PinPad Lesern auf eine ungerade PIN-Länge gesetzt und/oder modifiziert wurden, lassen sich ohne Neusetzen der PIN nicht mehr mit dem einfachen Leser ohne Pad benutzen (und umgekehrt).<br />
 <br />
 weiteres update: Openvpn</p>
<p>für die Nutzung von PinPad-Readern muss nur eine Zeile in die conf-Datei eingefügt werden (nach pkcs11-provider): pkcs11-protected-authentication 1 /usr/lib/onepin-opensc-pkcs11.so</p>
<p>dann wird automatisch das PinPad zur Eingabe benutzt, wenn es in der opensc.conf aktiviert ist.</p>
<p>Bei der OpenPGP-Karte ist das Pinpad leider noch nicht nutzbar.  </p>
<p> </p>
<p>Bitte sämtliche Fragen an mail@lug-balista stellen, bitte keine html-Mails (Spamfilter aktiv).</p>
<p>(rw)</p>]]></description>
      <pubDate>Fri, 18 May 2012 10:18:44 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[content]]></title>
      <link>http://debian.lug-balista.de/index.php?contentid=55#55</link>
      <description><![CDATA[<h3>Wie können/sollen Dateien und Ordner verschlüsselt werden?</h3>
<p>Eine der einfachen Möglichkeiten wird über das 'encfs' Filesystem (im Userspace) realisiert. Damit werden Ordner erstellt, die die verschlüsselten Daten enthalten und softwaremäßig auf einen anderen Ordner abgebildet werden, der die Dateien im Klartext enthält (temporär, solange gemountet!). Der Vorteil liegt darin, dass der Ursprungsordner mit den verschlüsselten Dateien zusätzlich auch nichtverschlüsselte Dateien enthalten kann. So kann zwischen wichtigen Dateien (verschlüsselt) und anderen unterschieden werden , ohne verschiedene Ordner (Datenträger) verwenden zu müssen.</p>
<hr /><p>Die vollständigen Kommandos (Konsolenbedienung!) und Erläuterungen können in den Hilfeseiten (manpages (<strong><kbd>man encfs/encfsctl</kbd></strong>)) nachgeschlagen werden.</p>
<p>Die einzigen Einschränkungen, die ich bei der Anwendung feststellte, sind, dass der entgültige, errechnete Schlüssel eine Textdatei sein muss, die mittendrin keine Zeilenvorschübe (ASCII 10) enthält und maximal 2 kB groß sein darf (bei Anwendung des Parameters -S), bei Nutzung der Option --extpass=... gibt es m.W. keine Beschränkungen.</p>
<hr /><p>Um nicht jedesmal auf die Konsole gehen zu müssen, habe ich für Medien wie USB-Sticks, USB-Festplatten und SD-Cards passende Scripte entwickelt, die sogar nach erstmaliger Einrichtung des Datenträgers auf der Kommandozeile dann einen vollautomatischen Betrieb ohne Passworteingabe ermöglichen.</p>
<p>Nötig ist dazu die richtige Kombination von Dateien auf dem entfernbaren Datenträger und den dazu passenden Scripten und Dateien auf dem Rechner, der den verschlüsselten Datenträger automatisch mounten soll. Damit wird auch die Frage nach der Sicherheit der verschlüsselten Daten beantwortet. Solange nicht beide Komponenten zusammen in unbefugte Hände gelangen, ist der Zugriff auf die Daten praktisch nicht möglich. Es wird zwar der Key zur Entschlüsselung mit auf dem Datenträger gespeichert, er ist jedoch nicht von den übrigen verschlüsselten Daten zu unterscheiden, und es fehlen natürlich auch die Angaben, wie dieser Key überhaupt zur Entschlüsselung eingesetzt werden kann (z.B. durch Anwendung von Umwandlungsprozessen und Rechenvorschriften).</p>
<p>Das hier vorgestellte Verfahren eignet sich auch für Datenträger, die bereits Daten enthalten, da nach meinen Erfahrungen  wohl niemand bereits solche kryptischen Dateinamen, wie sie hier verwendet werden, auf seinem Datenträger hat. Trotzdem erfolgt die Anwendung meiner Scripte auf eigene Gefahr, jegliche Haftung ist ausgeschlossen.</p>
<hr /><p><strong>Vorbereitungen:</strong></p>
<p>Es wird eine root-Konsole benötigt, die während der Ersteinrichtung geöffnet bleibt.</p>
<p>Zunächst muss der vorgesehene Datenträger immer eindeutig durch das Betriebssystem erkannt werden können und auch immmer an einer eindeutigen Stelle gemountet werden.<br />
Den besten Mechanismus bieten inzwischen die udev-Regeln, da sie unabhängig von der gewählten Desktopoberfläche funktionieren.</p>
<p>Beim Anschließen des Datenträgers zeigt die Beobachtung der syslog-Datei</p>
<p><kbd><strong>tail -f /var/log/syslog</strong></kbd></p>
<p>(Anzeige beenden mit Strg(Ctrl)+C), welche Gerätedatei (/dev/xxx) neu dafür angelegt wird.</p>
<p>Die Ausgabe des Befehls</p>
<p><kbd><strong>udevadm info --attribute-walk --name=/dev/xxx</strong></kbd></p>
<p>gibt Informationen aus, die für die Erstellung einer eigenen udev-Regel benötigt werden. Gesucht sind eindeutige Merkmale, wie Seriennummern und Gerätearten. Aufgepasst, es dürfen nur Attribute (Zuordnungen) aus dem Hauptblock (1.angezeigter Block) und einem! anderen Block gemeinsam in einer Regel verwendet werden, damit die Regel auch ausgewertet wird.</p>
<p><em>Hier mal ein Beispiel:</em></p>
<p>Die syslog-Ausgabe beim Einstecken eines USB-Sticks:</p>
<hr /><p><span style="font-size:x-small;">Mar 26 09:12:16 (Rechnername) kernel: [32495.736077] usb 5-1: new high speed USB device using ehci_hcd and address 3<br />
Mar 26 09:12:16 (Rechnername) kernel: [32495.870110] usb 5-1: configuration #1 chosen from 1 choice<br />
Mar 26 09:12:16 (Rechnername) kernel: [32495.870436] scsi1 : SCSI emulation for USB Mass Storage devices<br />
Mar 26 09:12:16 (Rechnername) kernel: [32495.870776] usb 5-1: New USB device found, idVendor=0930, idProduct=6545<br />
Mar 26 09:12:16 (Rechnername) kernel: [32495.870783] usb 5-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3<br />
Mar 26 09:12:16 (Rechnername) kernel: [32495.870789] usb 5-1: Product: DataTraveler 2.0<br />
Mar 26 09:12:16 (Rechnername) kernel: [32495.870793] usb 5-1: Manufacturer: Kingston<br />
Mar 26 09:12:16 (Rechnername) kernel: [32495.870798] usb 5-1: <span style="background-color:rgb(0,255,0);">SerialNumber: 0014785FE5905B8A0F0A018C</span><br />
Mar 26 09:12:16 (Rechnername) kernel: [32495.870831] usb-storage: device found at 3<br />
Mar 26 09:12:16 (Rechnername) kernel: [32495.870835] usb-storage: waiting for device to settle before scanning<br />
Mar 26 09:12:16 (Rechnername) NetworkManager: &lt;debug&gt; [1238055136.339192] nm_hal_device_added(): New device added (hal udi is '/org/freedesktop/Hal/devices/usb_device_930_6545_0014785FE5905B8A0F0A018C').<br />
Mar 26 09:12:16 (Rechnername) NetworkManager: &lt;debug&gt; [1238055136.442704] nm_hal_device_added(): New device added (hal udi is '/org/freedesktop/Hal/devices/usb_device_930_6545_0014785FE5905B8A0F0A018C_if0').<br />
Mar 26 09:12:16 (Rechnername) NetworkManager: &lt;debug&gt; [1238055136.472103] nm_hal_device_added(): New device added (hal udi is '/org/freedesktop/Hal/devices/usb_device_930_6545_0014785FE5905B8A0F0A018C_usbraw').<br />
Mar 26 09:12:18 (Rechnername) chipcardd[3236]: devicemanager.c: 3373: Changes in hardware list<br />
Mar 26 09:12:21 (Rechnername) kernel: [32500.868257] usb-storage: device scan complete<br />
Mar 26 09:12:21 (Rechnername) kernel: [32500.869072] scsi 1:0:0:0: Direct-Access     Kingston DataTraveler 2.0 PMAP PQ: 0 ANSI: 0 CCS<br />
Mar 26 09:12:21 (Rechnername) NetworkManager: &lt;debug&gt; [1238055141.383785] nm_hal_device_added(): New device added (hal udi is '/org/freedesktop/Hal/devices/usb_device_930_6545_0014785FE5905B8A0F0A018C_if0_scsi_host').<br />
Mar 26 09:12:21 (Rechnername) NetworkManager: &lt;debug&gt; [1238055141.388714] nm_hal_device_added(): New device added (hal udi is '/org/freedesktop/Hal/devices/usb_device_930_6545_0014785FE5905B8A0F0A018C_if0_scsi_host_scsi_device_lun0').<br />
Mar 26 09:12:23 (Rechnername) kernel: [32503.297957] sd 1:0:0:0: [sda] 7936000 512-byte hardware sectors (4063 MB)<br />
Mar 26 09:12:23 (Rechnername) kernel: [32503.298243] sd 1:0:0:0: [sda] Write Protect is off<br />
Mar 26 09:12:23 (Rechnername) kernel: [32503.298243] sd 1:0:0:0: [sda] Mode Sense: 23 00 00 00<br />
Mar 26 09:12:23 (Rechnername) kernel: [32503.298243] sd 1:0:0:0: [sda] Assuming drive cache: write through<br />
Mar 26 09:12:23 (Rechnername) kernel: [32503.302390] sd 1:0:0:0: [sda] 7936000 512-byte hardware sectors (4063 MB)<br />
Mar 26 09:12:23 (Rechnername) kernel: [32503.302979] sd 1:0:0:0: [sda] Write Protect is off<br />
Mar 26 09:12:23 (Rechnername) kernel: [32503.302988] sd 1:0:0:0: [sda] Mode Sense: 23 00 00 00<br />
Mar 26 09:12:23 (Rechnername) kernel: [32503.302993] sd 1:0:0:0: [sda] Assuming drive cache: write through<br />
Mar 26 09:12:23 (Rechnername) kernel: [32503.302999]<span style="background-color:rgb(0,255,0);">  sda: sda1</span><br />
Mar 26 09:12:23 (Rechnername) kernel: [32503.351113] sd 1:0:0:0: [sda] Attached SCSI removable disk<br />
Mar 26 09:12:24 (Rechnername) NetworkManager: &lt;debug&gt; [1238055144.405598] nm_hal_device_added(): New device added (hal udi is '/org/freedesktop/Hal/devices/storage_serial_Kingston_DataTraveler_2_0_0014785FE5905B8A0F0A018C_0_0').<br />
Mar 26 09:12:24 (Rechnername) NetworkManager: &lt;debug&gt; [1238055144.682780] nm_hal_device_added(): New device added (hal udi is '/org/freedesktop/Hal/devices/volume_uuid_CCF2_1D04').<br />
Mar 26 09:12:24 (Rechnername) kernel: [32504.382131] FAT: utf8 is not a recommended IO charset for FAT filesystems, filesystem will be case sensitive!<br />
Mar 26 09:12:24 (Rechnername) hald: mounted /dev/sda1 on behalf of uid 1000</span></p>
<hr /><p>Die Ausgabe von udevinfo:</p>
<p><kbd><strong>(Rechnername)# udevadm info --attribute-walk --name=/dev/sda<br /></strong></kbd></p>
<hr /><p><span style="font-size:x-small;"><kbd>Udevinfo starts with the device specified by the devpath and then<br />
walks up the chain of parent devices. It prints for every device<br />
found, all possible attributes in the udev rules key format.<br />
A rule to match, can be composed by the attributes of the device<br />
and the attributes from one single parent device.</kbd></span></p>
<p><span style="font-size:x-small;">  looking at device '/block/sda':<br />
KERNEL==&quot;sda&quot;<br /><span style="background-color:rgb(0,255,0);">SUBSYSTEM==&quot;block&quot;</span><br />
DRIVER==&quot;&quot;<br />
ATTR{range}==&quot;16&quot;<br />
ATTR{removable}==&quot;1&quot;<br />
ATTR{size}==&quot;7936000&quot;<br />
ATTR{capability}==&quot;13&quot;<br />
ATTR{stat}==&quot;     135     7729     8690     1080        1        0        1      212        0     1088     1292&quot;</span></p>
<p><span style="font-size:x-small;">  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host1/target1:0:0/1:0:0:0':<br />
KERNELS==&quot;1:0:0:0&quot;<br />
SUBSYSTEMS==&quot;scsi&quot;<br />
DRIVERS==&quot;sd&quot;<br />
ATTRS{device_blocked}==&quot;0&quot;<br />
ATTRS{type}==&quot;0&quot;<br />
ATTRS{scsi_level}==&quot;0&quot;<br />
ATTRS{vendor}==&quot;Kingston&quot;<br />
ATTRS{model}==&quot;DataTraveler 2.0&quot;<br />
ATTRS{rev}==&quot;PMAP&quot;<br />
ATTRS{state}==&quot;running&quot;<br />
ATTRS{timeout}==&quot;30&quot;<br />
ATTRS{iocounterbits}==&quot;32&quot;<br />
ATTRS{iorequest_cnt}==&quot;0x10a&quot;<br />
ATTRS{iodone_cnt}==&quot;0x10a&quot;<br />
ATTRS{ioerr_cnt}==&quot;0x2&quot;<br />
ATTRS{modalias}==&quot;scsi:t-0x00&quot;<br />
ATTRS{evt_media_change}==&quot;0&quot;<br />
ATTRS{queue_depth}==&quot;1&quot;<br />
ATTRS{queue_type}==&quot;none&quot;<br />
ATTRS{max_sectors}==&quot;240&quot;</span></p>
<p><span style="font-size:x-small;">  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host1/target1:0:0':<br />
KERNELS==&quot;target1:0:0&quot;<br />
SUBSYSTEMS==&quot;&quot;<br />
DRIVERS==&quot;&quot;</span></p>
<p><span style="font-size:x-small;">  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host1':<br />
KERNELS==&quot;host1&quot;<br />
SUBSYSTEMS==&quot;&quot;<br />
DRIVERS==&quot;&quot;</span></p>
<p><span style="font-size:x-small;">  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0':<br />
KERNELS==&quot;5-1:1.0&quot;<br />
SUBSYSTEMS==&quot;usb&quot;<br />
DRIVERS==&quot;usb-storage&quot;<br />
ATTRS{bInterfaceNumber}==&quot;00&quot;<br />
ATTRS{bAlternateSetting}==&quot; 0&quot;<br />
ATTRS{bNumEndpoints}==&quot;02&quot;<br />
ATTRS{bInterfaceClass}==&quot;08&quot;<br />
ATTRS{bInterfaceSubClass}==&quot;06&quot;<br />
ATTRS{bInterfaceProtocol}==&quot;50&quot;<br />
ATTRS{modalias}==&quot;usb:v0930p6545d0100dc00dsc00dp00ic08isc06ip50&quot;</span></p>
<p><span style="font-size:x-small;">  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb5/5-1':<br />
KERNELS==&quot;5-1&quot;<br /><span style="background-color:rgb(0,255,0);">SUBSYSTEMS==&quot;usb&quot;</span><br />
DRIVERS==&quot;usb&quot;<br />
ATTRS{configuration}==&quot;&quot;<br />
ATTRS{bNumInterfaces}==&quot; 1&quot;<br />
ATTRS{bConfigurationValue}==&quot;1&quot;<br />
ATTRS{bmAttributes}==&quot;80&quot;<br />
ATTRS{bMaxPower}==&quot;200mA&quot;<br />
ATTRS{urbnum}==&quot;988&quot;<br />
ATTRS{idVendor}==&quot;0930&quot;<br />
ATTRS{idProduct}==&quot;6545&quot;<br />
ATTRS{bcdDevice}==&quot;0100&quot;<br />
ATTRS{bDeviceClass}==&quot;00&quot;<br />
ATTRS{bDeviceSubClass}==&quot;00&quot;<br />
ATTRS{bDeviceProtocol}==&quot;00&quot;<br />
ATTRS{bNumConfigurations}==&quot;1&quot;<br />
ATTRS{bMaxPacketSize0}==&quot;64&quot;<br />
ATTRS{speed}==&quot;480&quot;<br />
ATTRS{busnum}==&quot;5&quot;<br />
ATTRS{devnum}==&quot;3&quot;<br />
ATTRS{version}==&quot; 2.00&quot;<br />
ATTRS{maxchild}==&quot;0&quot;<br />
ATTRS{quirks}==&quot;0x0&quot;<br />
ATTRS{authorized}==&quot;1&quot;<br />
ATTRS{manufacturer}==&quot;Kingston&quot;<br />
ATTRS{product}==&quot;DataTraveler 2.0&quot;<br /></span><span style="background-color:rgb(0,255,0);"><span style="font-size:x-small;">ATTRS{serial}==&quot;0014785FE5905B8A0F0A018C&quot;</span></span></p>
<p><span style="font-size:x-small;">  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb5':<br />
KERNELS==&quot;usb5&quot;<br />
SUBSYSTEMS==&quot;usb&quot;<br />
DRIVERS==&quot;usb&quot;<br />
ATTRS{configuration}==&quot;&quot;<br />
ATTRS{bNumInterfaces}==&quot; 1&quot;<br />
ATTRS{bConfigurationValue}==&quot;1&quot;<br />
ATTRS{bmAttributes}==&quot;e0&quot;<br />
ATTRS{bMaxPower}==&quot;  0mA&quot;<br />
ATTRS{urbnum}==&quot;213&quot;<br />
ATTRS{idVendor}==&quot;1d6b&quot;<br />
ATTRS{idProduct}==&quot;0002&quot;<br />
ATTRS{bcdDevice}==&quot;0206&quot;<br />
ATTRS{bDeviceClass}==&quot;09&quot;<br />
ATTRS{bDeviceSubClass}==&quot;00&quot;<br />
ATTRS{bDeviceProtocol}==&quot;00&quot;<br />
ATTRS{bNumConfigurations}==&quot;1&quot;<br />
ATTRS{bMaxPacketSize0}==&quot;64&quot;<br />
ATTRS{speed}==&quot;480&quot;<br />
ATTRS{busnum}==&quot;5&quot;<br />
ATTRS{devnum}==&quot;1&quot;<br />
ATTRS{version}==&quot; 2.00&quot;<br />
ATTRS{maxchild}==&quot;8&quot;<br />
ATTRS{quirks}==&quot;0x0&quot;<br />
ATTRS{authorized}==&quot;1&quot;<br />
ATTRS{manufacturer}==&quot;Linux 2.6.26-1-486 ehci_hcd&quot;<br />
ATTRS{product}==&quot;EHCI Host Controller&quot;<br />
ATTRS{serial}==&quot;0000:00:1d.7&quot;<br />
ATTRS{authorized_default}==&quot;1&quot;</span></p>
<p><span style="font-size:x-small;">  looking at parent device '/devices/pci0000:00/0000:00:1d.7':<br />
KERNELS==&quot;0000:00:1d.7&quot;<br />
SUBSYSTEMS==&quot;pci&quot;<br />
DRIVERS==&quot;ehci_hcd&quot;<br />
ATTRS{vendor}==&quot;0x8086&quot;<br />
ATTRS{device}==&quot;0x265c&quot;<br />
ATTRS{subsystem_vendor}==&quot;0x144d&quot;<br />
ATTRS{subsystem_device}==&quot;0xb035&quot;<br />
ATTRS{class}==&quot;0x0c0320&quot;<br />
ATTRS{irq}==&quot;23&quot;<br />
ATTRS{local_cpus}==&quot;1&quot;<br />
ATTRS{local_cpulist}==&quot;0&quot;<br />
ATTRS{modalias}==&quot;pci:v00008086d0000265Csv0000144Dsd0000B035bc0Csc03i20&quot;<br />
ATTRS{enable}==&quot;1&quot;<br />
ATTRS{broken_parity_status}==&quot;0&quot;<br />
ATTRS{msi_bus}==&quot;&quot;</span></p>
<p><span style="font-size:x-small;">  looking at parent device '/devices/pci0000:00':<br />
KERNELS==&quot;pci0000:00&quot;<br />
SUBSYSTEMS==&quot;&quot;<br />
DRIVERS==&quot;&quot;</span></p>
<hr /><p>Die daraus erstellte udev-Regel: (als '<strong>89-eigene-regeln.rules</strong>' in <strong>/etc/udev/rules.d/</strong> eingefügt)</p>
<hr /><p><span style="font-size:small;">ACTION!=&quot;add|change&quot;,			GOTO=&quot;eigene_regeln_end&quot;</span></p>
<p><span style="font-size:small;">...<br />
...<br />
SUBSYSTEM==&quot;block&quot;, SUBSYSTEMS==&quot;usb&quot;, ATTRS{serial}==&quot;0014785FE5905B8A0F0A018C&quot;, NAME+=&quot;stick1&quot;<br />
SUBSYSTEM==&quot;block&quot;, SUBSYSTEMS==&quot;usb&quot;, ATTRS{serial}==&quot;0014785FE5905B8A0F0A018C&quot;, RUN+=&quot;/usr/local/sbin/automount 5 nutzer 1 (dateisystem)&quot;<br />
...<br />
...</span></p>
<p><span style="font-size:small;">LABEL=&quot;eigene_regeln_end&quot;</span></p>
<hr /><p>Jede Regel steht in einer einzigen Zeile ohne Umbruch!</p>
<p>Zuerst wird dem Stick ein eindeutiger Gerätename zugeordnet, dann erfolgt ein Aufruf eines selbst zu erstellenden Scripts mit den benötigten Funktionen. Damit mehrere Geräte gleichzeitig , auch mit verschiedenen Passwortdateien, zu betreiben sind, wird es mit mindestens drei Parametern aufgerufen ( Nr.= lfd.Nr.Passwortdatei, nutzer= euer Nutzername, dann eine eindeutige Nummer und evtl. noch das Dateisystem ( z.B. ext2)). Die letzte Angabe wird benötigt, falls es eine Falscherkennung durch den Mountbefehl pmount gibt. Das Script läuft im Hintergrund, daher darf es keine Interaktivitäten geben. Ich habe mein Script '<strong>automount</strong>' genannt und in dem Ordner <strong>/usr/local/sbin</strong> abgelegt. Die Zugriffsrechte des Scripts werden nach der Erstellung so restriktiv wie möglich gesetzt. Da die udev-Regeln als root ausgeführt werden, braucht es nur die root Ausführungsrechte zum Lesen und Ausführen.</p>
<p>Das '<strong>automount</strong>'-Skript: abgelegt in <strong>/usr/local/sbin/automount</strong> (Die Zugriffsrechte werden nach der Erstellung auf r-x------ gesetzt (500), owner root:root)</p>
<hr /><pre>
#!/bin/sh

##############################
#
# Script zum automatischen Mounten von encfs-verschlüsselten Dateisystemen auf
# entfernbaren Datenträgern, Verzeichnisse werden bei Bedarf erstellt
# (und mit einem weiteren Script wieder entfernt)
#
# Version 0.5 Rolf Wald, LUG Balista Hamburg e.V., 2009
#
# License: GPL (Debian Version)
#
# Aufruf mit den Parametern: &quot;lfd.Nummer des Schlüsselscripts&quot; &quot;Name des
# angemeldeten Benutzers&quot; &quot;eindeutige Nr. des Geräts lt. udev-Regel&quot;
# (optional: &quot;Name des Dateisystems (wie nach mount -t anzugeben)&quot;)

# Bei gesonderter Behandlung von SD-Card Lesern muss die 'sudoers'-Datei angepasst
# werden (mit visudo):(sdcard) - Eintrag wie in fstab
# nutzer ALL=NOPASSWD: /bin/ls -s /media/(sdcard) /media/stick*
#
#
##############################
# Nummer der externen Passwortabfrage
PASSNUMMER=$1

# angemeldeten Nutzer übergeben
CRYPTUSER=$2

# Nummer als Parameter übergeben
MEDIUM=$3

# wenn weiterer Parameter vorhanden, dann in Variable übernehmen
# z.B. Sonderbehandlung von ext2 formatierten Devices
# (werden nicht korrekt von pmount erkannt)
if [ $# -le 3 ]
    then
        DATSYS=&quot;auto&quot;
    else
        DATSYS=$4
fi

# Mounten mit den Rechten des angemeldeten Nutzers
# (sonst keine Schreibrechte!)
if [ &quot;$DATSYS&quot; == &quot;auto&quot; ]
            then
                sudo -u $CRYPTUSER pmount /dev/stick$MEDIUM
            else
                sudo -u $CRYPTUSER pmount -t $DATSYS /dev/stick$MEDIUM
        fi

# Ereignis in der syslog-Datei anzeigen
logger &quot;cryptstick vorhanden!&quot;

# Wenn das Script mehrmals aufgerufen wird, Device erst korrekt unmounten
# sonst ist der Moutpoint nicht frei
if [ &quot;cat /etc/mtab | grep /home/$CRYPTUSER/stick$MEDIUM | wc -l&quot; -gt 0 ]
    then
        fusermount -u /home/$CRYPTUSER/stick$MEDIUM

        # Mounten mit den Rechten des angemeldeten Nutzers
        #  (sonst keine Schreibrechte!)
        if [ $DATSYS == &quot;auto&quot; ]
            then
                sudo -u $CRYPTUSER pmount /dev/stick$MEDIUM
            else
                sudo -u $CRYPTUSER pmount -t $DATSYS /dev/stick$MEDIUM
        fi
fi

# Sonderbehandlung eines eingebauten SD-Card Lesers
# Wenn dafür bereits ein Eintrag in der 'fstab' vorhanden
# ist, wird pmount mit den Angaben in der 'fstab' (hier /media/sdcard)
# ausgeführt.
if [ ! -d /media/stick$MEDIUM ]
        then
                if [[ -b /dev/mmcblk0 ]]
                        then
                                ln -s /media/sdcard /media/stick$MEDIUM
                                logger link!!!
                fi
fi

sleep 1

# Ordner vorhanden ?, sonst erstellen!
if [ ! -d /home/$CRYPTUSER/stick$MEDIUM ]
    then
        sudo -u $CRYPTUSER mkdir /home/$CRYPTUSER/stick$MEDIUM
fi

# Einhängen des encfs Filesystems
export MEDIUM
sudo -u $CRYPTUSER encfs --extpass=&quot;/usr/local/sbin/crymount$PASSNUMMER $MEDIUM&quot; \
/media/stick$MEDIUM /home/$CRYPTUSER/stick$MEDIUM

ERFOLG=$?
logger $ERFOLG
</pre>
<hr /><p> </p>
<p>Nach der Eingabe von <kbd><strong>udevadm control --reload_rules </strong></kbd>werden die neuen Regeln eingelesen.</p>
<p>Zunächt muss der Stick einmal ordnungsgemäß entfernt werden (unmount mit den üblichen Methoden des Desktops), damit der Stick aus- und wieder eingesteckt werden kann.</p>
<p>Nach dem Wiedereinstecken läuft jetzt das automount-Script mit den in der udev-Regel eingestellten Parametern ab. Danach wird in der root-Konsole der Befehl <strong>/usr/local/sbin/automount 5 nutzer 1</strong> aufgerufen. Es gibt nun verschiedene mögliche Szenarien, abhängig von den Dateien, die bereits auf dem Stick vorhanden waren (im Hauptverzeichnis: hier /media/stick1).  (Die Fehlermeldungen beim 'Mounten' können ignoriert werden) :</p>
<p>1. Der Stick enthielt keine &quot;.encfs6.xml&quot; Datei und auch keine Passwortdatei &quot;xyz&quot;, dann wurde eine &quot;.encfs6.xml&quot; Datei erstellt, die ohne Passworteingabe funktioniert (Fehlermeldung SSL-Cipher...). Die &quot;.encfs6.xml&quot; muss jetzt wieder gelöscht werden.</p>
<p>2. Es ist die richtige Passwortdatei vorhanden, die &quot;.encfs6.xml&quot; ist nicht vorhanden oder gehört zu einer anderen Passwortdatei. Jetzt wird 'das Passwort ist falsch' angezeigt. Auch hier ist die &quot;.encfs6.xml&quot; zu löschen.</p>
<p>3. Es sind die zueinander passenden Dateien &quot;.encfs6.xml&quot; und&quot;xyz&quot; vorhanden. Es erfolgt keine Fehlermeldung bei der Entschlüsselung. Hier muss nichts mehr getan werden. Wir sind mit der Einrichtung fertig.</p>
<p>Falls noch keine Passwortdatei &quot;xyz&quot; vorhanden ist, muss sie jetzt angelegt werden.</p>
<hr /><p><strong>Anlegen der Passwortdatei und des passenden Scripts</strong></p>
<hr /><p>Die Schlüsseldatei wird auf dem Stick erzeugt:</p>
<p><kbd><strong>dd if=/dev/urandom of=/media/stick1/<em>Kjzsbd5vS3-z=gWl</em> bs=1 count=2578</strong></kbd></p>
<p>Die Datei darf beliebig groß sein und sollte auch einen kryptischen Namen bekommen, nach durchlaufen der Rechenschritte zur endgültig verwendeten Datei sollte diese max. 2 KB groß sein, die Dokumentation zu encfs hat da eine Grenze aufgezeigt (gilt nur bei -S, Passworteingabe aus Standardeingabe lesen!).</p>
<p>Und jetzt kommt eure Phantasie ins Spiel, denkt euch eine Kette von Bearbeitungen der Schlüsseldatei aus. die die wirklich zu verwendende Datei erzeugt.Beispiel:<br />
Verwendet werden können alle Befehle, die in einer Pipe arbeiten, d.h. sowohl von Standardeingabe lesen als auch auf Standardausgabe schreiben können: dd, base64, caesar, openssl.</p>
<p>Für diese &quot;sensible&quot; Information wird jetzt eine eigene, später nur für den Nutzer ausführbare, Datei erstellt, ich nenne sie <strong>crymount5</strong> (Nummer wie bei udev-Regel angegeben und Name wie im automount Script)</p>
<p>:Das '<strong>crymount</strong>'-Skript: abgelegt in <strong>/usr/local/sbin/crymount5</strong> (Die Zugriffsrechte werden nach der Erstellung auf r-x------ gesetzt (500), owner nutzer:nutzer)</p>
<hr /><pre>
#!/bin/sh

##############################
#
# Script zur Errechnung des zu verwendenden Schlüssels aus einer Passwortdatei
#
# Version 0.2 Rolf Wald, LUG Balista Hamburg e.V., 2009
#
# License: GPL (Debian Version)
#
# Aufruf mit dem Parameter &quot;vergebene lfd. Nummer des verschlüsselten
# Datenträgers&quot;
#
##############################


MEDIUM=$1
logger crypt$MEDIUM

dd if=/media/stick$MEDIUM/<em>Kjzsbd5vS3-z=gWl</em> bs=1 skip=33 count=1047 | \

openssl enc -rc4-40 -k 0a0b0c0d0e -nosalt | base64 | dd bs=1 skip=11 count=999 | \

base64 | tr -d '\n'
</pre>
<hr /><p><strong>Bitte beachten</strong>: Die Passworteingabe über die Standardeingabe bei encfs funktioniert m.E. nur mit druckbaren Zeichen (daher base64 kodieren) und wird mit ASCII Zeichen 10 abgeschlossen (der Befehl tr -d '\n' filtert daher diese aus, damit das Passwort nicht abgeschnitten wird), besser ist die Nutzung des Parameters '--extpass=...', dort konnte ich keine Beschränkungen feststellen.</p>
<p>Im Falle der o.a. Punkte 1 und 2 wird (nach Löschen der &quot;.encfs6.xml&quot;) noch einmal der Befehl</p>
<p><strong>/usr/local/sbin/automount 5 nutzer 1 </strong>in der root-Konsole aufgerufen.</p>
<p><kbd><span style="font-family:Arial, Verdana, sans-serif;">Bei der Ersteinrichtung erfolgt hier d</span></kbd>ann die Frage nach der Verschlüsselungsart, z.B. p (paranoia-mode, weitere Angaben siehe man encfs), dann holt sich das Script automatisch das Passwort mit Hilfe von crymount5.</p>
<p>Wenn alles ohne Fehlermeldung geklappt hat, überprüfen wir die Einrichtung des crypt-Dateisystems.</p>
<p>Es müssen die Ordner /media/stick(nr)  (nr=1...(wie in der udev-Regel angegeben)), sowie /home/nutzer/stick(nr) vorhanden sein. Nun ist zum Test mal eine Datei im Ordner /home/nutzer/stick(nr) zu speichern. Es erscheint dann ein verschlüsselter Dateieintrag im Ordner /media/stick(nr)</p>
<p>Damit ist die Ersteinrichtung abgeschlossen, den Stick bitte noch nicht entfernen, er ist noch im Dateisystem eingehängt. Entweder erst die u.a. Dateien erstellen und <strong>cryumount.sh</strong> aufrufen oder</p>
<p><kbd><strong>fusermount -u /home/nutzer/stick(nr) &amp;&amp; pumount /dev/stick(nr)</strong></kbd></p>
<hr /><p><br />
Damit das Unmounten genauso komfortabel geschieht, gibt es auch dafür ein Script.<br />
Am Besten legt man sich ein Programmsymbol auf seinem Desktop an, welches das Script ausführt. Ich habe es unter <strong>/usr/local/bin/cryumount.sh</strong> abgespeichert. (Es kann sowohl als Nutzer als auch als root genutzt werden.). Aufruf cryumount (nutzer) (zahl)  (= Max Zahl an Geräten (wie in udev-Regel eingesetzt))</p>
<p>Beispiel: cryumount.sh peter 5 (Der Nutzer peter hat 5 Geräte in seiner udev-Regel)</p>
<hr /><pre>
#!/bin/sh

##############################
#
# Script zum sicheren Entfernen gemounteter Datenträger mit encfs Verschlüsselung
#
# Version 0.5 Rolf Wald, LUG Balista Hamburg e.V., 2009
#
# License: GPL (Debian Version)
#
# Aufruf mit den Parametern &quot;angemeldeter Benutzer&quot; und &quot;max. Zahl der Geräte&quot;
#
# Erfordert Nutzereinträge in 'sudoers' (mit visudo)
# nutzer ALL=NOPASSWD: /bin/umount -l /dev/*, /bin/rm -f /media/stick*,
#  /bin/rmdir /media/stick*
#
##############################

CRYPTUSER=$1
ZAHL=$2

for (( I=1 ; $I&lt;=$ZAHL ; I++ ))
   do

      # Unmounten des encfs-Dateisystems und entfernen des Verzeichnisses
      fusermount -u /home/$CRYPTUSER/stick$I ; rmdir /home/$CRYPTUSER/stick$I

      # Unmounten des Datenträgers (in Fehlerfall (bereits entfernter Datenträger!)
      # wird unmounten erzwungen und das Verzeichnis gelöscht
      ERGEBNIS=&quot;pumount /media/stick$I 2&gt;&amp;1 | grep Fehler | cut -f 3 -d &quot; &quot;&quot;
     if [ $ERGEBNIS != &quot;&quot; ] ; then
         sudo /bin/umount -l /media/stick$I &amp;&amp; sudo /bin/rm -f /media/stick$I/.*
         sudo /bin/rmdir /media/stick$I
     fi

# falls das Verzeichnis ein Symlink ist, entfernen! (wird bei Datenträgern,
# die in der fstab verzeichnet sind, benötigt)
      if [[ -h /media/crypt$I ]] ; then sudo /bin/rm -f /media/crypt$I ; fi
   done


</pre>
<hr /><p>... und es steht ab sofort der beschriebene Automatismus zur Verfügung.</p>
<p><strong>Anmerkungen:</strong>  Die hier beschriebene Vorgehensweise solltet ihr natürlich mit euren eigenen, angepassten Eingaben vornehmen, z.B. <strong>nutzer</strong> ersetzen durch euren angemeldeten Namen. Die Errechnung des Schlüssels ist mit der Veröffentlichung hier auch abzuändern (andere Zahlenwerte, Algorithmen o.ä.), ansonsten funktioniert sogar copy und paste der fettgedruckten Kommandos.</p>
<p>(rw)</p>]]></description>
      <pubDate>Fri, 18 May 2012 10:18:44 +0000</pubDate>
    </item>
  </channel>
</rss>

