Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
public:gnupg:luks_gnupg_card [2015/02/27 23:12] – ungewitter | public:gnupg:luks_gnupg_card [2019/06/14 17:31] (aktuell) – jankow@datenkollektiv.net | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== Luks mit Gnupg-Card ====== | ====== Luks mit Gnupg-Card ====== | ||
+ | <WRAP center round info 60%> | ||
+ | **UPDATE** | ||
- | Dieser Ansatz beruht im Wesentlichen auf der [[http:// | + | Für das aktuelle Debian Stretch mit gnupg2 gibt es eine aktualisierte Anleitung: [[public: |
+ | </ | ||
+ | |||
+ | |||
+ | Dieser Ansatz beruht im Wesentlichen auf der [[http:// | ||
* Kopieren zusätzlicher Bibliotheken in die Initramdisk | * Kopieren zusätzlicher Bibliotheken in die Initramdisk | ||
* Starten des pcscd Dämons im decrypt_gnupg_sc Skript | * Starten des pcscd Dämons im decrypt_gnupg_sc Skript | ||
- | <WRAP center round important | + | <WRAP center round important> |
Diese Anleitung setzt voraus, dass diejenigen, die sie anwenden, wissen was sie tun und die zugrundeliegenden Skripte verstehen. Es besteht die Gefahr, dass das System nicht mehr ohne weiteres gebootet werden kann. Anwender_innen sollten wissen, wie sie dann vorgehen müssen. | Diese Anleitung setzt voraus, dass diejenigen, die sie anwenden, wissen was sie tun und die zugrundeliegenden Skripte verstehen. Es besteht die Gefahr, dass das System nicht mehr ohne weiteres gebootet werden kann. Anwender_innen sollten wissen, wie sie dann vorgehen müssen. | ||
</ | </ | ||
Zeile 20: | Zeile 26: | ||
* Funktionierendes [[gnupg-card-howto|Setup der Gnupg Card]] | * Funktionierendes [[gnupg-card-howto|Setup der Gnupg Card]] | ||
+ | **Debian Jessie**: | ||
+ | |||
+ | Das Vorgehen ist auch für Debian Jessie getestet. Damit es funktioniert muss in der initramdisk das Verzeichnis /var/run erstellt werden, weil der pcscd nicht mehr startet, wenn er kein PID schreiben kann. | ||
===== Ansatz ===== | ===== Ansatz ===== | ||
Zeile 51: | Zeile 60: | ||
mkdir -m 700 /etc/keys | mkdir -m 700 /etc/keys | ||
- | dd if=/ | + | dd if=/ |
cd /root | cd /root | ||
mkfifo -m 700 keyfifo | mkfifo -m 700 keyfifo | ||
Zeile 88: | Zeile 97: | ||
===== Anpassung der Initramdisk ===== | ===== Anpassung der Initramdisk ===== | ||
- | Folgende Dateien sind nötig und müssen an die vorgesehenen Stellen kopiert werden. | + | Folgende Dateien sind nötig und müssen an die vorgesehenen Stellen kopiert werden: |
+ | * / | ||
+ | * / | ||
+ | |||
+ | Für Cardreader ohne Pinpad, bei denen die PIN über die normale Tastatur eingegeben wird, sind weniger Binaries im initramfs erforderlich. Das Skript für Cardreader mit Pinpad funktioniert auch mit Cardreadern ohne Pinpad - allerdings darf der USB-Cardreader erst eingesteckt werden, wenn bereits nach dem Passwort gefragt wird. | ||
+ | |||
+ | FIXME: wir bräuchten eine Möglichkeit, | ||
+ | |||
+ | Wird der Schlüssel " | ||
Das Skript '' | Das Skript '' | ||
+ | |||
+ | <WRAP center round info> | ||
+ | Die folgenden Skripte sind für Lesegeräte gedacht, die nicht vom internen ccid-Treiber des gnupg-Binaries unterstützt werden sondern einen laufenden pcsc Daemon benötigen. Falls der Kartenleser vom internen ccid unterstützt wird, können und müssen die entsprechenden Zeilen ausgelassen werden. Ob mit laufendem pcscd auch Kartenleser unterstützt werden, die diesen normalerweise nicht benötigen, habe ich noch nicht getestet. | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== Für Cardreader ohne Pinpad | ||
+ | |||
+ | <WRAP center round important 60%> | ||
+ | Unter Stretch funktionieren die folgenden Skripte für Cardreader ohne Pinpad nicht mehr. Ein funktionierender Ansatz ist hier beschrieben: | ||
+ | </ | ||
+ | |||
Zeile 97: | Zeile 126: | ||
# quick hack for starting pcscd | # quick hack for starting pcscd | ||
+ | # nur für Kartenleser benötigkt, die nicht von dem gnupg-internen ccid unterstützt werden | ||
+ | mkdir -p /var/run | ||
pcscd & | pcscd & | ||
Zeile 193: | Zeile 224: | ||
# some more libs for pcscd | # some more libs for pcscd | ||
+ | # nur für Kartenleser benötigkt, die nicht von dem gnupg-internen ccid unterstützt werden | ||
copy_exec / | copy_exec / | ||
copy_exec / | copy_exec / | ||
Zeile 198: | Zeile 230: | ||
copy_exec / | copy_exec / | ||
copy_exec / | copy_exec / | ||
- | # copy_exec /usr/lib/i386-linux-gnu/ | + | if uname -r | grep -q amd64; then |
- | # copy_exec /lib/1386-linux-gnu/ | + | |
- | copy_exec /usr/lib/x86_64-linux-gnu/ | + | copy_exec /lib/x86_64-linux-gnu/ |
- | copy_exec /lib/x86_64-linux-gnu/ | + | else |
+ | | ||
+ | copy_exec /lib/i386-linux-gnu/ | ||
+ | fi | ||
exit 0 | exit 0 | ||
</ | </ | ||
<WRAP center round todo> | <WRAP center round todo> | ||
- | Achtung: das Skript | + | Achtung: das Skript |
- | Die copy_exec Funktion aus [[http:// | + | Die copy_exec Funktion aus [[http:// |
Die nötigen Bibliotheken stecken in den Debian-Packeten libccid, libpcsclite1 und libgcc1. | Die nötigen Bibliotheken stecken in den Debian-Packeten libccid, libpcsclite1 und libgcc1. | ||
</ | </ | ||
- | |||
Auch dieses Skript muss ausführbar sein: | Auch dieses Skript muss ausführbar sein: | ||
Zeile 219: | Zeile 252: | ||
chmod 755 / | chmod 755 / | ||
+ | ==== Cardreader mit Pinpad ==== | ||
+ | |||
+ | Für Kartenleser mit Pinpad benötigen wir gnupg2. Das Initramfs wird dadurch auch entsprechend größer: ~ 20 MB. | ||
+ | |||
+ | <WRAP center round tip> | ||
+ | Achtung: Die gnupg2-Versionen aus Debian Wheezy sind zu alt. Die version 2.0.25 aus wheezy-backports funktioniert aber. | ||
+ | </ | ||
+ | |||
+ | Am Anfang des Skripts wird eine kleine Abfrage gemacht, ob ein Kartenleser existiert. Wenn nicht, fragt das Skript nach der Passphrase. Diese Unterscheidung ist nötig, weil " | ||
+ | |||
+ | Wir können diesen Umstand ausnutzen, um auch Kartenleser ohne Pinpad zu nutzen. Wenn der Kartenleser erst eingesteckt wird, wenn das Skript sich schon in der Schleife mit " | ||
+ | |||
+ | <file bash / | ||
+ | #!/bin/sh | ||
+ | |||
+ | # quick hack for starting pcscd | ||
+ | mkdir -p /var/run | ||
+ | pcscd & | ||
+ | |||
+ | decrypt_gpg () { | ||
+ | # we check for attachted cardreader | ||
+ | # cardreaders with pinpad: they have to be attached before booting | ||
+ | # for cardreaders without pinpad: just attach them later, if the script already | ||
+ | # asks for Passphrase or PIN | ||
+ | if gpg2 --card-status > /dev/null 2>&1 && sleep 2; then | ||
+ | echo " | ||
+ | if ! / | ||
+ | --trustdb-name /dev/null --decrypt $1; then | ||
+ | return 1 | ||
+ | fi | ||
+ | return 0 | ||
+ | else | ||
+ | echo " | ||
+ | if ! / | ||
+ | "Enter passphrase for key $1, or PIN for your cardreader: " | \ | ||
+ | / | ||
+ | --trustdb-name /dev/null --passphrase-fd 0 --decrypt $1; then | ||
+ | return 1 | ||
+ | fi | ||
+ | return 0 | ||
+ | fi | ||
+ | } | ||
+ | |||
+ | if [ ! -x / | ||
+ | echo "$0: / | ||
+ | exit 1 | ||
+ | fi | ||
+ | |||
+ | if [ -z " | ||
+ | echo "$0: missing key as argument" | ||
+ | exit 1 | ||
+ | fi | ||
+ | |||
+ | decrypt_gpg " | ||
+ | exit $? | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | <file bash / | ||
+ | #!/bin/sh | ||
+ | |||
+ | set -e | ||
+ | |||
+ | PREREQ=" | ||
+ | |||
+ | prereqs() | ||
+ | { | ||
+ | echo " | ||
+ | } | ||
+ | |||
+ | case $1 in | ||
+ | prereqs) | ||
+ | prereqs | ||
+ | exit 0 | ||
+ | ;; | ||
+ | esac | ||
+ | |||
+ | . / | ||
+ | |||
+ | # Hooks for loading Gnupg software and key into the initramfs | ||
+ | |||
+ | # Check whether cryptroot hook has installed decrypt_gnupg_sc script | ||
+ | if [ ! -x ${DESTDIR}/ | ||
+ | exit 0 | ||
+ | fi | ||
+ | |||
+ | # Install cryptroot key files into initramfs | ||
+ | keys=$(sed ' | ||
+ | |||
+ | if [ " | ||
+ | if [ -z " | ||
+ | echo "$0: Missing key files in ${DESTDIR}/ | ||
+ | cat ${DESTDIR}/ | ||
+ | exit 1 | ||
+ | fi | ||
+ | for key in ${keys} ; do | ||
+ | keydir=$(dirname ${key}) | ||
+ | echo " | ||
+ | echo " | ||
+ | " | ||
+ | if [ ! -d ${DESTDIR}/ | ||
+ | mkdir -p ${DESTDIR}/ | ||
+ | fi | ||
+ | chmod 700 ${DESTDIR}/ | ||
+ | cp -p ${key} ${DESTDIR}/ | ||
+ | cp -p ${keydir}/ | ||
+ | cp -p ${keydir}/ | ||
+ | if [ -e ${keydir}/ | ||
+ | cp -p ${keydir}/ | ||
+ | fi | ||
+ | done | ||
+ | fi | ||
+ | |||
+ | # Install gnupg software | ||
+ | copy_exec / | ||
+ | copy_exec / | ||
+ | copy_exec / | ||
+ | |||
+ | |||
+ | # some more libs for pcscd | ||
+ | copy_exec / | ||
+ | copy_exec / | ||
+ | copy_exec / | ||
+ | copy_exec / | ||
+ | copy_exec / | ||
+ | if uname -r | grep -q amd64; then | ||
+ | copy_exec / | ||
+ | copy_exec / | ||
+ | else | ||
+ | copy_exec / | ||
+ | copy_exec / | ||
+ | fi | ||
+ | |||
+ | # we need some more stuff from gnupg2 | ||
+ | copy_exec / | ||
+ | copy_exec / | ||
+ | copy_exec / | ||
+ | |||
+ | exit 0 | ||
+ | </ | ||
===== Update der Initramdisk ===== | ===== Update der Initramdisk ===== | ||
Zeile 253: | Zeile 427: | ||
Dieser Artikel steht unter der Creative Commons (BY-SA) Linzenz und darf unter gleichen Bedingungen weiter gegeben werden. | Dieser Artikel steht unter der Creative Commons (BY-SA) Linzenz und darf unter gleichen Bedingungen weiter gegeben werden. | ||
- | ==== Links ==== | + | ===== Links ===== |
Weitere Ansätze zur Nutzung der Gnupg Karte mit Luks finden sich auf folgenden Seiten: | Weitere Ansätze zur Nutzung der Gnupg Karte mit Luks finden sich auf folgenden Seiten: |