en This article was written in german language. Click to Auto-Translate to English

Ich bin vor einigen Monaten auf Linux, genauer gesagt Ubuntu Studio umgestiegen.

Leider hänge ich zwangsläufig an KDE Plasma, da ich mit einer Dockingstation arbeite (Grüße gehen raus an IGEL Technologies – Ich fühle euren Schmerz. Die Personen, die ich meine, wissen, was ich meine). Aus diesem Grund sieht das Ergebnis dieses Beitrags etwas fuzmmelig aus. Aber das ist ein anderes Thema.

Nach dem Umstieg wird man als Windows-User erst mal mit fast täglichen Updates erschlagen. Fast jeden Tag meldet sich Discover und möchte, dass ich Updates freigebe. Dann vergess ich Discord vorher zu schließen, snap bricht ab.

Ich schließe also Discord und klicke den Button erneut. Diesmal ist Thunderbird “der böse”, der noch läuft. Wir versuchens also nochmal.

An dieser Stelle musste ich bereits 4 mal mein Kennwort eingeben. Bei Windows war das ein simples “jaja mach ruhig” in Form eines Buttons bei der UAC-Abfrage. Bei einem Standard Ubuntu Setup hingegen muss ich eben jedes Mal mein KEnnwort eingeben. Das nervt.

Ein Lied von Quality of Life und Security

Man könnte nun PAM so konfigurieren, dass Polkit – was für die GUI-Abfragen zuständig ist – und sudo keine Credential-Eingabe mehr benötigen. Cool oder? Ist dann wie unter Windows. Die Frage kommt und ich klicke einfach auf OK.

Das Problem dabei ist, dass unser “KDE Polkit Agent” sich nicht gegen automatisierte Eingaben wehren kann. Wenn eine potentielle Malware also ein simples “Enter” 0,2 Sekunden nach Anfrage der Admin-Rechte absetzt, hat man die Sicherheitsabfrage bereits erfolgreich umgangen.

Unter Windows ist das nicht so ein großes Problem, da Microsoft mit der UAC auch den “geschützten Desktop” eingeführt hat. Die UAC-Dialoge werden vom normalen Desktop entkoppelt. In Standardkonfiguration erkennbar an dem abgedunkelten Hintergrund.

Die Lösung

Ich besitze einen Yubikey und eine kleine Armee von Mini-FIDO2-Tokens. Es wäre doch super, wenn ich den Klick auf OK einfach auf eine geschützte Hardware-Taste legen könnte.

Etwas Recherche später bin ich über ein U2F-Modul für PAM gestolpert und der Plan war fertig.

Das Ziel ist in meinem Fall keine 2-Faktor-Authentifizierung, sondern einfach das Passwort für Admin-Sicherheitsabfragen in einer laufenden Session durch einen simplen Tastendruck am Token zu ersetzen. Das klappt tatsächlich sehr gut und sollte weitestgehend unabhängig vom eingesetzten Derivat, Version und Desktopumgebung sein. Evtl muss man beim Polkit-Teil Kleinigkeiten anpassen.

Es gibt jedoch drei Haken, die ich euch nicht vorenthalten möchte:

  1. Die Konfiguration der Tokens muss als root erfolgen (sudo). Es kann also nicht einfach ein normaler User einen neuen Token anlernen wenn er den dazugehörigen Befehl nicht per sudo ausführen darf. Das zu dürfen hingegen ermöglicht dem User auch seinen Token für einen anderen User zu hinterlegen. Es schwächt also ein eventuell komplexes sudo-setup.
    In meinem Fall aber kein Problem, es geht ja konkret um meinen eigenen PC an dem nur ich diese Rechte besitze.
  2. Es ist nicht möglich, eine sudo Freigabe mit STRG+C abzubrechen. Man muss dafür den Token ziehen.
  3. Es sieht in der KDE GUI etwas gewöhnungsbedürftig aus, weil der Polkit-Agent von KDE der Inbegriff von unflexibel ist.

Installation der Software

Das Unterfangen ist tatsächlich unkompliziert. Man braucht gerade einmal zwei Pakete:

sudo apt install libpam-u2f pamu2fcfg

Hier geben wir dann auch im Idealfall das letzte Mal das Kennwort für sudo ein :=)

Das erste Paket ist das erwähnte PAM-Modul, das andere ein Konfigurations-Tool um den Token anzulernen.

Token registrieren

Bevor wir den Token registrieren können, legen wir ein Konfigurationsverzeichnis und eine Datei für die Tokens an:

