Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
public:gnupg:gnupg-card_auth [2015/05/26 12:57] – [Nutzung für ssh] jankow@datenkollektiv.netpublic:gnupg:gnupg-card_auth [2020/04/17 11:03] (aktuell) – [Voraussetzungen] jankow@datenkollektiv.net
Zeile 1: Zeile 1:
 ====== Login und Authentifizierung ====== ====== Login und Authentifizierung ======
-===== Login in lokalen Linux-Rechner ===== 
  
-Die Linux-Pam und die verschiedenen Session-Manager können mit GnuPG-Card umgehen.+===== Nutzung für ssh =====
  
-  * http://www.schiessle.org/howto/poldi.php+==== Voraussetzungen ====
  
-Die dort verwendeten Optionen für poldi-ctrl scheinen in der wheezy-Version noch nicht zu existieren. Folgendes Information hilft weiter:+**Deaktivierung des ssh-agent**
  
-  * http://walter.silvergeeks.com/rechner/howto/how-to-anmeldung-mit-smart-card-oder-usb-token-am-lokalen-linux-system/+Der gpg-agent ist in der Lage, auch ssh-Authentifizierungen zu erledigen - mit den SSH-Schlüsseln, die im Gnupg-Keyring oder auf einer Karte abgelegt sind. Dafür muss sich der gpg-agent auch um die SSH-Anfragen kümmern. Erledigt wird das über die Umgebungsvariable ''SSH_AUTH_SOCK'' die dann z.B. folgenden Wert haben muss: ''/run/user/1000/gnupg/S.gpg-agent.ssh''.
  
-==== Einrichten des Poldi-Moduls: ====+In diesem Fall darf aber der ssh-agent nicht gestartet werden, da dieser die Umgebungsvariable überschreiben würde.
  
-Das Packet muss installiert werden: +Leider gibt es keine einheitliche Funktionsweise, wie die Desktop-Umgebungen den ssh-agent starten.
-  apt-get install libpam-poldi +
-   +
-Ein+
  
