Schritt 4: Zugriff auf Git-Server ausschließlich mit YubiKey möglich

In meinem letzten Beitrag habe ich beschrieben, wie man seinen eigenen Git-Server konfiguriert und einrichtet und darauf ein öffentliches bare-Git-Repository bereitstellt.
Schritt 3: Git Server konfigurieren und bare-Repository einrichten
Der Zugriff erfolgt dabei über ein ausgetausches SSH-Schlüsselpaar, der öffentlicher Schlüssel wurde in der „authorized_key-Datei“ des Users „git“ abgelegt.

In meinem Blog habe ich bereits öfters Beiträge über den YubiKey veröffentlicht. Nun ist es auch möglich den Zugriff auf den Server mit einem YubiKey weiter abzusichern und damit jeden Commit nur mit diesem Hardware-Token zu erlauben.

Das Ganze funktioniert dann so:

  1. Auf dem YubiKey wird ein privater OpenGPG-Schlüssel hinterlegt.
  2. Der öffentliche Schlüssel wird geteilt und kann auch auf einem OpenGPG-Server für alle einsehbar hinterlegt werden.
  3. Der öffentliche OpenGPG-Schlüssel kann „umgemodelt“ werden und für die Anmeldung an einem Linux-System verwendet werden, d.h. es wird kein klassisches SSH-Schlüsselpaar mehr benötigt.
  4. Die Anmeldung per SSH am Server ist nur noch mit dem Hardwaretoken erlaubt, die Passworteingabe für die Benutzer wird komplett deaktiviert.
  5. Die Anmeldung und der Git Clone, Commit, Push, Pull, etc. funktioniert nur noch mit dem angeschlossenen YubiKey am Git-Client.

YubiKey vorbereiten

Auf der Seite von itemis.com gibt es eine sehr gute Anleitung zum einrichten eures Windows-Rechners und des YubiKey. Ich finde die Blogeinträge gut nachvollziehbar und auch umsetzbar. Am Ende habt ihr auf eurem Windows-PC die Tools, um euch mit einem Hardwaretoken an Remote-Servern anzumelden. Des weiteren sollte der YubiKey entsprechend für die passwortlose Anmeldung eingerichtet sein.
Also schaut euch die paar Blogeinträge auf ➡ https://blogs.itemis.com/de/openpgp-im-berufsalltag-teil-1-was-ist-das an, bevor ihr weitermacht.

Anzeige/Werbung

Git-Server konfigurieren

Nachdem eurer GPG-Schlüssel und YubiKey eingerichtet sind, kann der Server für die Anmeldung via Hardwaretoken konfiguriert werden.

Geht zur Datei „/etc/ssh/sshd_config„.
Bei mir sieht die Datei so aus (Ich habe nur die aktiven Abschnitte hier eingefügt):

# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication yes

# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication.  Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'.
UsePAM yes

#AllowAgentForwarding yes
#AllowTcpForwarding yes
#GatewayPorts no
X11Forwarding yes
#X11DisplayOffset 10
#X11UseLocalhost yes
#PermitTTY yes
PrintMotd no
#PrintLastLog yes
#TCPKeepAlive yes
#PermitUserEnvironment no
#Compression delayed
#ClientAliveInterval 0
#ClientAliveCountMax 3
#UseDNS no
#PidFile /var/run/sshd.pid
#MaxStartups 10:30:100
#PermitTunnel no
#ChrootDirectory none
#VersionAddendum none

# no default banner path
#Banner none

# Allow client to pass locale environment variables
AcceptEnv LANG LC_*

# override default of no subsystems
Subsystem       sftp    /usr/lib/openssh/sftp-server

# Example of overriding settings on a per-user basis
#Match User anoncvs
#       X11Forwarding no
#       AllowTcpForwarding no
#       PermitTTY no
#       ForceCommand cvs server

#Laesst nur Mitglieder der Gruppe "sshadmin" eine SSH-Verbindung herstellen
AllowGroups sshadmin