mkdir -p /etc/u2f-mappings
touch /etc/u2f-mappings/u2f_keys
chmod -R 644 /etc/u2f-mappings
chown root:root -R /etc/u2f-mappings

Danach können die Tokens registriert werden – Wichtig ist dabei, daen Befehl als der jeweilige user auszuführen (also kein sudo), dem der Token am Ende auch gehört:

FIDO-Stick einstecken und diesen Befehl ausführen:

pamu2fcfg >> /etc/u2f-mappings/u2f_keys

Der Stick sollte blinken. Taste drücken und das pamu2fcfg-Tool sollte sich erfolgreich beenden.

PAM für sudo konfigurieren

Mit nano /etc/pam.d/sudo die Konfigurationsdatei für die sudo-Authentifizierung öffnen und wie folgt anpassen:

#%PAM-1.0

# Set up user limits from /etc/security/limits.conf.
auth [success=1 default=ignore] pam_sudo.so
auth sufficient pam_u2f.so authfile=/etc/u2f-mappings/u2f_keys cue [cue_prompt=Bitte berühren Sie Ihren Sicherheits-Token zur Freigabe, oder entfernen Sie ihn, um abzubrechen.]

session    required   pam_limits.so

session    required   pam_env.so readenv=1 user_readenv=0
session    required   pam_env.so readenv=1 envfile=/etc/default/locale user_readenv=0

@include common-auth
@include common-account
@include common-session-noninteractive

Wichtig sind hier die beiden “auth”-Zeilen am, Anfang.

Jetzt kann man ein neues Terminal als User öffnen und dort einmal sudo verwenden. Z.B. mittels sudo ls -al /root/

Hat alles geklappt, sieht das Ergebnis so aus und spricht den FIDO-Token an:

Zur Kontrolle: Ein sudo whoami direkt nach obigem Befehl sollte nun “root” liefern ohne nochmal den Token abzufragen.

PAM für Polkit (GUI-Abfragen) konfigurieren

Bevor wir PAM konfigurieren müssen wir Polkit erlauben, auf USB-Geräte zuzugreifen. Hierfür führen wir den Befehl systemctl edit polkit-agent-helper@.service aus und fügen dann den nachfolgenden Textblock ein:

[Service]
PrivateDevices=no
DevicePolicy=auto
DeviceAllow=

Die Änderungen Speichern. Systemd sollte nun die Settings für Polkit reloaden.

Als letzten Schritt können wir nun wieder PAM konfigurieren. Wir müssen hierfür im Regelfall eine neue Konfig-Datei anlegen.
nano /etc/pam.d/polkit-1

Hier passen wir die Konfiguration dann wie folgt an:

#%PAM-1.0
auth sufficient pam_u2f.so authfile=/etc/u2f-mappings/u2f_keys cue [cue_prompt=Bitte berühren Sie Ihren Sicherheits-Token oder entfernen Sie ihn, um abzubrechen. (Keine Passworteingabe nötig)]
@include common-auth
account include common-account
password include common-password
session include common-session

Nach dem Speichern lädt PAM die Konfiguration automatisch. Wenn wir nun bspw. den KDE Partitionsmanager starten, sollte der Admin-Dialog so aussehen:

Der Text in der farbigen Umrandung ist jener Text, den wir in PAM konfiguriert haben. Dieser ist frei anpassbar. Leider wird das Passwortfeld hier trotzdem angezeigt, funktioniert aber nicht.

Will man nun ohne Token diesen Dialog freigeben, muss man den Token einfach nur abziehen bevor man die Admin-Aktion ausführt. Der Dialog öffnet sich dann ohne die farbige Box und akzeptiert das Passwort wie eh und je.

Fazit

Haben alle Tests geklappt (ja, auch die Falback-Tests mit gezogenen Stick!), kann das Root-Terminal wieder beendet werden. Ab sofort braucht es nur noch einen “Fingertipp” statt einem 20-Zeichen-Passwort (das wir ja alle nutzen, stimmts?).

Als weiterführenden Tipp könnte man noch versuchen, den Polkit agent z.B. von MATE zu verwenden. Mir persönlich reicht es so, wie es aktuell konfiguriert ist, daher habe ich das nicht weiter verfolgt.

Falls mit einem anderen Polkit-Agent Probleme auftreten, wäre ein erster Schritt in der PAM-Konfig alles nach “cue” (incl cue selbst) wegzulassen.

Was haltet ihr von dieser Idee und Umsetzung? Habt ihr es nachgebaut? Welchen Agent nutzt ihr?

AI-Disclosure: Das Titelbild wurde mit einem KI-Modell generiert.