-  poldi-ctrl -d+  * einige werten die ''/etc/X11/Xsession.options'' aus und suchen dort nach der Zeile ''use-ssh-agent'' (xfce4, frühere Versionen, Mate?, Gnome? 
 +  * andere haben eine eigene Startroutine 
 +  * wieder andere nutzen wohl neuerdings auch den systemd.
  
-testet, ob die Karte erkannt wird. +**gnome-keyring-manager darf sich weder für ssh noch für gpg verantwortlich fühlen**
-   +
-Mit+
  
-  poldi-ctrl -s+Noch komplizieter ist die Lage beim gnome-keyring-manager, der seinerseits wiederum auch eine Funktioalität sowohl für den ssh-agent als auch für den gpg-agent mitbringt. Damit die gnupg-card und die Authentifizierung mit ssh klappt, müssen diese Komponenten deaktiviert sein - bzw. der gnome-keyring-manager darf gar nicht laufen.
  
-finden wir die Seriennummer der Karte heraus (''gnupg --card-status'' würde auch funktionieren)+  * [[http://www.ozonesolutions.com/programming/2014/04/pgp-smart-card-ssh-login-gpg-agent-ubuntu/|http://www.ozonesolutions.com/programming/2014/04/pgp-smart-card-ssh-login-gpg-agent-ubuntu/]] 
-   +  * [[http://www.bootc.net/archives/2013/06/09/my-perfect-gnupg-ssh-agent-setup/|http://www.bootc.net/archives/2013/06/09/my-perfect-gnupg-ssh-agent-setup/]] 
-Jetzt müssen wir unter /etc/poldi/localdb/users eine Kartei der User anlegen, für die die Authentifizierung mit der jeweiligen Karte eingerichtet werden sollZ.Bmit:+  * [[https://grepular.com/Smart_Cards_and_SSH_Authentication|https://grepular.com/Smart_Cards_and_SSH_Authentication]]
  
-  echo "`poldi-ctrl -s` USERNAME" | tee -a /etc/poldi/localdb/users+<WRAP center round tip 60%> Leider hat sich die Interaktion zwischen gnome-keyring-daemon, gpg-agent und ssh-agent in Debian stretch wiederum geändert. Hinweise dazu gibt es hier:
  
-Unter /etc/poldi/localdb/keysmuss jetzt für jede Karte eine Datei mit der Seriennummer als Dateiname angelegt werden, die den public Key der Karte enthältDas geht einfach mit:+  * [[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=850982|https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=850982]] 
 +  * [[https://blog.josefsson.org/2017/06/19/openpgp-smartcard-under-gnome-on-debian-9-0-stretch/|https://blog.josefsson.org/2017/06/19/openpgp-smartcard-under-gnome-on-debian-9-0-stretch/]]
  
-  poldi-ctrl -s > serialno.txt +In Stretch ist jetzt die user-Session von systemd verantwortlich für den Start des gpg-agentDie verschiedenen Anleitungen, den gnome-keyring-daemon daran zu hindern, sich für ssh verantwortlich zu fühlen, funktionieren in unseren Setups (unter Mate und Xfce4 allerdings nicht. Der entscheidende Hinweise steht unter ''/usr/share/doc/gnupg-agent/README.Debian'' 
-  poldi-ctrl -k | tee -a /etc/poldi/localdb/keys/`cat serialno.txt+</WRAP>
  
-Damit sollte Poldi fertig konfiguriert sein.+==== Vorgehen ====
  
-==== Einrichten der Authentifizierung ====+**ssh-Support im gpg-agent konfigurieren**
  
 +<code>
 +echo "enable-ssh-support">> ~/.gnupg/gpg-agent.conf
 +</code>
  
-Nach der grundlegenden Einrichtung der Smartcard, kann das Pam-Poldi-Modul zur /etc/pam.d/common-auth hinzugefügt werdenAlle Authentifikationen, die auf die common-auth zurückgreifen (u.a. xscreensaver, sudo) können dann auch via smartcard authentifizieren. Wenn das Modul am Anfang der common-auth hinzugefügt wird und alle anderen Einträge bleiben, ist die Gnupg Card ein **zusätzliches** Authentifizierungsmittel. Bitte immer testen, so lange noch eine offene Konsole verfügbar ist, um die Änderungen ggf. zu korrigieren. Sonst sperrt mensch sich leicht aus.+Gleichzeitig soll verhindert werden, dass der ssh-agent beim Starten einer Desktop-Umgebung startet. Dazu editieren wir die ''/etc/X11/Xsession.options''  und kommentieren
  
 <code> <code>
---- a/pam.d/common-auth +#use-ssh-agent
-+++ b/pam.d/common-auth +
-@@ -13,6 +13,8 @@ +
- pam-auth-update to manage selection of other modules.  See +
- # pam-auth-update(8) for details. +
-  +
-+# with smartcard +
-+auth sufficient pam_poldi.so +
- # here are the per-package modules (the "Primary" block) +
- auth   [success=1 default=ignore]      pam_unix.so nullok_secure +
- # here's the fallback if no module succeeds+
 </code> </code>
  
 +aus.
  
-===== Nutzung für ssh =====+**Konflikt mit Gnome-Keyring Manager lösen**
  
 +In manchen (älteren Umgebungen - z.B. xfce4 bis Debian Jessie richt es, folgende Dateien umzubenennen
  
-  * http://www.ozonesolutions.com/programming/2014/04/pgp-smart-card-ssh-login-gpg-agent-ubuntu/ +<code> 
-  * http://www.bootc.net/archives/2013/06/09/my-perfect-gnupg-ssh-agent-setup/ +/etc/xdg/autostart/gnome-keyring-ssh.desktop 
-  * https://grepular.com/Smart_Cards_and_SSH_Authentication+/etc/xdg/autostart/gnome-keyring-gpg.desktop 
 +</code>
  
-Wir müssen ssh-Support im gpg-agent konfigurieren:+jeweils um, in dem wir z.B. ein ''.disable''  anhängen. Wir könnten sie theoretisch auch löschen.
  
-  echo "enable-ssh-support" >> ~/.gnupg/gpg-agent.conf+In manchen [[http://www.bootc.net/archives/2013/06/09/my-perfect-gnupg-ssh-agent-setup/|Howtos]] wird empfohlen
  
-Gleichzeitig soll verhindert werden, dass der ssh-agent beim Starten einer Desktop-Umgebung startet. Dazu editieren wir die ''/etc/X11/Xsession.options'' und kommentieren +<code> 
 +apt-get remove libpam-gnome-keyring 
 +</code>
  
-  #use-ssh-agent+zu deinstallieren. Das scheint nicht zwingend notwendig.
  
-aus.+Auch ein
  
-==== Konflikt mit Gnome-Keyring Manager ====+<code> 
 +gconftool-2 --set -t bool /apps/gnome-keyring/daemon-component/ssh false 
 +</code>
  
-In Gnome-Desktops (auch Mate, Cinnamon), gibt es einen Konflikt zwischen dem gpg-agent und dem gnome-keyring Manager, in dessen Folge der gpg-Agent nicht startet.+wird in anderen Howtos genanntscheint aber nicht in allen Umgebungen nötig zu sein.
  
-Um dem Gnome-Keyring-Manager abzugewöhnen, sich für ssh und gpg verantwortlich zu fühlen, benennen wir die Dateien:+==== Einzelne Desktop-Umgebungen ====
  
-  /etc/xdg/autostart/gnome-keyring-ssh.desktop +=== XFCE-Desktop in Debian Stretch ===
-  /etc/xdg/autostart/gnome-keyring-gpg.desktop+
  
-jeweils umin dem wir z.B. ein ''.disable'' anhängen. Wir könnten sie theoretisch auch löschen.+Da xfce4 den gnome-keyring-Daemon nicht automatisch startetgibt es hier keine ProblemeLediglich der ssh-agent muss vom Starten abgehalten werden.
  
-In manchen [[http://www.bootc.net/archives/2013/06/09/my-perfect-gnupg-ssh-agent-setup/|Howtos]] wird empfohlen+Das lässt sich auf User-Ebene mit folgendem Kommando erreichen:
  
-  apt-get remove libpam-gnome-keyring+  xfconf-query -c xfce4-session -p /startup/ssh-agent/enabled -n -t bool -s false
  
-zu deinstallieren. Das ist in meinem Fall nicht nötig gewesen.+Per Default ist diese Eigenschaft nicht gesetzt.
  
-Auch ein +Klappt alles nicht, kann ein
  
-  gconftool---set -t bool /apps/gnome-keyring/daemon-component/ssh true+<code> 
 +SSH_AUTH_SOCK=/run/user/$(id -u)/gnupg/S.gpg-agent.ssh 
 +</code> 
 + 
 +in die ~/.bashrc geschrieben werden. Damit wird die Umgebungsvariable gesetzt, mit dem ssh dann den gpg-agent findet, der für die Authentifizierung zuständig sein soll. 
 + 
 +=== Mate-Desktop in Debian Stretch=== 
 + 
 +Mate scheint den gnome-keyring-manager autonom zu starten - ohne Berücksichtigung der Startskripte unter /etc/xdg/autostart. 
 + 
 +Daher kann Abhilfe auf User-Ebene Abhilfe geschaffen werden: 
 + 
 +<code> 
 +gsettings set org.mate.session gnome-compat-startup "['smproxy']" 
 +</code> 
 + 
 +Sieht man sich vorher mit 
 + 
 +<code> 
 +gsettings get org.mate.session gnome-compat-startup 
 +</code> 
 + 
 +die Einstellungen an, sieht man, dass nun keyring verschwunden ist. 
 + 
 +Zusätzlich deaktiviert mensch mit 
 + 
 +<code> 
 +mate-session-properties 
 +</code> 
 + 
 +den Autostart vom "GPG-Passwort-Agent"
 + 
 +Nach dem nächsten Neustart sollte der gpg-agent ohne gnome-keyring-manager funktionieren. 
 + 
 +[[http://william.shallum.net/random-notes/disabling-gnome-keyring-daemon-ssh-agent-on-mate-desktop|http://william.shallum.net/random-notes/disabling-gnome-keyring-daemon-ssh-agent-on-mate-desktop]]
  
-wird in anderen Howtos genannt. Bei mir hat's auch ohne funktioniert. 
 ==== ssh über mehrere Server (ForwardAgent) ==== ==== ssh über mehrere Server (ForwardAgent) ====
  
-  * http://livecipher.blogspot.co.uk/2013/02/ssh-agent-forwarding.html+  * [[http://livecipher.blogspot.co.uk/2013/02/ssh-agent-forwarding.html|http://livecipher.blogspot.co.uk/2013/02/ssh-agent-forwarding.html]]
  
 Damit das funktioniert, muss der ssh-client so konfiguriert werden, dass er "agent-forwarding" untestützt: Damit das funktioniert, muss der ssh-client so konfiguriert werden, dass er "agent-forwarding" untestützt:
  
 +  * /etc/ssh/ssh_config (sytemweit)
 +  * /home/user/.ssh/config (per user)
 +
 +<code>
 +Host *
 +      ForwardAgent yes
 +</code>
 +
 +Eine ausführliche Beschreibung findet sich hier:
 +
 +  * [[http://www.unixwiz.net/techtips/ssh-agent-forwarding.html|http://www.unixwiz.net/techtips/ssh-agent-forwarding.html]]
 +
 +==== Innerhalb von screen-sessions ====
 +
 +Hier steht was dazu:
 +
 +  * [[http://www.bootc.net/archives/2013/06/09/my-perfect-gnupg-ssh-agent-setup/|http://www.bootc.net/archives/2013/06/09/my-perfect-gnupg-ssh-agent-setup/]]
 +
 +Aber ab debian-wheezy sollte das out of the box funktionieren.
 +
 +==== ssh über mehrere Server (ForwardAgent) ====
 +
 +  * [[http://livecipher.blogspot.co.uk/2013/02/ssh-agent-forwarding.html|http://livecipher.blogspot.co.uk/2013/02/ssh-agent-forwarding.html]]
 +
 +Damit das funktioniert, muss der ssh-client so konfiguriert werden, dass er "agent-forwarding" untestützt:
  
   * /etc/ssh/ssh_config (sytemweit)   * /etc/ssh/ssh_config (sytemweit)
   * /home/user/.ssh/config (per user)   * /home/user/.ssh/config (per user)
  
-  Host * +<code> 
-        ForwardAgent yes+Host * 
 +      ForwardAgent yes 
 +</code>
  
 Eine ausführliche Beschreibung findet sich hier: Eine ausführliche Beschreibung findet sich hier:
  
-  * http://www.unixwiz.net/techtips/ssh-agent-forwarding.html+  * [[http://www.unixwiz.net/techtips/ssh-agent-forwarding.html|http://www.unixwiz.net/techtips/ssh-agent-forwarding.html]]
  
 ==== Innerhalb von screen-sessions ==== ==== Innerhalb von screen-sessions ====
Zeile 118: Zeile 174:
 Hier steht was dazu: Hier steht was dazu:
  
-  * http://www.bootc.net/archives/2013/06/09/my-perfect-gnupg-ssh-agent-setup/+  * [[http://www.bootc.net/archives/2013/06/09/my-perfect-gnupg-ssh-agent-setup/|http://www.bootc.net/archives/2013/06/09/my-perfect-gnupg-ssh-agent-setup/]]
  
 Aber mit debian-wheezy sollte das out of the box funktinieren. Aber mit debian-wheezy sollte das out of the box funktinieren.
  
 +===== Login in lokalen Linux-Rechner =====
 +
 +Die Linux-Pam und die verschiedenen Session-Manager können mit GnuPG-Card umgehen.
 +
 +  * [[http://www.schiessle.org/howto/poldi.php|http://www.schiessle.org/howto/poldi.php]]
 +
 +Die dort verwendeten Optionen für poldi-ctrl scheinen in der wheezy-Version noch nicht zu existieren. Folgendes Information hilft weiter:
 +
 +  * [[http://walter.silvergeeks.com/rechner/howto/how-to-anmeldung-mit-smart-card-oder-usb-token-am-lokalen-linux-system/|http://walter.silvergeeks.com/rechner/howto/how-to-anmeldung-mit-smart-card-oder-usb-token-am-lokalen-linux-system/]]
 +
 +==== Einrichten des Poldi-Moduls: ====
 +
 +(alle Kommandos als Root oder mit sudo)
 +
 +Das Packet muss installiert werden:
 +
 +<code>
 +apt-get install libpam-poldi
 +</code>
 +
 +<WRAP center round info 60%> Unter Debian Jessie findet poldi das Binary von scdaemon nicht mehr. Ein
 +
 +<code>
 +ln -s /usr/lib/gnupg2/scdaemon /usr/bin/scdaemon
 +</code>
 +
 +als Root schafft einfache Abhilfe. </WRAP>
 +
 +Ein
 +
 +<code>
 +poldi-ctrl -d
 +</code>
 +
 +testet, ob die Karte erkannt wird.
 +
 +Mit
 +
 +<code>
 +poldi-ctrl -s
 +</code>
 +
 +finden wir die Seriennummer der Karte heraus (''gpg –card-status''  würde auch funktionieren).
 +
 +Jetzt müssen wir unter /etc/poldi/localdb/users eine Kartei der User anlegen, für die die Authentifizierung mit der jeweiligen Karte eingerichtet werden soll. Z.B. mit:
 +
 +<code>
 +echo "`poldi-ctrl -s` USERNAME" | tee -a /etc/poldi/localdb/users
 +</code>
 +
 +Unter /etc/poldi/localdb/keys/ muss jetzt für jede Karte eine Datei mit der Seriennummer als Dateiname angelegt werden, die den public Key der Karte enthält. Das geht einfach mit:
 +
 +<code>
 +poldi-ctrl -s> serialno.txt
 +poldi-ctrl -k | tee -a /etc/poldi/localdb/keys/$(cat serialno.txt)
 +</code>
 +
 +Damit sollte Poldi fertig konfiguriert sein.
 +
 +==== Einrichten der Authentifizierung ====
 +
 +Nach der grundlegenden Einrichtung der Smartcard, kann das Pam-Poldi-Modul zur /etc/pam.d/common-auth hinzugefügt werden. Alle Authentifikationen, die auf die common-auth zurückgreifen (u.a. xscreensaver, sudo) können dann auch via smartcard authentifizieren. Wenn das Modul am Anfang der common-auth hinzugefügt wird und alle anderen Einträge bleiben, ist die Gnupg Card ein **zusätzliches**  Authentifizierungsmittel. Bitte immer testen, so lange noch eine offene Konsole verfügbar ist, um die Änderungen ggf. zu korrigieren. Sonst sperrt mensch sich leicht aus.
 +
 +<code>
 +--- a/pam.d/common-auth
 ++++ b/pam.d/common-auth
 +@@ -13,6 +13,8 @@
 + # pam-auth-update to manage selection of other modules.  See
 + # pam-auth-update(8) for details.
 +
 ++# with smartcard
 ++auth sufficient pam_poldi.so
 + # here are the per-package modules (the "Primary" block)
 + auth   [success=1 default=ignore]      pam_unix.so nullok_secure
 + # here's the fallback if no module succeeds
 +</code>