У меня YubiKey, openSUSE, SDDM, DMS Quickshell, я покажу на этом примере.

Устанавливаем модуль pam u2f.

openSUSE:

sudo zypper install pam_u2f

Arch:

sudo pacman -S pam-u2f

Debian:

sudo apt install libpam-u2f pamu2fcfg

Далее настройка.

Для юзера.

Создаем директорию с конфигом:

mkdir -p ~/.config/Yubico

Создаем ключ:

sudo pamu2fcfg -u username > ~/.config/Yubico/u2f_keys

Где username – имя вашего юзера.

Касаемся ключа.

Проверяем:

ls -la ~/.config/Yubico/u2f_keys && cat ~/.config/Yubico/u2f_keys

Должен быть ваш юзер (не root) – права и содержимое (имя юзера).

Для root.

sudo -i
1
2
mkdir -p /root/.config/Yubico
pamu2fcfg > /root/.config/Yubico/u2f_keys

Касаемся ключа.

Проверяем:

ls -la /root/.config/Yubico/u2f_keys && cat /root/.config/Yubico/u2f_keys
exit

Сводим оба ключа в общий файл и проверяем:

1
2
3
4
5
6
7
sudo mkdir -p /etc/Yubico
sudo bash -c "cat $HOME/.config/Yubico/u2f_keys > /etc/Yubico/u2f_keys"
sudo bash -c "echo >> /etc/Yubico/u2f_keys"
sudo bash -c "cat /root/.config/Yubico/u2f_keys >> /etc/Yubico/u2f_keys"
sudo chown root:root /etc/Yubico/u2f_keys
sudo chmod 600 /etc/Yubico/u2f_keys
sudo cat /etc/Yubico/u2f_keys

Должно быть два ключа. Выходим из системы и заходим снова. Далее настройка сервисов.

Система.

sudo cp /usr/lib/pam.d/su /etc/pam.d/su
sudo nano /etc/pam.d/su

Добавить:

1
auth      sufficient  pam_u2f.so        cue authfile=/etc/Yubico/u2f_keys

Выше common-auth, но ниже самого первого auth (если есть). Пара примеров:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
auth  sufficient  pam_rootok.so
auth  sufficient  pam_u2f.so      cue authfile=/etc/Yubico/u2f_keys
auth  include     common-auth
# --- #
auth  sufficient  pam_u2f.so      cue authfile=/etc/Yubico/u2f_keys
auth  include     common-auth
# --- #
auth  requisite   pam_nologin.so
auth  sufficient  pam_u2f.so      cue authfile=/etc/Yubico/u2f_keys
auth  substack    common-auth

Нужно чтобы аппаратный ключ был “sufficient” и стоял выше “common-auth”. Иначе оно будет требовать пароль + ключ.

💡
Если вы хотите секьюрно – пароль + ключ, то строка должна быть после “common-auth” и иметь required. Но в таком случае лучше иметь пару ключей (как обычно), и оба их добавить в систему, иначе если потеряете/сломаете, то все…

Проверить:

su

Если ключ подключен, то попросит коснуться ключа. Если же нет, то попросит ввести пароль – или-или.

Повторяете тоже самое для:

  • su-l
  • sudo
  • sddm – ваш Display Manager

В случае чего вернуть назад можно просто удалив файлы, что были скопированы:

sudo sh -c 'cd /etc/pam.d && rm su su-l sudo sddm && ls'

Так же, после обновления ОС, оригинальные файлы могут поменяться (обычно очень не часто), проверить:

1
2
3
4
ARGS=(/usr/lib/pam.d/su /etc/pam.d/su); command -v kompare > /dev/null && kompare "${ARGS[@]}" || { echo -e "\n- su"; diff "${ARGS[@]}"; }
ARGS=(/usr/lib/pam.d/su-l /etc/pam.d/su-l); command -v kompare > /dev/null && kompare "${ARGS[@]}" || { echo -e "\n- su-l"; diff "${ARGS[@]}"; }
ARGS=(/usr/lib/pam.d/sudo /etc/pam.d/sudo); command -v kompare > /dev/null && kompare "${ARGS[@]}" || { echo -e "\n- sudo"; diff "${ARGS[@]}"; }
ARGS=(/usr/lib/pam.d/sddm /etc/pam.d/sddm); command -v kompare > /dev/null && kompare "${ARGS[@]}" || { echo -e "\n- sddm"; diff "${ARGS[@]}"; }
📝
В SDDM, чтобы использовать ключ – нужно нажать Enter.

После входа в систему по ключу, вас может ожидать неприятность на некотором софте:

Authentication required
- The login keyring did not get unlocked when you logged into your computer

Два самых безопасных решения с точки зрения буквально безопасности:

  • Вводить пароль, это все равно один раз после входа в систему
  • Отключить аппаратный ключ для DM и вводить пароль как обычно, это все равно один раз на вход в систему

На sudo это никак не повлияет.

Другой вариант это отключение шифрование keyring, не делайте так.

DMS.

В настройках Lock Screen, включаем Enable security key authentication, откроется терминал с выбором аутентификации, выберите что-то, я предпочитаю sudo и ввести пароль. И для удобства, советую включить Show Password Field если выключено. Подробнее здесь и тут.