#Erlaubt die Benutzung von pub keys
PubkeyAuthentication yes

#Passwort-Eingabe ist beim Anmelden 
# no = nicht erforderlich, SSH-Anmeldung ist nur noch mit SSH-Schlüssel moeglich
# yes = erforderlich, SSH-Anmeldung ist mit Passwort moeglich
PasswordAuthentication no
PermitEmptyPasswords no

# YubiKey Anmeldung
AuthenticationMethods publickey

Die Zugriffsrechte auf die Datei sollten von euch geprüft und ggf. angepasst werden:

sudo chown root:root
sudo chmod 600

ACHTUNG!
In dieser Konfiguration wird nur der Mitglieder der Gruppe „sshadmin“ erlaubt sich via SSH an dem Server anzumelden.
–> Alle Benutzer und Git-Benutzer müssen der Gruppe hinzugefügt werden!

Die neue Gruppe legt ihr so an:

sudo groupadd -r sshadmin

Benutzer fügt ihr der Gruppe mit dem Befehl hinzu:

sudo usermod -a -G sshadmin benutzername

Benutzer entfernt ihr aus der Gruppe, falls erforderlich mit dem Befehl:

sudo deluser benutzername sshadmin

Die Gruppenzugehörigkeit der Benutzer zu sshadmin könnt ihr einfach in der Datei „/etc/group“ prüfen.

cat /etc/group

Der Vorteil dieses Vorgehens ist eine zusätzliche Sicherheit. Benutzer können solange auf den Server per SSH zugreifen solange sie der Gruppe „sshadmin“ angehören. Werden die Benutzer aus der Gruppe entfernt, ist keine SSH-Anmeldung mehr möglich, auch wenn noch ein gültiger SSH-Schlüssel in der „authorized_keys„-Datei im Home-Verzeichnis des Users gespeichert ist.
Natürlich ist andersherum darauf zu achten, dass für die zugriffberechtigten Benutzer ein gültiger Schlüssel in der „authorized_keys“ hinterlegt ist. Fehlt der Schlüssel kommt die Meldung:

„No supported authentication methods available (server sent: publickey)“

Fehlermeldung bei Anmeldung
Fehlermeldung bei Anmeldung

Nach den Ganzen Anpassung ist der SSH-Dienst neu zu starten. Ab diesem Zeitpunkt ist nur noch die Anmeldung mit dem YubiKey unf für die freigeschalteten Benutzer möglich. Eine lokale Anmeldung für die Benutzer ist weiterhin möglich, solang sie als aktive Benutzer geführt werden. Also sicherheitshalber eine SSH-Sitzung offen lassen, damit ihr weiterhin auf den Server zugreifen könnt, sollte es ein Konfigurations-Problem geben. 😉

sudo systemctl restart sshd

Git und YubiKey

Nun da alles eingerichtet ist, sieht das Ganze bei einer Anmeldung an Git dann so aus. Es wird der „push„-Befehl ausgeführt und je nachdem, ob der YubiKey verfügbar ist oder nicht wird der Zugriff erlaubt.

Ohne YubiKey

Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct acces rights and the repository exists.

Ohne YubiKey
Ohne YubiKey

Mit YubiKey

Mit YubiKey
Mit YubiKey

Nach der Eingabe eurer persönlichen PIN für den YubiKey erhaltet ihr Zugriff auf das Git-Repository.

Zugriff auf Git Repository
Zugriff auf Git Repository

Meine verwendete Hardware

Yubico - YubiKey 5C NFC - Two Factor Authentication USB...
Angebot Yubico Y-291 Yubikey 5Ci Schwarz

(**) Produktpreise und -verfügbarkeit sind zum angegebenen Datum / Uhrzeit korrekt und können sich ändern. Alle Preis- und Verfügbarkeitsinformationen auf https://www.amazon.de/ zum Zeitpunkt des Kaufs gelten für den Kauf dieses Produkts.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.