Недавно я попробовал systemd-homed и, сделав это, зарегистрировал свой Yubikey как устройство FIDO2. Когда я пытаюсь аутентифицироваться с помощью созданного дома, homectl authenticate <user>
он корректно активирует Yubikey, запрашивает PIN-код и ждет касания, затем следует обычный запрос пароля.
Но когда я продолжаю и вхожу в эту учетную запись с tty, мне предлагают только ввести пароль, U2F полностью пропускается. Тем не менее, ранее заблокированный дом расшифровывается и открывается, даже если Yubikey отключен.
Как я могу заставить U2F использоваться для любой аутентификации? Я знаю о pam-u2f
, но если это имеет значение здесь, я не знаю как. Я не могу сопоставить ресурсы по защите «традиционного» входа пользователя с pam-u2f
этим сценарием. Они всегда начинают с создания ключей, но они, похоже, управляются systemd-homed
в этом случае (я не смог найти точную информацию об этом).
решение1
Я разобрался в этом и хотел бы поделиться с вами своими выводами, на случай, если кто-то столкнется с той же проблемой.
Все это связано с конфигурацией PAM. Насколько я могу судить по различным выводам в Интернете, это во многом зависит от используемого дистрибутива Linux. В моем случае, на Arch Linux, файл по умолчанию system-auth
, отвечающий за аутентификацию пользователя, выглядел следующим образом:
$ cat /etc/pam.d/system-auth
#%PAM-1.0
auth required pam_faillock.so preauth
auth [success=2 default=ignore] pam_unix.so try_first_pass nullok
-auth [success=1 default=ignore] pam_systemd_home.so
auth [default=die] pam_faillock.so authfail
auth optional pam_permit.so
auth required pam_env.so
auth required pam_faillock.so authsucc
# ...
Это означает, что pam_unix.so
модуль (выполняет аутентификацию по паролю) выполняется первым и пропускает следующие два модуля при успешном завершении. Таким образом, если пароль правильный, pam_systemd_home.so
он никогда не будет выполнен, и, таким образом, не будет запрашивать U2F. Поскольку пароль учетной записи зарегистрирован как ключ LUKS, его достаточно для разблокировки контейнера домашнего раздела.
!!! ОСТОРОЖНОСТЬ !!!
Как всегда, при работе с конфигурацией PAM, всегда держите root-оболочку открытой до тех пор, пока вы успешно не проверите свои изменения, иначе вы рискуете остаться без доступа к своему ПК!
Я хотел выполнить аутентификацию только с помощью моего устройства FIDO2, поэтому я сделал следующее:
cat /etc/pam.d/system-auth
#%PAM-1.0
auth required pam_faillock.so preauth
-auth [success=2 default=ignore] pam_systemd_home.so
auth [success=1 default=ignore] pam_unix.so try_first_pass nullok
auth [default=die] pam_faillock.so authfail
auth optional pam_permit.so
auth required pam_env.so
auth required pam_faillock.so authsucc
Now pam_systemd_home.so
выполняется первым и пропускает запрос пароля по умолчанию при успешном выполнении. Для LUKS этого также достаточно, поскольку устройство FIDO2 зарегистрировано там как токен.
Если вы хотите иметь «настоящую» 2FA, все, что вам нужно сделать, это изменить конфигурации [success=2 default=ignore]
и [success=1...
на required
единицы.