Przejdź do głównej zawartości

Jeden post z tagiem "YubiKey"

Uwierzytelnianie dwuskładnikowe za pomocą klucza sprzętowego YubiKey.

Wyświetl wszystkie tagi

Kompleksowy przewodnik konfiguracji YubiKey na Fedora Linux

· 7 min aby przeczytać
Przemysław Majdak
Full-Stack Developer, Automation Engineer & Web Security Specialist

YubiKey to uniwersalne urządzenie bezpieczeństwa, które może znacznie zwiększyć ochronę systemu Linux. Ten przewodnik przedstawia wszystkie aspekty konfiguracji YubiKey na Fedora, od podstawowej instalacji po zaawansowane scenariusze użytkowania.

Wprowadzenie do YubiKey

YubiKey to fizyczny token bezpieczeństwa, który łączy w sobie kilka technologii uwierzytelniania:

  • FIDO U2F/FIDO2 - nowoczesne standardy uwierzytelniania
  • OTP (One-Time Password) - jednorazowe hasła
  • PIV (Personal Identity Verification) - przechowywanie certyfikatów i kluczy prywatnych
  • OpenPGP - szyfrowanie i podpisy cyfrowe
  • OATH - kompatybilność z TOTP/HOTP (Google Authenticator, itd.)

Ograniczenia pamięci YubiKey

Każdy moduł ma swoje limity przechowywania:1

  • OTP - nielimitowane (jeden sekret na klucz)
  • FIDO U2F - nielimitowane (jeden sekret na klucz)
  • FIDO2 - 25 poświadczeń
  • OATH - 32 poświadczenia
  • PIV - 24 certyfikaty X.509 z kluczami prywatnymi
  • OpenPGP - 3 klucze (szyfrowanie, podpisywanie, uwierzytelnianie)

Instalacja podstawowych pakietów

Dla wszystkich funkcji

# Podstawowe narzędzia YubiKey
sudo dnf install yubikey-manager yubikey-manager-qt

# Dla uwierzytelniania PAM (starsze klucze bez FIDO2)
sudo dnf install pam_yubico

# Dla uwierzytelniania FIDO U2F/FIDO2
sudo dnf install pam-u2f pamu2fcfg

# Dla obsługi OpenPGP/smartcard
sudo dnf install pcsc-lite

# Dla SSH z PKCS#11
sudo dnf install opensc

# GUI do personalizacji (starsze narzędzie)
sudo dnf install yubikey-personalization-gui

Uruchamianie usług

# Uruchomienie usługi smartcard
sudo systemctl enable --now pcscd

Konfiguracja uwierzytelniania systemowego (PAM)

Metoda 1: FIDO U2F/FIDO2 (zalecana dla nowych kluczy)

Krok 1: Rejestracja klucza

# Utworzenie katalogu
mkdir -p ~/.config/Yubico

# Rejestracja pierwszego klucza
pamu2fcfg > ~/.config/Yubico/u2f_keys

# Dodanie zapasowego klucza (zalecane!)
pamu2fcfg -n >> ~/.config/Yubico/u2f_keys

Krok 2: Konfiguracja plików PAM

Utwórz pliki konfiguracyjne w /etc/pam.d/:

# /etc/pam.d/u2f-required
#%PAM-1.0
auth required pam_u2f.so

# /etc/pam.d/u2f-sufficient
#%PAM-1.0
auth sufficient pam_u2f.so

Metoda 2: YubiCloud OTP (starsze klucze)

Krok 1: Rejestracja klucza

# Utworzenie katalogu
mkdir -p ~/.yubico

# Naciśnij YubiKey, aby uzyskać OTP - pierwsze 12 znaków to ID klucza
echo "fedora-user:cccccbcgebif" > ~/.yubico/authorized_keys

Krok 2: Konfiguracja PAM (wymaga API key od Yubico)2

# /etc/pam.d/yubikey-required
#%PAM-1.0
auth required pam_yubico.so id=[Your API Client ID] key=[Your API Client Key]

# /etc/pam.d/yubikey-sufficient
#%PAM-1.0
auth sufficient pam_yubico.so id=[Your API Client ID] key=[Your API Client Key]

Metoda 3: Challenge-Response (offline)

Krok 1: Konfiguracja YubiKey

# Aktywacja challenge-response w slocie 2 (wymaga dotyku)
ykman otp chalresp --generate --touch 2

# Rejestracja klucza dla użytkownika
ykpamcfg -2

Krok 2: Konfiguracja PAM

# /etc/pam.d/yubikey-required
#%PAM-1.0
auth required pam_yubico.so mode=challenge-response

