Zum Inhalt

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

Der Zugriff auf den Git-Server soll mit einem SSH-Schlüsselpaar erfolgen, dass auf einem YubiKey hinterlegt ist. Damit muss für jede Verbindung mit dem Repository, sei es pull, get, push, etc. der Hardwaretoken am Client angesteckt sein.

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.

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 so lange auf den Server per SSH zugreifen so lange 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 zugriffsberechtigten 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

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 access rights and the repository exists.

Ohne 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

Gib mir gerne einen Kaffee ☕ aus ❗️

Wenn dir meine Beiträge gefallen und geholfen haben, dann kannst du mir gerne einen Kaffee ☕️ ausgeben.

Donation via PayPalDonation via LiberaPay

Donation via Bitcoin
Bitcoin Address: bc1qfuz93hw2fhdvfuxf6mlxlk8zdadvnktppkzqzj