GnupgCard und LTSP

LTSP (=Linux Terminal Server Project) ist ein Terminal-Server System für plattenlose Thinclients. Diese werden über PXE gebootet. Die grafische Oberfläche, sowie die meisten Programme laufen remote auf dem Server.

Prinzipiell ist die Möglichkeit der Smartcard-Nutzung bei Remote Anwendungen eingeschränkt, da das Kartenlesegerät mit der lokalen Hardware verbunden ist.

Da LTSP aber auch lokal laufende Applikationen unterstützt, kann die GnupgCard auch mit LTSP eingesetzt werden.

Die nötige Software wie gnupg2 und pcscd, muss lokal im LTSP Chroot installiert sein.

ltsp-chroot -m
apt-get install gnupg2 scdaemon gpgsm pcscd
exit

Ob die Karte erkannt wird, lässt sich in einem lokalen xterm testen:

ltsp-localapps xterm

Im neuen xterm kann dann mit

gpg --card-status

getestet werden, ob alles richtig konfiguriert ist.

Im Home-Direcotry der jeweiligen User sollte gnupg genauso eingerichtet werden, wie bei einer normalen lokalen Verwendung.

Um z.B. den ssh-support des gnupg-agent nutzen zu können, müssen wir auch die Terminal-Anwendung lokal laufen lassen und in der .bashrc konfigurieren, dass der gnupg-agent gestartet wird.

Als Standard gibt es ein lokales xterm innerhalb des LTSP-Chroot. Dieses kann entweder aus dem Menü oder per ltsp-localapps xterm gestartet werden. Alternativ kann natürlich ein komfortableres Terminal als lokale Applikation installiert werden (z.B. mate-terminal).

Die folgende .bashrc Konfiguration stellt sicher, dass der gpg-agent http://unix.stackexchange.com/questions/46960/how-to-configure-gpg-to-enter-passphrase-only-once-per-session - und nur dann, wenn es sich um eine lokale Session handelt.

In die .bashrc muss folgendes eingefügt werden:

.bashrc
# Providing gpg-agent in a local-apps-environment
# start only, if we are local
if   ip addr|grep -q $LTSP_CLIENT/24 ; then
	# Invoke GnuPG-Agent the first time we login.
	# Does `~/.gpg-agent-info' exist and points to gpg-agent process accepting signals?
	if test -f $HOME/.gpg-agent-info && \
	    kill -0 `cut -d: -f 2 $HOME/.gpg-agent-info` 2>/dev/null; then
	    GPG_AGENT_INFO=`cat $HOME/.gpg-agent-info | cut -c 16-`
	    echo "gpg-agent already running, not starting a second one"
	else
	  # No, gpg-agent not available; start gpg-agent
	  echo "no running gpg-agent found. starting"
	  gpg-agent --daemon --enable-ssh-support \
	  --write-env-file "${HOME}/.gpg-agent-info" 
	fi
 
	# the next script looks for a running gpg-agent and exports the
	# environment variables 
	if [ -f "${HOME}/.gpg-agent-info" ]; then
	   . "${HOME}/.gpg-agent-info"
	   export GPG_AGENT_INFO
	   export SSH_AUTH_SOCK
	   echo "connect to running gpg-agent"
	fi
fi

Generell gilt: alle weiteren Anwendungen, die auf gnupg zugreifen sollen, müssen als lokale Applikationen installiert werden.

Weiterhin muss sichergestellt werden, dass diese aus einem Terminal heraus gestartet werden, in dem die gpg-agent Umgebungsvariablen bekannt sind. Das Starten aus dem Mate-Menü heraus leistet das nicht.

Icedove mit Enigmail funktioniert problemlos, wenn beide als lokale Applikationen installiert sind. Allerdings greifen sie nicht auf einen ggf. laufenden gpg-agent zurück. Soll also eine Passphrase für Schlüssel, die nicht auf der Karte sind, zwischen gespeichert werden oder wird aus anderen Gründen (s.u.) ein gpg-agent benötigt, muss Icedove aus einem Terminal mit entsprechend laufendem gpg-agent heraus gestartet werden.

Alternativ kann unter /usr/share/applications/ eine .desktop Datei angelegt werden, die mit einem Skript verknüpft ist, das wiederum die Umgebungsvariablen für den gpg-agent setzt und dann die Anwendung startet:

/usr/share/applications/icedove-local-wrapper.desktop
[Desktop Entry]
Name=Icedove-Lokal
Comment=Read/Write Mail/News with Icedove
GenericName=Mail Client
Exec=ltsp-localapps icedove-local-wrapper
Terminal=false
X-MultipleArgs=false
Type=Application
Icon=icedove
Categories=Network;Email;News;GTK;
MimeType=message/rfc822;x-scheme-handler/mailto;
StartupWMClass=Icedove-bin
StartupNotify=true
Name[ca]=Client de correu Icedove
Name[cs]=Poštovní klient Icedove
Name[fi]=Icedove-sähköposti
Name[fr]=Messagerie Icedove
Name[ja]=Icedove メールクライアント
Name[pl]=Klient poczty Icedove
Name[pt_BR]=Cliente de E-mail Icedove
Name[sv]=E-postklienten Icedove
Comment[ca]=Llegiu i escriviu correu
Comment[cs]=Čtení a psaní pošty
Comment[de]=Icedove (lokal) Emails lesen und verfassen
Comment[fi]=Lue ja kirjoita sähköposteja
Comment[fr]=Lire et écrire des courriels
Comment[it]=Leggere e scrivere email
Comment[ja]=メールの読み書き
Comment[pl]=Czytanie i wysyłanie e-maili
Comment[pt_BR]=Ler e escrever suas mensagens
Comment[sv]=Läs och skriv e-post
GenericName[ja]=メールクライアント
Keywords=Mail;Contact;Addressbook;News;

und das Wrapper-Skript:

/opt/ltsp/i386/usr/local/bin/icedove-local-wrapper
#!/bin/bash
# We need this wrapper for starting local apps which need a running gpg-agent
 
# Providing gpg-agent in a local-apps-environment
 
# Providing gpg-agent in a local-apps-environment
# start only, if we are local
if   [ "$LTSP_CLIENT" != "" ] && ip addr|grep -q $LTSP_CLIENT/24 ; then
        echo "We are in ltsp-environment. Starting gpg-agent."
 
        # Invoke GnuPG-Agent the first time we login.
        # Does `~/.gpg-agent-info' exist and points to gpg-agent process accepting signals?
        if test -f $HOME/.gpg-agent-info && \
            kill -0 `cut -d: -f 2 $HOME/.gpg-agent-info` 2>/dev/null; then
            GPG_AGENT_INFO=`cat $HOME/.gpg-agent-info | cut -c 16-`
#            echo "gpg-agent already running, not starting a second one"
        else
          # No, gpg-agent not available; start gpg-agent
#          echo "no running gpg-agent found. starting"
          gpg-agent --daemon --enable-ssh-support \
          --write-env-file "${HOME}/.gpg-agent-info"
        fi
 
        # the next script looks for a running gpg-agent and exports the
        # environment variables
        if [ -f "${HOME}/.gpg-agent-info" ]; then
           . "${HOME}/.gpg-agent-info"
           export GPG_AGENT_INFO
           export SSH_AUTH_SOCK
#           echo "connect to running gpg-agent"
        fi
fi
 
# start icedove
which icedove && icedove
Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information