WIP: HowTo - Linux Nitrokey Login #133

Open
Jeybe wants to merge 2 commits from Jeybe/anoxinon-web-media:linux_login_nitrokey into master
  1. 6
      content/wiki/sicherheit/_index.md
  2. 84
      content/wiki/sicherheit/nitrokey_login_linux.md

6
content/wiki/sicherheit/_index.md

@ -0,0 +1,6 @@
---
title: Sicherheit
layout: wikipage
---

84
content/wiki/sicherheit/nitrokey_login_linux.md

@ -0,0 +1,84 @@
---
title: Linux Login mit Nitrokey
layout: wikipage
---
Man kann sich mit einer Smartcard wie dem [Nitrokey](https://nitrokey.com) bequem am eigenen Linux-Rechner anmelden. Die notwendigen Konfigurationsschritte sind folgend beschrieben. Wir beschreiben hier das Setup, um sich ausschließlich mit Nitrokey am Rechner anzumelden, wahlweise kann man es aber auch anpassen, um den Nitrokey als zweiten Faktor zu verwenden.
## PAM-Modul Poldi installieren
Der Linux-Login geschieht im normalfall via [PAM](https://wiki.archlinux.org/title/PAM). Dieses lässt sich mittels des Moduls [Poldi](https://gnupg.org/software/poldi/) um Smartcard-Unterstützung erweitern. Unter Debian und Ubuntu nennt sich das dafür zu installierende Paket `libpam-poldi` und kann zum Beispiel mit `sudo apt install libpam-poldi` installiert werden. Bei anderen Distributionen einfach mit dem Paketmanager nach "Poldi" suchen, dann wird man in den meisten Fällen fündig werden.
## Poldi konfigurieren
Als erstes muss Poldi konfiguriert werden, um für das eigene Userkonto den spezifischen Nitrokey mit dem spezifischen OpenPGP-Schlüssel für den Login abzufragen und zu erlauben.
### Application-ID des Nitrokeys herausfinden
Damit Poldi weiß, welche Smartcard verwendet werden soll, wird die Application-ID des Nitrokeys benötigt. Diese lässt sich im Terminal herausfinden:
```
$ gpg --card-status | grep Application
```
Sie hat das Format wie "D00600012401020000000000xxxxxxxx". Kopiere oder speichere dir die ID, du wirst sie noch benötigen.
### Nutzer:in und Nitrokey verknüpfen
Nun musst du Poldi sagen, zu welchem User der Nitrokey gehört bzw. welchen User der Nitrokey einloggen darf. Das kannst du in der Datei `/etc/poldi/localdb/users` konfigurieren, dort musst du eine Zeile hinzufügen (die Größer- und Kleinerzeichen weglassen!):
```
<Deine Application-ID> <Dein Username>
```
### OpenPGP-Schlüssel und Nitrokey verknüpfen
Nun muss Poldi wissen, welcher OpenPGP-Schlüssel auf dem Nitrokey gespeichert ist und zum Entsperren verwendet werden soll. Dafür muss der Konfigurationseintrag ausgelesen und unter `/etc/poldi/localdb/keys/<Deine Application-ID>` gespeichert werden:
```
$ gpg-connect-agent "/datafile /tmp/poldikey" "SCD READKEY --advanced OPENPGP.3" "/bye"
$ sudo mv /tmp/poldikey /etc/poldi/localdb/keys/<Deine Application-ID>
```
## PAM konfigurieren
**Wichtig:** Wenn bei PAM entwas fehlkonfiguriert wird, hast du dich ganz schnell aus deinem System ausgesperrt. Bevor du wie nachfolgend beschrieben die Konfiguration änderst, mache unbedingt eine Kopie der betroffenen Dateien und halte ein Live-OS auf einem USB-Stick bereit, um sie im Falle aller Fälle wiederherstellen zu können.
**Nun zum Eigentlichen:** PAM muss so konfiguriert werden, dass der Login via Smartcard/Nitrokey erlaubt wird. Dafür musst du die Datei `/etc/pam.d/common-auth` editieren. Nachfolgend ein Beispiel, wie diese auf einem normalen Debian-System ausschauen muss:
```
#
# /etc/pam.d/common-auth - authentication settings common to all services
#
# This file is included from other service-specific PAM config files,
# and should contain a list of the authentication modules that define
# the central authentication scheme for use on the system
# (e.g., /etc/shadow, LDAP, Kerberos, etc.). The default is to use the
# traditional Unix authentication mechanisms.
#
# As of pam 1.0.1-6, this file is managed by pam-auth-update by default.
# To take advantage of this, it is recommended that you configure any
# local modules either before or after the default block, and use
# pam-auth-update to manage selection of other modules. See
# pam-auth-update(8) for details.
# here are the per-package modules (the "Primary" block)
auth [success=2 default=ignore] pam_poldi.so
auth [success=1 default=ignore] pam_unix.so nullok_secure
# here's the fallback if no module succeeds
auth requisite pam_deny.so
# prime the stack with a positive return value if there isn't one already;
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around
auth required pam_permit.so
# and here are more per-package modules (the "Additional" block)
# end of pam-auth-update config
```
Wichtig ist die Zeile `auth [success=1 default=ignore] pam_unix.so nullok_secure`, das ist das PAM-Modul zum normalen Login an Linux mit Benutzer:innenname und Passwort. Darüber musst du die Zeile `auth [success=2 default=ignore] pam_poldi.so` einfügen. Damit kannst du dich mit dem Nitrokey einloggen, ohne dass du dein Passwort eingeben musst.
Beachte, dass die Nummer hinter `[success=` in der `pam_poldi.so` Zeile genau eines höher sein muss als in der `pam_unix.so` Zeile! Diese Nummer konfiguriert, wie viele Zeilen nach erfolgreicher Authentifizierung überprungen werden sollen. Wenn du hier die falsche Nummer einträgst, kann es sein, dass PAM in der Zeile `pam_deny.so` selbst nach erfolgreichem Login landet und dich daher nicht ins System lässt.
Loading…
Cancel
Save