# /etc/pam.d/yubikey-sufficient
#%PAM-1.0
auth sufficient pam_yubico.so mode=challenge-response

Konfiguracja konkretnych usług

Sudo z YubiKey

Opcja A: Wymaga hasła + YubiKey (2FA)

# Edytuj /etc/pam.d/sudo
sudo visudo /etc/pam.d/sudo

# Dodaj AFTER linii "auth substack system-auth":
auth include u2f-required

# lub yubikey-required dla OTP

Opcja B: Tylko YubiKey (1FA)

# Dodaj BEFORE linii "auth substack system-auth":
auth include u2f-sufficient

Konfiguracja cache sudo (rozwiązanie problemu z powtarzającym się żądaniem YubiKey):

# Edytuj sudoers
sudo visudo

# Dodaj na końcu pliku:
Defaults timestamp_timeout=15 # Cache na 15 minut
Defaults timestamp_timeout=-1 # Cache do końca sesji terminala
Defaults timestamp_type=global # Wspólny cache dla wszystkich terminali (opcjonalnie)

Login GDM/graficzny

Metoda authselect (zalecana)3

# Sprawdzenie aktualnego profilu
sudo authselect current

# Włączenie U2F dla profilu sssd
sudo authselect select sssd with-pam-u2f

# Lub dla profilu local
sudo authselect select local with-pam-u2f

# Zastosowanie zmian
sudo authselect apply-changes

Metoda manualna (edycja /etc/pam.d/gdm-password):

# Dodaj BEFORE "auth substack password-auth":
auth include u2f-sufficient

# Lub AFTER dla 2FA:
auth include u2f-required

Login konsolowy

# Edytuj /etc/pam.d/login
# Dodaj przed "auth substack system-auth":
auth include u2f-sufficient

SSH z YubiKey

Opcja A: FIDO2 SSH keys (nowoczesne)

# Generowanie klucza wymagającego obecności YubiKey
ssh-keygen -t ed25519-sk

# Generowanie klucza rezydentnego (przenośnego)
ssh-keygen -t ed25519-sk -O resident -O application=ssh:fedora -O verify-required

# Kopiowanie klucza publicznego na serwer
ssh-copy-id -i ~/.ssh/id_ed25519_sk.pub user@server

Opcja B: PIV/PKCS#11 (starsze klucze)

# Generowanie klucza w module PIV
ykman piv keys generate --algorithm ED25519 --pin-policy ONCE --touch-policy ALWAYS 9a public.pem

# Tworzenie certyfikatu
ykman piv certificates generate --subject "CN=OpenSSH" --hash-algorithm SHA384 9a public.pem

# Eksport klucza publicznego
ssh-keygen -D /usr/lib64/libykcs11.so -e

# Logowanie z PKCS#11
ssh -I /usr/lib64/libykcs11.so user@server

Konfiguracja OpenPGP/GPG

Instalacja i przygotowanie

# Instalacja wymaganych pakietów (jeśli nie zainstalowano wcześniej)
sudo dnf install pcsc-lite gnupg2

# Uruchomienie usługi
sudo systemctl enable --now pcscd

# Sprawdzenie połączenia z kartą
gpg --card-status

Podstawowa konfiguracja GPG

# Utwórz plik konfiguracyjny scdaemon
echo "disable-ccid" >> ~/.gnupg/scdaemon.conf

# Restart agenta GPG
gpg-connect-agent reloadagent /bye

Zmiana PIN-ów PIV

# Zmiana PIN-u użytkownika (domyślnie: 123456)
ykman piv access change-pin

# Zmiana PUK (domyślnie: 12345678)
ykman piv access change-puk

# Zmiana klucza zarządzania
ykman piv access change-management-key --generate --protect

Konfiguracja dotykania dla operacji OpenPGP

# Wymaganie dotyku dla podpisywania
ykman openpgp keys set-touch sig on

# Wymaganie dotyku dla szyfrowania
ykman openpgp keys set-touch dec on

# Wymaganie dotyku dla uwierzytelniania
ykman openpgp keys set-touch aut on

OATH/TOTP (Google Authenticator replacement)

Instalacja aplikacji

# Aplikacja desktopowa
sudo dnf install yubioath-desktop

# Lub użyj Yubico Authenticator z oficjalnej strony

Zarządzanie kontami TOTP

# Ustawienie hasła dla aplikacji OATH
ykman oath access change

# Zapamiętanie hasła (żeby nie pytało za każdym razem)
ykman oath access remember

# Dodanie konta TOTP
ykman oath accounts add google <TOTP_SECRET>

