W redakcji. Artykuł jest wersją roboczą, nie jest jeszcze wersją finalną i może ulec zmianie.
Stan na 20 października 2026 r.: Proxmox VE 9.2 (pve-manager 9.2.21, libpve-access-control 9.1.2, proxmox-widget-toolkit 5.2.10) na Debianie 13.7, w maszynie wirtualnej pve-lab-01 na hoście labowym bm-lab-01. Logowanie z kluczem sprawdziliśmy w Google Chrome 155.0.8059.84 z wirtualnym kluczem oraz własnym emulatorem klucza sprzętowego, który wysyła do API Proxmoxa te same zapytania co panel. Nazwy menu, pól i przycisków podajemy po angielsku, tak jak w panelu tej wersji. Konta ab@pve, cd@pve i ef@pve są przykładowe.
W tym artykule zakładamy w Proxmox VE grupę proxmox-admins z jednym uprawnieniem Administrator na / i trzy konta administratorów. Każde konto dostaje klucz YubiKey jako drugi składnik logowania, czyli TFA (ang. Two-Factor Authentication). Klucz działa przez WebAuthn (ang. Web Authentication), standard logowania kluczem sprzętowym w przeglądarce. Na koncie root@pam rejestrujemy klucze wszystkich trzech administratorów i 10 jednorazowych kodów odzyskiwania. Pokazujemy też, dlaczego WebAuthn działa tylko pod jedną nazwą panelu z zaufanym certyfikatem: pod adresem IP panel zgłasza brak drugiego składnika. Opisujemy, czego Proxmox nie wymusza i co każdy administrator może zrobić z kontem root@pam.
Model kont administratorów Proxmox VE: grupa proxmox-admins i root@pam jako konto awaryjne
Proxmox VE rozróżnia konta po realmie, czyli źródle kont. W oknie logowania widać dwa domyślne realmy. Proxmox VE authentication server obsługuje konta @pve, których hasła przechowuje klaster. Linux PAM standard authentication obsługuje konta @pam, czyli konta Linuksa na węźle, sprawdzane przez PAM (ang. Pluggable Authentication Modules). root@pam to linuksowy root węzła: tego konta nie da się usunąć, a w Proxmoxie ma wszystkie uprawnienia.
Administratorzy pracują na osobnych kontach @pve. W logu zadań każda operacja ma wtedy nazwę konta, które ją wykonało, na przykład UPID:pve-lab-01:...:vncshell::ab@pve:, a nie wspólne root@pam. root@pam zostaje kontem awaryjnym: służy do kilku operacji zastrzeżonych dla roota i do wejścia do panelu, gdy konta osobiste nie działają.
| Konto | Do czego służy | Drugi składnik |
|---|---|---|
ab@pve, cd@pve, ef@pve | codzienna praca; rola Administrator przez grupę proxmox-admins | własny YubiKey; zapas: drugi klucz albo kody odzyskiwania |
root@pam | konto awaryjne i operacje zastrzeżone dla roota | YubiKey każdego z trzech administratorów oraz 10 kodów odzyskiwania w sejfie |
Uprawnienia nadajemy grupie, nie kontom: jeden wpis ACL (ang. Access Control List) ze ścieżką /, rolą Administrator i włączoną propagacją. Tak zaleca dokumentacja Proxmox VE w sekcji o grupach: „Groups are the preferred way to organize access permissions”. Dokumentacja online w dniu pisania odpowiada pakietowi pve-docs 9.2.13, tej samej wersji co w labie. W teście każde z trzech kont miało dzięki temu wpisowi wszystkie 47 uprawnień roli Administrator na / i na każdej ścieżce niżej, także na maszynie, której jeszcze nie było.
Jak działa logowanie kluczem YubiKey w Proxmox VE: WebAuthn od hasła do biletu
YubiKey obsługuje WebAuthn przez FIDO2 (ang. Fast IDentity Online), zestaw standardów FIDO Alliance. Stronę przeglądarki opisuje specyfikacja Web Authentication organizacji W3C (ang. World Wide Web Consortium). W WebAuthn serwer nie zna żadnego sekretu klucza. Przy rejestracji YubiKey tworzy nową parę kluczy dla tego serwisu i tego konta, a serwer zapisuje tylko klucz publiczny. Przy logowaniu klucz podpisuje losowe wyzwanie serwera, a serwer sprawdza podpis. Ten przebieg prześledziliśmy w labie dla konta ab@pve i panelu otwartego pod adresem https://pve-lab-01.pve.lab:8006.
Rejestracja klucza: co zapisuje serwer, a co YubiKey
- Panel wysyła
POST /api2/json/access/tfa/ab@pvez typemwebauthn, opisem i hasłem konta. Bez hasła serwer odpowiada błędempassword is required to modify user. - Serwer zwraca wyzwanie rejestracji z polami: identyfikator serwisu
rp.id=pve-lab-01.pve.lab, kontoab@pve, algorytmy podpisu ES256 (krzywa eliptyczna P-256) i RS256 (RSA),attestation: none,userVerification: discouraged,residentKey: discouragedi 5 minut na odpowiedź. - Przeglądarka przekazuje wyzwanie do klucza. Po dotknięciu YubiKey tworzy nową parę kluczy związaną z
pve-lab-01.pve.labi odsyła klucz publiczny oraz identyfikator poświadczenia (ang. credential). - Panel odsyła odpowiedź drugim
POSTna ten sam adres, a serwer zapisuje klucz publiczny i identyfikator w/etc/pve/priv/tfa.cfg.
userVerification: discouraged oznacza, że wystarczy dotknięcie klucza; PIN FIDO2 nie jest potrzebny. residentKey: discouraged oznacza klucz nierezydentny, więc rejestracja nie zajmuje miejsca na passkeys w pamięci YubiKey. Ten sam fizyczny YubiKey zarejestrowany na ab@pve i na root@pam ma dwa niezależne poświadczenia. Poświadczenie z konta ab@pve nie loguje na root@pam; w teście serwer odpowiedział 401.
Logowanie: półbilet, wyzwanie i podpis klucza
- Przeglądarka wysyła login i hasło (
POST /api2/json/access/ticket). Proxmox sprawdza hasło w realmiepve. Ponieważ konto ma wpis WebAuthn, zamiast pełnego biletu wydaje półbilet zaczynający się odPVE:!tfa!. W półbilecie jest wyzwanie: losowychallenge,rpId=pve-lab-01.pve.labi listaallowCredentialsz identyfikatorami kluczy zarejestrowanych na tym koncie. Zapytanie API z półbiletem kończy się odpowiedzią 401. - Panel otwiera okno „Second login factor required” i wywołuje WebAuthn w przeglądarce. Przeglądarka sprawdza, czy
rpIdpasuje do adresu strony i czy certyfikat jest poprawny. - Po dotknięciu YubiKey podpisuje kluczem prywatnym poświadczenia skrót
rpId, flagi, licznik użyć i skrót danych klienta z wyzwaniem i adresem strony. Klucz prywatny nie opuszcza YubiKey. - Panel wysyła podpis razem z półbiletem. Serwer sprawdza podpis kluczem publicznym z rejestracji, wyzwanie, adres strony i identyfikator serwisu, a po sukcesie wydaje pełny bilet.
W tym przebiegu są trzy miejsca awarii. Klucz innej osoby nie ma żadnego identyfikatora z allowCredentials, więc przeglądarka nie dostanie podpisu; wymuszony obcy podpis serwer odrzucił w teście kodem 401. Inny adres panelu niż zapisany identyfikator serwisu blokuje WebAuthn jeszcze przed oknem klucza; pokazujemy to w następnym rozdziale. Utrata wszystkich zarejestrowanych kluczy blokuje konto, jeśli nie ma ono zapasowego składnika.
Nazwa panelu i zaufany certyfikat: warunek działania WebAuthn w Proxmox VE
Jedna nazwa panelu dla wszystkich administratorów
Identyfikator serwisu w WebAuthn to nazwa domenowa. Proxmox zapisuje ją w polu ID ustawień WebAuthn, a adres strony (ang. origin) bierze z adresu, pod którym otwarto panel. W labie z ID = pve-lab-01.pve.lab serwer proponował klucz wyłącznie pod nazwą pve-lab-01.pve.lab, niezależnie od portu. Pod https://localhost:8006 (tunel SSH), pod adresem IP węzła i pod krótką nazwą pve-lab-01 serwer w ogóle nie dodał WebAuthn do wyzwania. Panel pokazał wtedy „No second factor left! Please contact an administrator!”, a w dzienniku węzła pojawiły się wpisy rp_id is not an effective_domain of rp_origin i webauthn error: failed to begin webauthn context instantiation.
Dlatego przed rejestracją pierwszego klucza ustalamy jedną pełną nazwę panelu, np. pve1.example.pl, i wszyscy administratorzy otwierają panel tylko pod nią. Pola ID nie zmieniamy później: panel ostrzega przy edycji, że „Changing the ID breaks existing WebAuthn TFA entries”. Klastra nie testowaliśmy. Ustawienia WebAuthn mają opcję allow-subdomains, domyślnie włączoną („Whether to allow the origin to be a subdomain, rather than the exact URL”).
Zaufany certyfikat dla panelu: Let's Encrypt albo własny urząd certyfikacji
Chrome 155 pozwala użyć prawdziwego klucza w WebAuthn tylko na stronie z poprawnym certyfikatem. Regułę widać w funkcji IsSecurityLevelAcceptableForWebAuthn w pliku chrome_content_browser_client.cc (tag 155.0.8059.84, commit 5869fe3135, 14 października 2026). Wyjątki to localhost, flaga --ignore-certificate-errors i polityka firmowa AllowWebAuthnWithBrokenTlsCerts. Panel Proxmoxa przypomina o tym przy ustawieniach WebAuthn: „WebAuthn requires using a trusted certificate”. Domyślny certyfikat węzła wystawia urząd certyfikacji klastra, któremu przeglądarki nie ufają.
Certyfikat dla nazwy panelu ustawiamy w panelu na jeden z dwóch sposobów. Pierwszy to Let's Encrypt przez ACME (ang. Automatic Certificate Management Environment), protokół automatycznego wydawania certyfikatów opisany w RFC 8555:
- Datacenter → ACME → Accounts → Add. W oknie Register Account podajemy Account Name, E-Mail i ACME Directory (Let's Encrypt), akceptujemy Terms of Services i zatwierdzamy.
- <węzeł> → System → Certificates → w części ACME: Add, Challenge Type i Domain z nazwą panelu.
- W Using Account wybieramy konto z kroku 1 i klikamy Order Certificates Now.
Tej drogi nie testowaliśmy, bo lab nie ma publicznej nazwy. Wymagania wyzwania HTTP i wtyczek DNS opisuje rozdział Certificate Management w dokumentacji Proxmox VE. Drugi sposób to własny certyfikat, na przykład z wewnętrznego urzędu certyfikacji, któremu ufają komputery administratorów: <węzeł> → System → Certificates → Upload Custom Certificate.
Konfiguracja WebAuthn, grupy proxmox-admins i kont @pve w panelu Proxmox VE
Logujemy się jako root (Realm: Linux PAM standard authentication) pod docelową nazwą panelu. Kolejność ma znaczenie: ustawienia WebAuthn muszą istnieć, zanim ktokolwiek zarejestruje klucz.
- Ustawienia WebAuthn. Datacenter → Options → zaznaczamy WebAuthn Settings → Edit → Auto-fill → OK. Auto-fill wpisuje do pól Name i ID nazwę z paska adresu, więc przed kliknięciem sprawdzamy, czy pasek pokazuje docelową nazwę. Origin zostawiamy puste: Proxmox weźmie wtedy adres strony z zapytania. Po zapisaniu wiersz WebAuthn Settings pokazuje wartości
rpiidz nazwą panelu, a w/etc/pve/datacenter.cfgpojawia się linia zaczynająca się odwebauthn:. - Grupa. Datacenter → Permissions → Groups → Create → Name:
proxmox-admins→ Create. - Uprawnienie dla grupy. Datacenter → Permissions → Add → Group Permission: Path
/, Groupproxmox-admins, RoleAdministrator, zaznaczone Propagate → Add. Lista Permissions pokazuje potem wpis z Path/, grupą@proxmox-adminsw kolumnie User/Group/API Token i roląAdministrator. - Konta. Datacenter → Permissions → Users → Add: User name
ab, Realm Proxmox VE authentication server, Groupproxmox-admins→ Add. To samo dlacdief. Pola hasła zostawiamy puste: panel na to pozwala (dla realmupvewymaga tylko minimum 8 znaków, jeśli hasło jest podane), a każdy ustawi swoje hasło sam.
Zmiany cofamy w tych samych miejscach: konto, grupę i wpis uprawnień usuwa przycisk Remove na liście. Usunięcie grupy kasuje też jej wpisy ACL. Ustawień WebAuthn nie usuwa się z panelu; robi to polecenie pvesh set /cluster/options --delete webauthn uruchomione na węźle jako root.
Hasło i rejestracja klucza YubiKey na koncie administratora Proxmox VE
Hasło konta @pve ustawiane przez samego właściciela
Konto @pve bez hasła nie zaloguje się wcale. Hasło najprościej ustawić przy wspólnym spotkaniu, razem z rejestracją kluczy na root@pam. W sesji roota otwieramy Datacenter → Permissions → Users, zaznaczamy konto i klikamy Password. Właściciel konta sam wpisuje hasło w pola New Password i Confirm New Password i zatwierdza, więc nikt inny go nie poznaje. Gdy hasło zmienia administrator inny niż root, okno pyta też o Your Current Password, czyli hasło osoby zalogowanej.
Hasło nie trafia do linii poleceń. Polecenie pveum user add ... --password ... uruchomione przez sudo zapisuje całą linię polecenia, razem z hasłem, w dzienniku systemu. Jeśli hasło ustawiamy na węźle, robimy to interaktywnie: pveum passwd ab@pve pyta dwa razy („Enter new password”, „Retype new password”) i nie przyjmuje hasła w argumencie.
Rejestracja YubiKey w Two Factor: Add, WebAuthn, Register Webauthn Device
Każdy administrator robi to na swoim komputerze, z własnym kluczem w porcie USB.
- Otwieramy
https://pve1.example.pl:8006, czyli pełną nazwę z rozdziału o nazwie panelu, i logujemy się: User nameab, Realm Proxmox VE authentication server. - Jeśli hasło wpisywał ktoś inny, zmieniamy je: menu konta w prawym górnym rogu → Password.
- Menu konta → TFA. Panel otwiera Datacenter → Permissions → Two Factor. Klikamy Add → WebAuthn i wypełniamy Description (właściciel i numer seryjny klucza, np.
YubiKey ab, nr 12345678) oraz Verify Password (hasło konta). Klikamy Register Webauthn Device i dotykamy klucza. - Na liście Two Factor pojawia się wpis typu WebAuthn z naszym opisem i zaznaczonym Enabled.
Zapasowy drugi składnik: drugi YubiKey albo kody odzyskiwania
Konto z jednym kluczem traci drugi składnik razem z kluczem. Zapas dodajemy od razu. Pierwsza możliwość to drugi YubiKey: powtarzamy rejestrację z innym opisem. Druga to kody odzyskiwania: Add → Recovery Keys → Verify Password, a po wygenerowaniu Copy Recovery Keys albo Print Recovery Keys i przechowanie kodów w menedżerze haseł lub w sejfie. Bez zapasu zgubiony klucz usuwa root, a do rejestracji nowego klucza konto działa na samym haśle.
Test logowania: Logout i ponowne logowanie. Po haśle panel otwiera okno „Second login factor required”; dotykamy klucza i wchodzimy do panelu. Klucz innej osoby nie zaloguje na to konto.
Klucze wszystkich administratorów na root@pam: rejestracja w jednej sesji roota
Klucz do root@pam może dodać tylko sesja zalogowana jako root@pam. Administrator z rolą Administrator dostał w teście odmowę (403) przy dodawaniu, wyłączaniu i usuwaniu kluczy roota oraz przy zmianie jego hasła. Wynika to z kodu funkcji reauth_user_for_user_modification w RPCEnvironment.pm (libpve-access-control 9.1.2, commit dff26b4586, 17 września 2026). Po dodaniu pierwszego klucza root wymaga już klucza przy logowaniu, dlatego wszystkie klucze rejestrujemy w jednej sesji: trzy osoby przy jednym komputerze, każda ze swoim kluczem.
- Logujemy się jako
root, Realm Linux PAM standard authentication. - Datacenter → Permissions → Two Factor → Add → WebAuthn: User
root@pam, DescriptionYubiKey ab, nr 12345678→ Register Webauthn Device. Klucza dotyka właściciel,ab. Pola hasła dlaroot@pamnie ma, bo panel je ukrywa. - Powtarzamy krok 2 dla kluczy
cdiefw tej samej sesji. Serwer wysyła do przeglądarki listę już zarejestrowanych kluczy, więc ten sam YubiKey nie zostanie zapisany dwa razy. - Logout i test: każda z trzech osób loguje się jako
rootswoim kluczem. W teście wyzwanie roota miało trzy pozycje wallowCredentialsi każdy z trzech kluczy otwierał sesję.
Kody odzyskiwania root@pam w sejfie
W tej samej sesji: Add → Recovery Keys → User root@pam, a po wygenerowaniu Print Recovery Keys. Wydruk trafia do koperty w sejfie razem z hasłem roota. Proxmox generuje 10 kodów i każdy działa raz: w teście drugie użycie tego samego kodu skończyło się odpowiedzią 401. Drugiego zestawu nie da się dodać, dopóki istnieje pierwszy („user already has recovery keys”). Kody nie zależą od nazwy panelu: zalogowały roota także pod adresem IP, pod którym WebAuthn nie działa.
Hasło roota, konsola węzła i SSH poza TFA Proxmoxa
Hasło root@pam to hasło Linuksa na węźle, sprawdzane przez PAM. Wynika z tego, że w klastrze każdy węzeł ma własne hasło roota; klastra nie testowaliśmy. TFA Proxmoxa działa przy logowaniu do panelu i API, nie przy konsoli węzła ani SSH. Na pve-lab-01 polecenie sshd -T pokazuje permitrootlogin without-password, więc przez SSH root loguje się wyłącznie kluczem SSH, a hasło roota działa w panelu i na konsoli. Konsola węzła jest też ostatnią drogą ratunku, gdy przepadną wszystkie klucze i kody roota.
Kontrola kont, kluczy i tokenów API w panelu Proxmox VE
Proxmox nie wymusza WebAuthn. Wymuszenie TFA w ustawieniach realmu obsługuje tylko TOTP (ang. Time-based One-Time Password) i Yubico OTP, jak opisuje sekcja Two-Factor Authentication. W teście przy wymuszonym TOTP logowanie kluczem WebAuthn zostało odrzucone z komunikatem realm requires totp authentication. Administrator może też usunąć TFA innemu administratorowi, a wtedy to konto loguje się samym hasłem. Zgodność sprawdzamy więc w panelu co jakiś czas i po każdej zmianie osób:
| Gdzie w panelu | Co sprawdzamy |
|---|---|
| Datacenter → Permissions → Users | Kolumna TFA pokazuje Yes, No, Locked albo TOTP Locked. Yes oznacza dowolny drugi składnik, także same kody odzyskiwania. root@pam ma zaznaczone Enabled. |
| Datacenter → Permissions → Two Factor | Kolumny User, TFA Type, Description i Enabled: każde konto administratora ma co najmniej jeden włączony wpis WebAuthn, a root@pam trzy wpisy WebAuthn i wpis kodów odzyskiwania. Administrator widzi tu wpisy wszystkich kont. |
| Datacenter → Permissions → API Tokens | Kolumny User name, Token Name, Expire i Privilege Separation. Sygnały ostrzegawcze: token konta root@pam, token bez Privilege Separation i token bez daty wygaśnięcia. |
| Datacenter → Permissions | Wpis /, @proxmox-admins, Administrator i tylko te wpisy, które dodaliśmy świadomie. |
Zgubiony YubiKey, odejście administratora i blokada TFA: procedury w panelu
| Sytuacja | Co robimy w panelu |
|---|---|
| Zgubiony klucz administratora | Jako root@pam: Datacenter → Permissions → Two Factor → zaznaczamy wpis tej osoby → Remove. Osoba od razu rejestruje nowy klucz; do tego czasu jej konto działa na samym haśle. |
Zgubiony klucz zapisany na root@pam | Jako root@pam: Two Factor → zaznaczamy wpis root@pam z opisem tego klucza → Remove. |
| Odejście administratora | Jako root@pam: usuwamy jego wpis na root@pam; Users → zaznaczamy konto → Remove (z kontem znikają jego wpisy TFA i tokeny); sprawdzamy API Tokens; zmieniamy hasło roota w menu konta → Password. |
| Nowy administrator | Konto w Users → Add, hasło i klucz jak wyżej, a jego klucz dopisujemy do root@pam w sesji roota. |
| Blokada drugiego składnika | Po 100 nieudanych próbach WebAuthn lub kodów odzyskiwania wszystkie drugie składniki konta są zablokowane na godzinę (sekcja Limits and Lockout). Odblokowanie: Users → zaznaczamy konto → Unlock TFA. |
root@pam wyłączony | Każdy administrator może wyłączyć root@pam. Przywrócenie: Users → root@pam → Edit → zaznaczamy Enabled. |
| Utracone wszystkie klucze i kody roota | W panelu się nie da: administrator nie ma prawa do TFA roota, a root się nie zaloguje. Na konsoli węzła jako root: pveum user tfa delete root@pam (bez --id usuwa wszystkie wpisy), potem rejestracja kluczy od nowa. |
Wpisy TFA usuwamy jako root@pam. Gdy wpis usuwa inne konto, okno „Confirm TFA Removal” pyta o jego hasło, a panel dokleja je do adresu zapytania: DELETE .../access/tfa/<konto>/<id>?password=... (funkcja removeItem w TfaView.js, proxmox-widget-toolkit 5.2.10). pveproxy zapisuje ten adres w /var/log/pveproxy/access.log, który jest trzymany przez 7 rotacji dziennych. Dla root@pam okno nie pyta o hasło, więc adres go nie zawiera.
Zmiana hasła roota z panelu zmienia hasło Linuksa na tym węźle, przez który otwarto panel: PAM.pm wykonuje usermod lokalnie. Tej ścieżki nie testowaliśmy. W klastrze hasło roota zmieniamy więc w panelu każdego węzła.
Granice modelu: tokeny API, operacje tylko dla root@pam i powłoka węzła
root@pam nie chroni przed przejętym kontem administratora. W teście konto ab@pve z rolą Administrator wygenerowało token API dla root@pam bez Privilege Separation: token miał 47 uprawnień i działał bez hasła i bez TFA. Pozwala na to sprawdzenie uprawnień w User.pm (funkcja generate_token nie ma wyjątku dla roota). To samo konto wyłączyło root@pam, po czym logowanie roota do panelu kończyło się odpowiedzią 401. Klucze chronią przed kradzieżą hasła, nie przed nieuczciwym administratorem.
Tokeny API omijają TFA. Token z Privilege Separation wyłączonym ma pełne uprawnienia konta i nie przechodzi przez drugi składnik. Tokenem nie da się za to zmieniać TFA: serwer odpowiada „not available with API token, need proper ticket”. Tworząc token (Datacenter → Permissions → API Tokens → Add), sprawdzamy, czy Privilege Separation jest zaznaczone, ustawiamy Expire (puste pole oznacza never) i nadajemy tokenowi tylko potrzebne uprawnienia przez Permissions → Add → API Token Permission. Szczegóły opisuje sekcja API Tokens dokumentacji.
Niektóre operacje wymagają root@pam mimo roli Administrator. W teście ustawienie args w konfiguracji maszyny wirtualnej zwróciło only root can set 'args' config zarówno administratorowi, jak i tokenowi root@pam; zadziałało dopiero z sesji root@pam zalogowanej kluczem. Z kodu Qemu.pm (qemu-server 9.2.11) i LXC.pm (pve-container 6.1.14) wynika, że to samo dotyczy niemapowanych urządzeń PCI (ang. Peripheral Component Interconnect) i USB, portów szeregowych na prawdziwe urządzenia, a w kontenerach punktów montowania spoza magazynów (bind mount), hookscriptu i flag innych niż nesting.
Powłoka węzła z panelu wygląda inaczej dla kont @pve. Przycisk Shell i przycisk Upgrade uruchamiają dla nich /bin/login, czyli monit logowania kontem Linuksa. root@pam dostaje od razu powłokę roota (/bin/login -f root). Komentarz w Nodes.pm (pve-manager 9.2.21) mówi wprost: „non-root must always login for now, we do not have a superuser role!”. Do powłoki i aktualizacji systemu administratorzy potrzebują więc osobnej drogi, na przykład SSH z kluczami.
Wyniki testu na Proxmox VE 9.2 w labie
Wszystkie przypadki sprawdziliśmy 20 października 2026 r. na pve-lab-01, a potem przywróciliśmy stan sprzed testu.
| Przypadek | Wynik |
|---|---|
Konto w grupie z wpisem / → Administrator, propagacja | 47 uprawnień na każdej sprawdzonej ścieżce |
| Rejestracja klucza bez hasła konta | 400, password is required to modify user |
| Samo hasło przy koncie z kluczem | półbilet PVE:!tfa!, API odpowiada 401 |
| Hasło i klucz innej osoby | 401 |
root@pam z trzema kluczami | każdy z trzech kluczy otwiera sesję |
| Ten sam kod odzyskiwania użyty drugi raz | 401; z 10 kodów zostało 9 |
| Administrator: dodanie, wyłączenie lub usunięcie klucza roota, zmiana hasła roota | 403 |
| Administrator usuwa klucz innego administratora | 200; to konto loguje się samym hasłem |
Administrator wyłącza root@pam | 200; logowanie roota 401 |
Administrator tworzy token root@pam bez Privilege Separation | 200; token ma 47 uprawnień |
args w maszynie wirtualnej: administrator, token roota, sesja roota | 500, 500, 200 |
| Realm z wymuszonym TOTP i logowanie kluczem | odrzucone, realm requires totp authentication |
Panel pod adresem IP, localhost albo krótką nazwą | brak WebAuthn w wyzwaniu |
| Kod odzyskiwania roota pod adresem IP | 200 |
Źródła: dokumentacja Proxmox VE 9.2, kod źródłowy i Chromium 155
- Proxmox VE: User Management (pve-docs 9.2.13): sekcje Groups, Two-Factor Authentication, Limits and Lockout of Two-Factor Authentication, Server Side Webauthn Configuration i API Tokens.
- Proxmox VE: Certificate Management.
- pve-access-control 9.1.2: commit dff26b4586 z 17 września 2026 r.
- pve-manager 9.2.21: commit 4f6e0ac86f z 24 września 2026 r.
- proxmox-widget-toolkit 5.2.10: commit 5faa913848 z 18 września 2026 r.
- qemu-server 9.2.11: commit c5399752ae z 9 października 2026 r.
- pve-container 6.1.14: commit 1c0488315a z 27 sierpnia 2026 r.
- Chromium 155.0.8059.84 (commit 5869fe3135, 14 października 2026): chrome_content_browser_client.cc i authenticator_common_impl.cc. Wirtualny klucz w narzędziach deweloperskich Chrome pomija kontrolę certyfikatu (
IsVirtualEnvironmentEnabled), więc zachowanie przy niezaufanym certyfikacie trzeba sprawdzać prawdziwym YubiKey. - RFC 8555: Automatic Certificate Management Environment (ACME).
Administracja serwerami Linux i DevOps
Usługi administracji serwerami i DevOps prowadzimy pod marką LinuxAdmin. LinuxLab pozostaje bazą wiedzy z poradnikami i wynikami testów.
Powiązany artykuł
YubiKey w pracy administratora Linux: SSH, Ansible i bezpieczne logowanie
FIDO2 i Touch ID na przykładach: logowanie SSH z YubiKey i playbook Ansible.
Zobacz też