FIDO2-ключ (наприклад, YubiKey) додає апаратне підтвердження до локального входу, sudo і навіть розблокування LUKS. Нижче — мій дружній, але технічно акуратний гайд: налаштуємо PAM для GDM/LightDM, TTY та sudo, підв’яжемо LUKS через systemd-cryptenroll і обов’язково сплануємо безпечний відкат 🔐
Підготовка: пакети, ключ і безпечний план
Ми працюватимемо у термінал Linux. Перед змінами зробіть резервні копії PAM-файлів і тримайте відкриту другорядну консоль (Ctrl+Alt+F3) на випадок помилок. Не прибирайте парольні методи, доки все не перевірите.
Встановлення потрібних пакетів
# Ubuntu/Debian
sudo apt update
sudo apt install libpam-u2f libfido2-1 yubikey-manager
# Fedora
sudo dnf install pam_u2f libfido2 ykman
# Arch Linux
sudo pacman -Syu pam-u2f libfido2 yubikey-manager
Перевірте, що ваш ключ бачиться системою (після підключення):
ykman info
Генеруємо зв’язування для PAM (pam_u2f)
PAM-модуль pam_u2f шукає файл зі зв’язуваннями «користувач ↔ ключ». Можна зберегти його в домашній теці користувача або глобально для всіх. Тут покажу глобальний варіант (зручніший для адміністраторів і коли багато користувачів та групи Linux).
Створення глобального файлу мапінгу
# Створіть теку і файл мапінгу
sudo mkdir -p /etc/Yubico
# Додайте зв’язування для свого користувача (торкніться ключа, коли попросить)
pamu2fcfg -u "$USER" | sudo tee -a /etc/Yubico/u2f_keys
# (Необов’язково) Додайте другий ключ як резервний
pamu2fcfg -n -u "$USER" | sudo tee -a /etc/Yubico/u2f_keys
# Права доступу Linux для безпеки
sudo chown root:root /etc/Yubico/u2f_keys
sudo chmod 644 /etc/Yubico/u2f_keys
Альтернатива: зберегти локально у користувача (без sudo):
mkdir -p ~/.config/Yubico
pamu2fcfg > ~/.config/Yubico/u2f_keys
chmod 600 ~/.config/Yubico/u2f_keys
Налаштування PAM: sudo, GDM/LightDM і TTY
Завжди робіть резервну копію файлів у /etc/pam.d/ перед змінами. Поки тестуєте — використовуйте sufficient, щоб зберегти відкат до пароля.
sudo
# Резервна копія
sudo cp /etc/pam.d/sudo /etc/pam.d/sudo.bak
# Відкрийте файл
sudoedit /etc/pam.d/sudo
Додайте рядок на початок секції auth:
auth sufficient pam_u2f.so cue authfile=/etc/Yubico/u2f_keys
Тест:
sudo -K # скид сесії аутентифікації sudo
sudo true # спробуйте — має попросити торкнутися ключа
Щоб вимагати і ключ, і пароль, замініть sufficient на required.
GDM (GNOME)
sudo cp /etc/pam.d/gdm-password /etc/pam.d/gdm-password.bak
sudoedit /etc/pam.d/gdm-password
Додайте ближче до верху:
auth sufficient pam_u2f.so cue authfile=/etc/Yubico/u2f_keys
LightDM
sudo cp /etc/pam.d/lightdm /etc/pam.d/lightdm.bak
sudoedit /etc/pam.d/lightdm
Додайте той самий рядок у секцію auth:
auth sufficient pam_u2f.so cue authfile=/etc/Yubico/u2f_keys
TTY/консоль (login)
sudo cp /etc/pam.d/login /etc/pam.d/login.bak
sudoedit /etc/pam.d/login
Додайте:
auth sufficient pam_u2f.so cue authfile=/etc/Yubico/u2f_keys
Після цього ви зможете входити, торкнувшись ключа; якщо ключа немає — спрацює пароль (поки стоїть sufficient).
FIDO2 для LUKS: розблокування диска
Сучасний спосіб — systemd-cryptenroll. Він додає FIDO2-токен у LUKS, а initramfs запитує торкання при старті.
1) Дізнайтеся свій LUKS-розділ
lsblk -f # знайдіть розділ з "crypto_LUKS" і його UUID
2) Додайте FIDO2-токен
# Приклад: через шлях by-uuid з попереднього кроку
sudo systemd-cryptenroll --fido2-device=auto /dev/disk/by-uuid/UUID-ВАШОГО-РОЗДІЛУ
# (Необов’язково) Вимагати PIN FIDO2 для сильнішої перевірки
# sudo systemd-cryptenroll --fido2-device=auto --fido2-with-client-pin=yes /dev/disk/by-uuid/UUID
Важливо: не видаляйте наявний слот з паролем — це ваш відкат.
3) Оновіть crypttab і initramfs
В /etc/crypttab додайте опцію для автопошуку ключа (ім’я мапінгу у вас може бути іншим, наприклад cryptroot):
sudoedit /etc/crypttab
# Приклад рядка (не стирайте існуючі опції):
# cryptroot UUID=<UUID> none luks,discard,fido2-device=auto
Перебудуйте initramfs:
# Ubuntu/Debian
sudo update-initramfs -u
# Fedora
sudo dracut -f
# Arch Linux
sudo mkinitcpio -P
Перезавантажтеся і торкніться ключа, коли попросять. Якщо ключа немає — можна ввести старий LUKS-пароль (відкат працює).
Альтернативні способи
- pam_fido2 (з libfido2): новіший модуль, але
pam_u2fширше задокументований. Принцип схожий. - Смарт-карта/PIV через
pam_pkcs11: складніше, підходить для корпоративних смарт-карт. - Стара U2F-схема теж працює, але FIDO2 дає PIN та кращу інтеграцію з системою.
GUI-спосіб (частково)
Повністю через GUI це не зробити, але YubiKey Manager (ykman GUI) допоможе:
- Встановіть YubiKey Manager (пакет
yubikey-managerабоykman+ GUI варіант). - Задайте/змініть PIN FIDO2, перевірте функції ключа.
- PAM-конфіг лишається ручним через файли — це нормально для Linux і дає контроль над правами доступу Linux.
FAQ
Чому система не бачить ключ?
Перепід’єднайте ключ, перезавантажте правила udev і тригери:
sudo udevadm control --reload-rules && sudo udevadm trigger
Перевірте ykman info. Спробуйте інший порт або кабель/перехідник.
Заблокували вхід після правок PAM — що робити?
Завантажтеся в режим відновлення з GRUB (Recovery/Rescue), відкрийте шелл root і відкотіть резервні копії з /etc/pam.d/*.bak. Тримайте окрему TTY-консоль активною, доки тестуєте. Це — святий грааль безпечного відкату.
Як зробити, щоб sudo вимагав і ключ, і пароль?
Змініть у /etc/pam.d/sudo з sufficient на required для pam_u2f.so. Тоді PAM завершиться успіхом лише після U2F + звичайної перевірки пароля.
Як додати другий (резервний) ключ?
Запустіть повторно:
pamu2fcfg -n -u "$USER" | sudo tee -a /etc/Yubico/u2f_keys
Для LUKS — повторіть systemd-cryptenroll --fido2-device=auto з другим ключем. Подивіться, що додалося:
sudo systemd-cryptenroll --list /dev/disk/by-uuid/UUID
GDM чи LightDM у мене?
Перевірте активний дисплей-менеджер:
systemctl status display-manager.service
LUKS не просить торкнутися ключа на старті
Переконайтеся, що в /etc/crypttab є fido2-device=auto, перебудуйте initramfs і що у вас systemd у initramfs. У крайньому разі введіть LUKS-пароль — це ваш план B.
Порада від Kernelka
Додавайте FIDO2 поетапно: спершу sudo, потім логін-екран (GDM/LightDM), і лише після успішного тесту — LUKS. Тримайте другий ключ, а в мапінгу — кілька записів. Це прості поради Linux, але вони рятують нерви і час 🚀
Підсумок
- Встановили
pam_u2fіlibfido2, згенерували мапінг користувачів. - Додали FIDO2 до PAM для sudo, GDM/LightDM і TTY з безпечним відкатом через
sufficient. - Налаштували розблокування LUKS через
systemd-cryptenrollі оновили initramfs. - Залишили парольні слоти й резервні копії PAM для аварійного доступу.
- Перевірили все покроково — спершу локально, потім на продуктивних машинах.
Якщо застрягли — не хвилюйтеся: методично відкотіть останній крок і перевірте журнали journalctl. Ви все зможете!

Прокоментувати
На сайті відображається лише твоє ім'я та коментар. Електронна пошта зберігається виключно для зв'язку з тобою за потреби та в жодному разі не передається стороннім особам.