# Generowanie kodu
ykman oath accounts code google

# Lista wszystkich kont
ykman oath accounts list

# Usuwanie konta
ykman oath accounts delete google

Zaawansowane konfiguracje

Blokowanie ekranu po wyjęciu YubiKey

# Utwórz regułę udev w /etc/udev/rules.d/85-yubikey-lock.rules
ACTION=="remove", ENV{ID_BUS}=="usb", ENV{ID_MODEL_ID}=="0407", ENV{ID_VENDOR_ID}=="1050", RUN+="/usr/bin/loginctl lock-sessions"

# Przeładuj reguły
sudo udevadm control --reload

Konfiguracja różnych trybów dla różnych usług

Przykład: Password + YubiKey dla sudo, tylko YubiKey dla terminala

# /etc/pam.d/sudo - 2FA
auth substack system-auth
auth include u2f-required

# /etc/pam.d/login - 1FA
auth include u2f-sufficient
auth substack system-auth

Cache i timeout konfiguracja

# W /etc/sudoers (visudo):
Defaults timestamp_timeout=900 # 15 minut cache
Defaults passwd_timeout=5 # 5 sekund na wprowadzenie hasła
Defaults passwd_tries=3 # 3 próby wprowadzenia hasła

Rozwiązywanie problemów

Sprawdzanie statusu YubiKey

# Podstawowe informacje
ykman info

# Status wszystkich aplikacji
ykman --list

# Status karty OpenPGP
gpg --card-status

# Status FIDO2
ykman fido info

# Logi PAM
journalctl -f | grep pam

Typowe problemy

Problem: YubiKey nie jest rozpoznawany4

# Sprawdź czy zainstalowany pcsc-lite
sudo dnf install pcsc-lite
sudo systemctl restart pcscd

# Sprawdź uprawnienia
ls -la /dev/bus/usb/

Problem: GPG nie widzi YubiKey

# Sprawdź scdaemon
echo "disable-ccid" >> ~/.gnupg/scdaemon.conf
gpg-connect-agent "scd serialno" "scd learn" /bye

Problem: Sudo przy każdym użyciu wymaga YubiKey

# Ustaw timestamp_timeout w sudoers
echo "Defaults timestamp_timeout=900" | sudo tee -a /etc/sudoers

Backup i bezpieczeństwo

Konfiguracja zapasowego klucza

Zawsze konfiguruj drugi YubiKey jako backup:12

# Dla U2F - dodaj drugi klucz
pamu2fcfg -n >> ~/.config/Yubico/u2f_keys

# Dla OTP - dodaj ID drugiego klucza
echo "fedora-user:cccccbcgebif:dddddddddddd" > ~/.yubico/authorized_keys

# Dla SSH - wygeneruj klucze na obu urządzeniach
ssh-keygen -t ed25519-sk # Na pierwszym kluczu
ssh-keygen -t ed25519-sk # Na zapasowym kluczu

Testowanie konfiguracji

ZAWSZE testuj w drugim terminalu przed zamknięciem bieżącego!

# Test sudo w nowym terminalu
sudo echo "test"

# Test logowania w nowej sesji SSH
ssh localhost

# Test logowania GDM - zablokuj i odblokuj ekran

Podsumowanie

YubiKey oferuje wielopoziomową ochronę systemu Fedora Linux. Najważniejsze zalecenia:

  1. Zawsze konfiguruj zapasowy klucz - hardware token może się zepsuć lub zgubić
  2. Testuj każdą zmianę w osobnej sesji przed zamknięciem obecnej
  3. Używaj FIDO2 dla nowych kluczy (bezpieczniejsze i wygodniejsze)
  4. Konfiguruj cache sudo - unikniesz frustracji z ciągłym dotykaniem klucza
  5. Regularnie twórz kopie zapasowe konfiguracji PAM i plików autoryzacji

Dzięki odpowiedniej konfiguracji YubiKey może znacznie zwiększyć bezpieczeństwo bez nadmiernego wpływu na wygodę użytkowania. Kluczem jest znalezienie równowagi między bezpieczeństwem a praktycznością dla konkretnego środowiska i przypadku użycia.

Footnotes

  1. https://docs.fedoraproject.org/en-US/quick-docs/using-yubikeys/ 2

  2. https://discussion.fedoraproject.org/t/how-to-configure-yubico-key-for-system-login/154317 2

  3. https://devblog.jpcaparas.com/use-your-yubikey-as-a-system-level-authentication-pam-module-on-fedora-40-457ae7375254

  4. https://solenberg.dev/yubikey-setup/